diff options
-rw-r--r-- | engines/avalanche/nim.cpp | 93 |
1 files changed, 48 insertions, 45 deletions
diff --git a/engines/avalanche/nim.cpp b/engines/avalanche/nim.cpp index c0ada304f8..7e3382a3e3 100644 --- a/engines/avalanche/nim.cpp +++ b/engines/avalanche/nim.cpp @@ -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); @@ -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; |