Skip to content

Commit

Permalink
AVALANACHE: Minor bug fix and coding convention fix.
Browse files Browse the repository at this point in the history
  • Loading branch information
uruk committed Dec 20, 2013
1 parent 876e225 commit d3d2f60
Showing 1 changed file with 48 additions and 45 deletions.
93 changes: 48 additions & 45 deletions engines/avalanche/nim.cpp
Expand Up @@ -258,7 +258,10 @@ void Nim::takeSome() {
do {
sr = _stones[_row];
if (sr == 0) {
_row = _row % 2 + 1;
if (_row == 2)
_row = 0;
else
_row++;
_number = 1;
}
} while (sr == 0);
Expand Down Expand Up @@ -393,53 +396,53 @@ void Nim::dogFood() {
}
return;
case 3: {
// Ho hum... this'll be difficult!
// There are three possible courses of action when we have 3 lines left:
// 1) Look for 2 equal lines, then take the odd one out.
// 2) Look for A.P.s, and capitalise on them.
// 3) Go any old where.
const byte other[3][2] = { { 2, 3 }, { 1, 3 }, { 1, 2 } };

for (int i = 0; i < 3; i++) { // Look for 2 equal lines.
if (_stones[other[i][0]] == _stones[other[i][1]]) {
_row = i; // This row.
_number = _stones[i]; // All of 'em.
return;
}
}
// Ho hum... this'll be difficult!
// There are three possible courses of action when we have 3 lines left:
// 1) Look for 2 equal lines, then take the odd one out.
// 2) Look for A.P.s, and capitalise on them.
// 3) Go any old where.
const byte other[3][2] = { { 2, 3 }, { 1, 3 }, { 1, 2 } };

for (int i = 0; i < 3; i++) { // Look for 2 equal lines.
if (_stones[other[i][0]] == _stones[other[i][1]]) {
_row = i; // This row.
_number = _stones[i]; // All of 'em.
return;
}
}

bool sorted;
do {
sorted = true;
for (int i = 0; i < 2; i++) {
if (sr[i] > sr[i + 1]) {
byte temp = sr[i + 1];
sr[i + 1] = sr[i];
sr[i] = temp;

temp = _r[i + 1];
_r[i + 1] = _r[i];
_r[i] = temp;

sorted = false;
}
}
} while (!sorted);

// Now we look for A.P.s...
for (int i = 0; i < 3; i++) {
findAp(i, 1); // There are 3 "1"s.
if (_lmo)
return; // Cut - out.
bool sorted;
do {
sorted = true;
for (int i = 0; i < 2; i++) {
if (sr[i] > sr[i + 1]) {
byte temp = sr[i + 1];
sr[i + 1] = sr[i];
sr[i] = temp;

temp = _r[i + 1];
_r[i + 1] = _r[i];
_r[i] = temp;

sorted = false;
}
findAp(1, 2); // Only "2" possible.
if (_lmo)
return;
}
} while (!sorted);

// A.P.search must have failed - use the default move.
_row = _r[2];
_number = 1;
return;
// Now we look for A.P.s...
for (int i = 0; i < 3; i++) {
findAp(i, 1); // There are 3 "1"s.
if (_lmo)
return; // Cut - out.
}
findAp(1, 2); // Only "2" possible.
if (_lmo)
return;

// A.P.search must have failed - use the default move.
_row = _r[2];
_number = 1;
return;
}
default:
break;
Expand Down

0 comments on commit d3d2f60

Please sign in to comment.