diff options
author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2022-04-02 04:28:38 -0700 |
---|---|---|
committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2022-04-02 04:28:38 -0700 |
commit | 7d23b640eacd0c49578a5227f6cbb7fcf1d4396b (patch) | |
tree | 5d1dd4abf12b2b284417a41f4c213beda2cfb209 | |
parent | 7d902ed12a0dc4a94919df7b827756d1705201b8 (diff) | |
download | dartboat-7d23b640eacd0c49578a5227f6cbb7fcf1d4396b.tar.gz dartboat-7d23b640eacd0c49578a5227f6cbb7fcf1d4396b.tar.xz |
select checkout targets instead of blindly throwing at T20
-rwxr-xr-x | dartbot.rb | 71 |
1 files changed, 60 insertions, 11 deletions
@@ -34,6 +34,60 @@ CENTRE_DISTS = OUTER_DISTS.inject([{}, nil]) { |(h, prev), (k, v)| [h, v] }[0] +CHECKOUTS = { # FIXME better checkout shots + 1 => { + 50=>"BULL", 40=>"D20", 38=>"D19", 36=>"D18", 34=>"D17", 32=>"D16", + 30=>"D15", 28=>"D14", 26=>"D13", 24=>"D12", 22=>"D11", 20=>"D10", 18=>"D9", + 16=>"D8", 14=>"D7", 12=>"D6", 10=>"D5", 8=>"D4", 6=>"D3", 4=>"D2", 2=>"D1" + }, + 2 => { + 110=>"T20", 107=>"T19", 104=>"T18", 101=>"T17", 100=>"T20", 98=>"T20", + 97=>"T19", 96=>"T20", 95=>"T19", 94=>"T18", 93=>"T19", 92=>"T20", + 91=>"T17", 90=>"T18", 89=>"T19", 88=>"T16", 87=>"T17", 86=>"T18", + 85=>"T15", 84=>"T20", 83=>"T17", 82=>"T14", 81=>"T19", 80=>"T20", + 79=>"T19", 78=>"T18", 77=>"T19", 76=>"T20", 75=>"T17", 74=>"T16", + 73=>"T19", 72=>"T16", 71=>"T19", 70=>"T20", 69=>"T19", 68=>"T18", + 67=>"T17", 66=>"T16", 65=>"T15", 64=>"T14", 63=>"T13", 62=>"T12", + 61=>"T11", 60=>"20", 59=>"19", 58=>"18", 57=>"17", 56=>"16", 55=>"15", + 54=>"14", 53=>"13", 52=>"20", 51=>"19", 50=>"18", 49=>"17", 48=>"16", + 47=>"15", 46=>"14", 45=>"13", 44=>"12", 43=>"3", 42=>"10", 41=>"17", + 40=>"D20", 39=>"7", 38=>"D19", 37=>"17", 36=>"D18", 35=>"3", 34=>"D17", + 33=>"17", 32=>"D16", 31=>"7", 30=>"D15", 29=>"17", 28=>"D14", 27=>"3", + 26=>"D13", 25=>"17", 24=>"D12", 23=>"7", 22=>"D11", 21=>"17", 20=>"D10", + 19=>"3", 18=>"D9", 17=>"1", 16=>"D8", 15=>"7", 14=>"D7", 13=>"5", 12=>"D6", + 11=>"3", 10=>"D5", 9=>"1", 8=>"D4", 7=>"3", 6=>"D3", 5=>"1", 4=>"D2", + 3=>"1", 2=>"D1" + }, + 3 => { + 170=>"T20", 167=>"T19", 164=>"T19", 161=>"T20", 160=>"T20", 158=>"T20", + 157=>"T20", 156=>"T20", 155=>"T20", 154=>"T19", 153=>"T20", 152=>"T20", + 151=>"T20", 150=>"T20", 149=>"T20", 148=>"T20", 147=>"T19", 146=>"T19", + 145=>"T20", 144=>"T20", 143=>"T20", 142=>"T20", 141=>"T19", 140=>"T15", + 139=>"T19", 138=>"T20", 137=>"T14", 136=>"T20", 135=>"BULL", 134=>"T14", + 133=>"T14", 132=>"BULL", 131=>"T19", 130=>"T20", 129=>"T19", 128=>"T20", + 127=>"T20", 126=>"T19", 125=>"BULL", 124=>"T20", 123=>"T19", 122=>"T18", + 121=>"T20", 120=>"T20", 119=>"T19", 118=>"T20", 117=>"T20", 116=>"T19", + 115=>"T19", 114=>"T20", 113=>"T19", 112=>"T20", 111=>"T19", 110=>"T19", + 109=>"T20", 108=>"T20", 107=>"T19", 106=>"T20", 105=>"T20", 104=>"T19", + 103=>"T19", 102=>"T20", 101=>"T19", 100=>"T20", 99=>"T19", 98=>"T20", + 97=>"T19", 96=>"T20", 95=>"T19", 94=>"T18", 93=>"T19", 92=>"T20", + 91=>"T17", 90=>"T20", 89=>"T19", 88=>"T20", 87=>"T17", 86=>"T18", + 85=>"T15", 84=>"T20", 83=>"T17", 82=>"BULL", 81=>"T19", 80=>"T20", + 79=>"T19", 78=>"T18", 77=>"T19", 76=>"T16", 75=>"T17", 74=>"T14", + 73=>"T19", 72=>"T16", 71=>"T13", 70=>"T18", 69=>"T15", 68=>"T12", + 67=>"T17", 66=>"T14", 65=>"BULL", 64=>"T16", 63=>"T13", 62=>"T10", + 61=>"BULL", 60=>"20", 59=>"19", 58=>"18", 57=>"17", 56=>"16", 55=>"15", + 54=>"14", 53=>"13", 52=>"20", 51=>"19", 50=>"18", 49=>"17", 48=>"16", + 47=>"15", 46=>"14", 45=>"13", 44=>"12", 43=>"11", 42=>"10", 41=>"9", + 40=>"D20", 39=>"7", 38=>"D19", 37=>"5", 36=>"D18", 35=>"3", 34=>"D17", + 33=>"1", 32=>"D16", 31=>"15", 30=>"D15", 29=>"13", 28=>"D14", 27=>"11", + 26=>"D13", 25=>"9", 24=>"D12", 23=>"7", 22=>"D11", 21=>"5", 20=>"D10", + 19=>"3", 18=>"D9", 17=>"1", 16=>"D8", 15=>"7", 14=>"D7", 13=>"5", 12=>"D6", + 11=>"3", 10=>"D5", 9=>"1", 8=>"D4", 7=>"3", 6=>"D3", 5=>"1", 4=>"D2", + 3=>"1", 2=>"D1" + } +} + def get_coordinates(angle, radius) t = angle * Math::PI / 180 x = radius * Math.cos(t) @@ -131,15 +185,8 @@ def get_segment_coordinates(segment) [SECTOR_ANGLES[sector], CENTRE_DISTS[ring]] end -def next_dart(rem) - segment = - if rem > 40 - 'T20' - elsif rem % 2 == 1 - '1' - else - "D#{rem/2}" - end +def next_dart(rem, in_hand) + segment = CHECKOUTS[in_hand][rem] || (in_hand == 1 ? '20' : 'T20') get_segment_coordinates(segment) end @@ -151,7 +198,7 @@ def play_visit(rem) bust = false 3.times do - t_angle, t_radius = next_dart(v_rem) + t_angle, t_radius = next_dart(v_rem, 3 - darts.length) d_angle, d_radius = throw_dart(t_angle, t_radius) segment = get_segment(d_angle, d_radius) @@ -159,7 +206,9 @@ def play_visit(rem) d_points = get_points(segment) v_rem -= d_points - if v_rem < 0 || v_rem == 1 || (v_rem == 0 && segment !~ /^D/) + if (v_rem < 0 || v_rem == 1 || + (v_rem == 0 && segment != 'BULL' && segment !~ /^D/)) + v_rem = rem bust = true break |