-rw-r--r-- | noncore/games/kcheckers/echeckers.cpp | 12 | ||||
-rw-r--r-- | noncore/games/kcheckers/rcheckers.cpp | 36 |
2 files changed, 30 insertions, 18 deletions
diff --git a/noncore/games/kcheckers/echeckers.cpp b/noncore/games/kcheckers/echeckers.cpp index 1146059..afe62eb 100644 --- a/noncore/games/kcheckers/echeckers.cpp +++ b/noncore/games/kcheckers/echeckers.cpp | |||
@@ -58,51 +58,51 @@ bool ECheckers::go1(int from,int field) | |||
58 | } | 58 | } |
59 | } | 59 | } |
60 | return false; | 60 | return false; |
61 | } | 61 | } |
62 | 62 | ||
63 | 63 | ||
64 | bool ECheckers::checkCapture1() | 64 | bool ECheckers::checkCapture1() |
65 | { | 65 | { |
66 | for(int i=6;i<48;i++) | 66 | for(int i=6;i<48;i++) |
67 | { | 67 | { |
68 | switch(board[i]) | 68 | switch(board[i]) |
69 | { | 69 | { |
70 | case MAN1: | 70 | case MAN1: |
71 | if(board[i-6]==MAN2 || board[i-6]==KING2) | 71 | if(board[i-6]==MAN2 || board[i-6]==KING2) |
72 | if(board[i-12]==FREE) return true; | 72 | if(board[i-12]==FREE) return true; |
73 | if(board[i-5]==MAN2 || board[i-5]==KING2) | 73 | if(board[i-5]==MAN2 || board[i-5]==KING2) |
74 | if(board[i-10]==FREE) return true; | 74 | if(board[i-10]==FREE) return true; |
75 | break; | 75 | break; |
76 | case KING1: | 76 | case KING1: |
77 | if(board[i-6]==MAN2 || board[i-6]==KING2) | 77 | if(board[i-6]==MAN2 || board[i-6]==KING2) |
78 | if(board[i-12]==FREE) return true; | 78 | if(board[i-12]==FREE) return true; |
79 | if(board[i-5]==MAN2 || board[i-5]==KING2) | 79 | if(board[i-5]==MAN2 || board[i-5]==KING2) |
80 | if(board[i-10]==FREE) return true; | 80 | if(board[i-10]==FREE) return true; |
81 | if(board[i+5]==MAN2 || board[i+5]==KING2) | 81 | if(board[i+5]==MAN2 || board[i+5]==KING2) |
82 | if(board[i+10]==FREE) return true; | 82 | if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true; |
83 | if(board[i+6]==MAN2 || board[i+6]==KING2) | 83 | if(board[i+6]==MAN2 || board[i+6]==KING2) |
84 | if(board[i+12]==FREE) return true; | 84 | if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true; |
85 | } | 85 | } |
86 | } | 86 | } |
87 | return false; | 87 | return false; |
88 | } | 88 | } |
89 | 89 | ||
90 | 90 | ||
91 | // Return TRUE if a course of the user true | 91 | // Return TRUE if a course of the user true |
92 | // Return FALSE if a course of the user incorrect | 92 | // Return FALSE if a course of the user incorrect |
93 | 93 | ||
94 | bool ECheckers::manCapture1(int from,int direction,bool &capture) | 94 | bool ECheckers::manCapture1(int from,int direction,bool &capture) |
95 | { | 95 | { |
96 | int i=from+direction; | 96 | int i=from+direction; |
97 | if(board[i]==MAN2 || board[i]==KING2) | 97 | if(board[i]==MAN2 || board[i]==KING2) |
98 | { | 98 | { |
99 | int k=i+direction; | 99 | int k=i+direction; |
100 | if(board[k]==FREE) | 100 | if(board[k]==FREE) |
101 | { | 101 | { |
102 | bool next=false; | 102 | bool next=false; |
103 | int save=board[i]; | 103 | int save=board[i]; |
104 | board[from]=FREE; | 104 | board[from]=FREE; |
105 | board[i]=NONE; | 105 | board[i]=NONE; |
106 | 106 | ||
107 | if(k<10) | 107 | if(k<10) |
108 | { | 108 | { |
@@ -200,61 +200,61 @@ void ECheckers::kingMove2(int from,int &resMax) | |||
200 | turn(resMax); | 200 | turn(resMax); |
201 | board[i]=FREE; | 201 | board[i]=FREE; |
202 | } | 202 | } |
203 | 203 | ||
204 | i=from+6; | 204 | i=from+6; |
205 | if(board[i]==FREE) | 205 | if(board[i]==FREE) |
206 | { | 206 | { |
207 | board[i]=KING2; | 207 | board[i]=KING2; |
208 | turn(resMax); | 208 | turn(resMax); |
209 | board[i]=FREE; | 209 | board[i]=FREE; |
210 | } | 210 | } |
211 | 211 | ||
212 | board[from]=KING2; | 212 | board[from]=KING2; |
213 | } | 213 | } |
214 | 214 | ||
215 | 215 | ||
216 | bool ECheckers::checkCapture2() | 216 | bool ECheckers::checkCapture2() |
217 | { | 217 | { |
218 | for(int i=6;i<48;i++) | 218 | for(int i=6;i<48;i++) |
219 | { | 219 | { |
220 | switch(board[i]) | 220 | switch(board[i]) |
221 | { | 221 | { |
222 | case MAN2: | 222 | case MAN2: |
223 | if(board[i+5]==MAN1 || board[i+5]==KING1) | 223 | if(board[i+5]==MAN1 || board[i+5]==KING1) |
224 | if(board[i+10]==FREE) return true; | 224 | if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true; |
225 | if(board[i+6]==MAN1 || board[i+6]==KING1) | 225 | if(board[i+6]==MAN1 || board[i+6]==KING1) |
226 | if(board[i+12]==FREE) return true; | 226 | if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true; |
227 | break; | 227 | break; |
228 | case KING2: | 228 | case KING2: |
229 | if(board[i-6]==MAN1 || board[i-6]==KING1) | 229 | if(board[i-6]==MAN1 || board[i-6]==KING1) |
230 | if(board[i-12]==FREE) return true; | 230 | if(board[i-12]==FREE) return true; |
231 | if(board[i-5]==MAN1 || board[i-5]==KING1) | 231 | if(board[i-5]==MAN1 || board[i-5]==KING1) |
232 | if(board[i-10]==FREE) return true; | 232 | if(board[i-10]==FREE) return true; |
233 | if(board[i+5]==MAN1 || board[i+5]==KING1) | 233 | if(board[i+5]==MAN1 || board[i+5]==KING1) |
234 | if(board[i+10]==FREE) return true; | 234 | if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true; |
235 | if(board[i+6]==MAN1 || board[i+6]==KING1) | 235 | if(board[i+6]==MAN1 || board[i+6]==KING1) |
236 | if(board[i+12]==FREE) return true; | 236 | if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true; |
237 | } | 237 | } |
238 | } | 238 | } |
239 | return false; | 239 | return false; |
240 | } | 240 | } |
241 | 241 | ||
242 | 242 | ||
243 | // Return TRUE if it is possible to capture | 243 | // Return TRUE if it is possible to capture |
244 | // Return FALSE if it is impossible to capture | 244 | // Return FALSE if it is impossible to capture |
245 | 245 | ||
246 | bool ECheckers::manCapture2(int from,int &resMax) | 246 | bool ECheckers::manCapture2(int from,int &resMax) |
247 | { | 247 | { |
248 | bool capture=false; | 248 | bool capture=false; |
249 | 249 | ||
250 | int i=from+5; | 250 | int i=from+5; |
251 | if(board[i]==MAN1 || board[i]==KING1) | 251 | if(board[i]==MAN1 || board[i]==KING1) |
252 | { | 252 | { |
253 | int k=from+10; | 253 | int k=from+10; |
254 | if(board[k]==FREE) | 254 | if(board[k]==FREE) |
255 | { | 255 | { |
256 | int save=board[i]; | 256 | int save=board[i]; |
257 | board[from]=FREE; | 257 | board[from]=FREE; |
258 | board[i]=NONE; | 258 | board[i]=NONE; |
259 | resMax--; | 259 | resMax--; |
260 | if(from>32) | 260 | if(from>32) |
diff --git a/noncore/games/kcheckers/rcheckers.cpp b/noncore/games/kcheckers/rcheckers.cpp index a1c7afa..d808780 100644 --- a/noncore/games/kcheckers/rcheckers.cpp +++ b/noncore/games/kcheckers/rcheckers.cpp | |||
@@ -91,69 +91,75 @@ bool RCheckers::go1(int from,int field) | |||
91 | return true; | 91 | return true; |
92 | } | 92 | } |
93 | else if(board[i]==FREE) continue; | 93 | else if(board[i]==FREE) continue; |
94 | else break; | 94 | else break; |
95 | } | 95 | } |
96 | return false; | 96 | return false; |
97 | } | 97 | } |
98 | } | 98 | } |
99 | return false; | 99 | return false; |
100 | } | 100 | } |
101 | 101 | ||
102 | 102 | ||
103 | bool RCheckers::checkCapture1() | 103 | bool RCheckers::checkCapture1() |
104 | { | 104 | { |
105 | for(int i=6;i<48;i++) | 105 | for(int i=6;i<48;i++) |
106 | { | 106 | { |
107 | switch(board[i]) | 107 | switch(board[i]) |
108 | { | 108 | { |
109 | case MAN1: | 109 | case MAN1: |
110 | if(board[i-6]==MAN2 || board[i-6]==KING2) | 110 | if(board[i-6]==MAN2 || board[i-6]==KING2) |
111 | if(board[i-12]==FREE) return true; | 111 | if(board[i-12]==FREE) return true; |
112 | if(board[i-5]==MAN2 || board[i-5]==KING2) | 112 | if(board[i-5]==MAN2 || board[i-5]==KING2) |
113 | if(board[i-10]==FREE) return true; | 113 | if(board[i-10]==FREE) return true; |
114 | if(board[i+5]==MAN2 || board[i+5]==KING2) | 114 | if(board[i+5]==MAN2 || board[i+5]==KING2) |
115 | if(board[i+10]==FREE) return true; | 115 | if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true; |
116 | if(board[i+6]==MAN2 || board[i+6]==KING2) | 116 | if(board[i+6]==MAN2 || board[i+6]==KING2) |
117 | if(board[i+12]==FREE) return true; | 117 | if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true; |
118 | break; | 118 | break; |
119 | case KING1: | 119 | case KING1: |
120 | int k; | 120 | int k; |
121 | for(k=i-6;board[k]==FREE;k-=6); | 121 | for(k=i-6;board[k]==FREE;k-=6); |
122 | if(board[k]==MAN2 || board[k]==KING2) | 122 | if(board[k]==MAN2 || board[k]==KING2) |
123 | if(board[k-6]==FREE) return true; | 123 | if(board[k-6]==FREE) return true; |
124 | 124 | ||
125 | for(k=i-5;board[k]==FREE;k-=5); | 125 | for(k=i-5;board[k]==FREE;k-=5); |
126 | if(board[k]==MAN2 || board[k]==KING2) | 126 | if(board[k]==MAN2 || board[k]==KING2) |
127 | if(board[k-5]==FREE) return true; | 127 | if(board[k-5]==FREE) return true; |
128 | 128 | ||
129 | for(k=i+5;board[k]==FREE;k+=5); | 129 | for(k=i+5;board[k]==FREE;k+=5) { |
130 | if (k >= 49) | ||
131 | break; | ||
132 | } | ||
130 | if(board[k]==MAN2 || board[k]==KING2) | 133 | if(board[k]==MAN2 || board[k]==KING2) |
131 | if(board[k+5]==FREE) return true; | 134 | if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true; |
132 | 135 | ||
133 | for(k=i+6;board[k]==FREE;k+=6); | 136 | for(k=i+6;board[k]==FREE;k+=6) { |
137 | if (k >=48) | ||
138 | break; | ||
139 | } | ||
134 | if(board[k]==MAN2 || board[k]==KING2) | 140 | if(board[k]==MAN2 || board[k]==KING2) |
135 | if(board[k+6]==FREE) return true; | 141 | if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true; |
136 | } | 142 | } |
137 | } | 143 | } |
138 | return false; | 144 | return false; |
139 | } | 145 | } |
140 | 146 | ||
141 | 147 | ||
142 | // Return TRUE if a course of the user true | 148 | // Return TRUE if a course of the user true |
143 | // Return FALSE if a course of the user incorrect | 149 | // Return FALSE if a course of the user incorrect |
144 | 150 | ||
145 | bool RCheckers::manCapture1(int from,int direction,bool &capture) | 151 | bool RCheckers::manCapture1(int from,int direction,bool &capture) |
146 | { | 152 | { |
147 | int i=from+direction; | 153 | int i=from+direction; |
148 | if(board[i]==MAN2 || board[i]==KING2) | 154 | if(board[i]==MAN2 || board[i]==KING2) |
149 | { | 155 | { |
150 | int k=i+direction; | 156 | int k=i+direction; |
151 | if(board[k]==FREE) | 157 | if(board[k]==FREE) |
152 | { | 158 | { |
153 | bool next=false; | 159 | bool next=false; |
154 | int save=board[i]; | 160 | int save=board[i]; |
155 | board[from]=FREE; | 161 | board[from]=FREE; |
156 | board[i]=NONE; | 162 | board[i]=NONE; |
157 | 163 | ||
158 | if(k<10) | 164 | if(k<10) |
159 | { | 165 | { |
@@ -265,69 +271,75 @@ void RCheckers::kingMove2(int from,int &resMax) | |||
265 | board[i]=FREE; | 271 | board[i]=FREE; |
266 | } | 272 | } |
267 | for(int i=from+6;board[i]==FREE;i+=6) | 273 | for(int i=from+6;board[i]==FREE;i+=6) |
268 | { | 274 | { |
269 | board[i]=KING2; | 275 | board[i]=KING2; |
270 | turn(resMax); | 276 | turn(resMax); |
271 | board[i]=FREE; | 277 | board[i]=FREE; |
272 | } | 278 | } |
273 | board[from]=KING2; | 279 | board[from]=KING2; |
274 | } | 280 | } |
275 | 281 | ||
276 | 282 | ||
277 | bool RCheckers::checkCapture2() | 283 | bool RCheckers::checkCapture2() |
278 | { | 284 | { |
279 | for(int i=6;i<48;i++) | 285 | for(int i=6;i<48;i++) |
280 | { | 286 | { |
281 | switch(board[i]) | 287 | switch(board[i]) |
282 | { | 288 | { |
283 | case MAN2: | 289 | case MAN2: |
284 | if(board[i-6]==MAN1 || board[i-6]==KING1) | 290 | if(board[i-6]==MAN1 || board[i-6]==KING1) |
285 | if(board[i-12]==FREE) return true; | 291 | if(board[i-12]==FREE) return true; |
286 | if(board[i-5]==MAN1 || board[i-5]==KING1) | 292 | if(board[i-5]==MAN1 || board[i-5]==KING1) |
287 | if(board[i-10]==FREE) return true; | 293 | if(board[i-10]==FREE) return true; |
288 | if(board[i+5]==MAN1 || board[i+5]==KING1) | 294 | if(board[i+5]==MAN1 || board[i+5]==KING1) |
289 | if(board[i+10]==FREE) return true; | 295 | if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true; |
290 | if(board[i+6]==MAN1 || board[i+6]==KING1) | 296 | if(board[i+6]==MAN1 || board[i+6]==KING1) |
291 | if(board[i+12]==FREE) return true; | 297 | if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true; |
292 | break; | 298 | break; |
293 | case KING2: | 299 | case KING2: |
294 | int k; | 300 | int k; |
295 | for(k=i-6;board[k]==FREE;k-=6); | 301 | for(k=i-6;board[k]==FREE;k-=6); |
296 | if(board[k]==MAN1 || board[k]==KING1) | 302 | if(board[k]==MAN1 || board[k]==KING1) |
297 | if(board[k-6]==FREE) return true; | 303 | if(board[k-6]==FREE) return true; |
298 | 304 | ||
299 | for(k=i-5;board[k]==FREE;k-=5); | 305 | for(k=i-5;board[k]==FREE;k-=5); |
300 | if(board[k]==MAN1 || board[k]==KING1) | 306 | if(board[k]==MAN1 || board[k]==KING1) |
301 | if(board[k-5]==FREE) return true; | 307 | if(board[k-5]==FREE) return true; |
302 | 308 | ||
303 | for(k=i+5;board[k]==FREE;k+=5); | 309 | for(k=i+5;board[k]==FREE;k+=5) { |
310 | if (k>=49) | ||
311 | break; | ||
312 | } | ||
304 | if(board[k]==MAN1 || board[k]==KING1) | 313 | if(board[k]==MAN1 || board[k]==KING1) |
305 | if(board[k+5]==FREE) return true; | 314 | if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true; |
306 | 315 | ||
307 | for(k=i+6;board[k]==FREE;k+=6); | 316 | for(k=i+6;board[k]==FREE;k+=6) { |
317 | if (k>=48) | ||
318 | break; | ||
319 | } | ||
308 | if(board[k]==MAN1 || board[k]==KING1) | 320 | if(board[k]==MAN1 || board[k]==KING1) |
309 | if(board[k+6]==FREE) return true; | 321 | if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true; |
310 | } | 322 | } |
311 | } | 323 | } |
312 | return false; | 324 | return false; |
313 | } | 325 | } |
314 | 326 | ||
315 | 327 | ||
316 | // Return TRUE if it is possible to capture | 328 | // Return TRUE if it is possible to capture |
317 | // Return FALSE if it is impossible to capture | 329 | // Return FALSE if it is impossible to capture |
318 | 330 | ||
319 | bool RCheckers::manCapture2(int from,int &resMax) | 331 | bool RCheckers::manCapture2(int from,int &resMax) |
320 | { | 332 | { |
321 | bool capture=false; | 333 | bool capture=false; |
322 | 334 | ||
323 | int i=from-6; | 335 | int i=from-6; |
324 | if(board[i]==MAN1 || board[i]==KING1) | 336 | if(board[i]==MAN1 || board[i]==KING1) |
325 | { | 337 | { |
326 | int k=from-12; | 338 | int k=from-12; |
327 | if(board[k]==FREE) | 339 | if(board[k]==FREE) |
328 | { | 340 | { |
329 | int save=board[i]; | 341 | int save=board[i]; |
330 | board[from]=FREE; | 342 | board[from]=FREE; |
331 | board[i]=NONE; | 343 | board[i]=NONE; |
332 | board[k]=MAN2; | 344 | board[k]=MAN2; |
333 | resMax--; | 345 | resMax--; |