aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/nim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/avalanche/nim.cpp')
-rw-r--r--engines/avalanche/nim.cpp112
1 files changed, 56 insertions, 56 deletions
diff --git a/engines/avalanche/nim.cpp b/engines/avalanche/nim.cpp
index 8f73fe6c0d..2629b99854 100644
--- a/engines/avalanche/nim.cpp
+++ b/engines/avalanche/nim.cpp
@@ -257,66 +257,63 @@ void Nim::dogFood() {
if (sr[0] > sr[1]) { // T > b
_row = _r[0];
_number = sr[0] - sr[1];
- return;
- }
- else if (sr[0] < sr[1]) { // B > t
+ } else if (sr[0] < sr[1]) { // B > t
_row = _r[1];
_number = sr[1] - sr[0];
- return;
- }
- else { // B = t... oh no, we've lost!
+ } else { // B = t... oh no, we've lost!
_row = _r[0];
_number = 1;
- return;
}
- break;
- 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;
- }
-
- 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 = 1; i <= 3; i++) {
- findAp(i, 1); // There are 3 "1"s.
- if (_lmo)
- return; // Cut - out.
+ 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;
+ }
+ }
+
+ 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);
+
+ // Now we look for A.P.s...
+ for (int i = 1; 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;
+ // A.P.search must have failed - use the default move.
+ _row = _r[2];
+ _number = 1;
+ return;
}
- break;
default:
break;
}
@@ -324,11 +321,12 @@ void Nim::dogFood() {
bool Nim::find(byte x) {
bool ret = false;
- for (int i = 0; i < 3; i++)
+ for (int i = 0; i < 3; i++) {
if (_stones[i] == x) {
ret = true;
_inAp[i] = true;
}
+ }
return ret;
}
@@ -337,24 +335,26 @@ void Nim::findAp(byte start, byte stepSize) {
byte matches = 0;
for (int i = 0; i < 3; i++)
_inAp[i] = 0; // Blank 'em all!
- for (int i = 0; i < 3; i++)
+ for (int i = 0; i < 3; i++) {
if (find(start + i * stepSize))
matches++;
else
thisOne = i;
+ }
// Now..Matches must be 0, 1, 2, or 3.
// 0 / 1 mean there are no A.P.s here, so we'll keep looking,
// 2 means there is a potential A.P.that we can create (ideal!), and
// 3 means that we're already in an A.P. (Trouble!)
- byte ooo; // Odd one out.
+ byte ooo = 0; // Odd one out.
switch (matches) {
case 2:
- for (int i = 0; i < 3; i++) // Find which one didn't fit the A.P.
+ for (int i = 0; i < 3; i++) { // Find which one didn't fit the A.P.
if (!_inAp[i])
ooo = i;
+ }
if (_stones[ooo] > (start + thisOne * stepSize)) { // Check if it's possible!
// Create an A.P.