Skip to content

Commit 8ba7047

Browse files
committed
check win state
1 parent 30809c1 commit 8ba7047

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/main/java/scorekeep/TicTacToe.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package scorekeep;
22

33
import java.lang.Character;
4+
import java.lang.Math;
45
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
67

@@ -25,7 +26,39 @@ public static String move(String oldState, String moveText) {
2526
logger.error("Not your turn");
2627
}
2728
// new = "ONNXNNNNNN"
29+
// check for victory
30+
// - convert state to integer
31+
int stateInt = toInt(oldchar, movchar[0]);
32+
logger.warn("state int: " + stateInt);
33+
// - compare
34+
boolean win = checkWin(stateInt);
35+
36+
2837
String newState = new String(oldchar);
2938
return newState;
3039
}
40+
41+
public static int toInt(char[] state, char turn) {
42+
int out = 0;
43+
int len = state.length;
44+
for ( int i = 1; i <= len; i++ ){
45+
if ( state[len-i] == turn) {
46+
out += java.lang.Math.pow( 2, i-1 );
47+
}
48+
}
49+
return out;
50+
}
51+
52+
public static boolean checkWin(int state) {
53+
int[] winningStates = {7,56,73,84,146,273,292,448};
54+
for ( int i = 0; i < 8; i++ ){
55+
int combinedState = winningStates[i] & state;
56+
if ( combinedState == winningStates[i]) {
57+
logger.warn("winning state: " + state);
58+
logger.warn("matches: " + winningStates[i]);
59+
return true;
60+
}
61+
}
62+
return false;
63+
}
3164
}

0 commit comments

Comments
 (0)