summaryrefslogtreecommitdiff
path: root/noncore/games/kcheckers/rcheckers.cpp
Side-by-side diff
Diffstat (limited to 'noncore/games/kcheckers/rcheckers.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/kcheckers/rcheckers.cpp36
1 files changed, 24 insertions, 12 deletions
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
@@ -103,45 +103,51 @@ bool RCheckers::go1(int from,int field)
bool RCheckers::checkCapture1()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN1:
if(board[i-6]==MAN2 || board[i-6]==KING2)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN2 || board[i-5]==KING2)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN2 || board[i+5]==KING2)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN2 || board[i+6]==KING2)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
break;
case KING1:
int k;
for(k=i-6;board[k]==FREE;k-=6);
if(board[k]==MAN2 || board[k]==KING2)
if(board[k-6]==FREE) return true;
for(k=i-5;board[k]==FREE;k-=5);
if(board[k]==MAN2 || board[k]==KING2)
if(board[k-5]==FREE) return true;
- for(k=i+5;board[k]==FREE;k+=5);
+ for(k=i+5;board[k]==FREE;k+=5) {
+ if (k >= 49)
+ break;
+ }
if(board[k]==MAN2 || board[k]==KING2)
- if(board[k+5]==FREE) return true;
+ if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true;
- for(k=i+6;board[k]==FREE;k+=6);
+ for(k=i+6;board[k]==FREE;k+=6) {
+ if (k >=48)
+ break;
+ }
if(board[k]==MAN2 || board[k]==KING2)
- if(board[k+6]==FREE) return true;
+ if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if a course of the user true
// Return FALSE if a course of the user incorrect
bool RCheckers::manCapture1(int from,int direction,bool &capture)
{
int i=from+direction;
@@ -277,45 +283,51 @@ void RCheckers::kingMove2(int from,int &resMax)
bool RCheckers::checkCapture2()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN2:
if(board[i-6]==MAN1 || board[i-6]==KING1)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN1 || board[i-5]==KING1)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN1 || board[i+5]==KING1)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN1 || board[i+6]==KING1)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
break;
case KING2:
int k;
for(k=i-6;board[k]==FREE;k-=6);
if(board[k]==MAN1 || board[k]==KING1)
if(board[k-6]==FREE) return true;
for(k=i-5;board[k]==FREE;k-=5);
if(board[k]==MAN1 || board[k]==KING1)
if(board[k-5]==FREE) return true;
- for(k=i+5;board[k]==FREE;k+=5);
+ for(k=i+5;board[k]==FREE;k+=5) {
+ if (k>=49)
+ break;
+ }
if(board[k]==MAN1 || board[k]==KING1)
- if(board[k+5]==FREE) return true;
+ if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true;
- for(k=i+6;board[k]==FREE;k+=6);
+ for(k=i+6;board[k]==FREE;k+=6) {
+ if (k>=48)
+ break;
+ }
if(board[k]==MAN1 || board[k]==KING1)
- if(board[k+6]==FREE) return true;
+ if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if it is possible to capture
// Return FALSE if it is impossible to capture
bool RCheckers::manCapture2(int from,int &resMax)
{
bool capture=false;