我目前正在开发一款实现minimax的TicTacToe游戏。在该minimax算法中,我有一个名为canWin的方法,它大大减少了为计算最佳下一步所需采取的所需步骤数(对minimax方法的内部递归调用次数)。只是为了显示canWin对我的程序有多大影响,没有canWin的3x3游戏代码需要大约2000步来计算移动和4x4游戏13810133步。然而,对于canWin,3x3只需要600左右,4x4只需要9246569。
令人惊讶的问题现在变成了运行时间。奇怪的是,minimax方法实际上运行得更快,没有添加canWin,即使它需要更多的步骤来完成计算。这让我相信canWin方法会减慢它的速度。哪种方式胜过它的目的但是可以理解,因为它是一种写得非常糟糕的方法。所以我需要帮助使canWin更有效率。这种方法很长。不必要的。它的工作是查看电路板的当前状态(包含X,O或 - 的字符数组),并检查是否有可能获胜(例如X X - 或O - O)。首先,它检查电路板的大小,然后检查它的转向。如果有机会让他获胜,谁有转牌检查。如果他有可能通过填写所需的位置来接受它。否则他会检查对手是否有机会获胜。如果他的对手有机会获胜,他会通过填写所需的位置来阻止它。 该方法返回需要填充的槽(槽的编号),以便获得潜在的胜利或阻止潜在的损失。
在这里,我知道它很糟糕,但在这里帮助我:
public int canWin3(){
int pot=-1;
if(n==3){
if(turn=='O'){
//O win gets priority
//Check if 0 is free and potential winning spot for O
if(((state[1] == 'O' && state[2] == 'O') ||
(state[3] == 'O' && state[6]=='O')
|| (state[4] == 'O' && state[8]=='O'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for O
else if(((state[0] == 'O' && state[2] == 'O') ||
(state[4] == 'O' && state[7]=='O'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O') ||
(state[4] == 'O' && state[6]=='O')
|| (state[5] == 'O' && state[8]=='O'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for O
else if(((state[0] == 'O' && state[6] == 'O') ||
(state[4] == 'O' && state[5]=='O'))&&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for O
else if(((state[0] == 'O' && state[8] == 'O') ||
(state[1] == 'O' && state[7]=='O') ||
(state[2] == 'O' && state[6]=='O') ||
(state[3] == 'O' && state[5] == 'O'))&&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for O
else if(((state[2] == 'O' && state[8] == 'O') ||
(state[3] == 'O' && state[4]=='O'))&&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for O
else if(((state[0] == 'O' && state[3] == 'O') ||
(state[4] == 'O' && state[2]=='O') ||
(state[7] == 'O' && state[8]=='O'))&&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for O
else if(((state[1] == 'O' && state[4] == 'O') ||
(state[6] == 'O' && state[8]=='O'))&&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for O
else if(((state[0] == 'O' && state[4] == 'O') ||
(state[2] == 'O' && state[5]=='O') ||
(state[6] == 'O' && state[7]=='O'))&&
(state[8]=='-')){
pot=8;
}
//Check for possible X win if there are no potential O wins
//Check if 0 is free and potential winning spot for X
else if(((state[1] == 'X' && state[2] == 'X') ||
(state[3] == 'X' && state[6]=='X') ||
(state[4] == 'X' && state[8]=='X'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for X
else if(((state[0] == 'X' && state[2] == 'X') ||
(state[4] == 'X' && state[7]=='X'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X') ||
(state[4] == 'X' && state[6]=='X') ||
(state[5] == 'X' && state[8]=='X'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for X
else if(((state[0] == 'X' && state[6] == 'X') ||
(state[4] == 'X' && state[5]=='X'))&&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for X
else if(((state[0] == 'X' && state[8] == 'X') ||
(state[1] == 'X' && state[7]=='X') ||
(state[2] == 'X' && state[6]=='X') ||
(state[3] == 'X' && state[5] == 'X'))&&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for X
else if(((state[2] == 'X' && state[8] == 'X') ||
(state[3] == 'X' && state[4]=='X'))&&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for X
else if(((state[0] == 'X' && state[3] == 'X') ||
(state[4] == 'X' && state[2]=='X') ||
(state[7] == 'X' && state[8]=='X'))&&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for X
else if(((state[1] == 'X' && state[4] == 'X') ||
(state[6] == 'X' && state[8]=='X'))&&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for X
else if(((state[0] == 'X' && state[4] == 'X') ||
(state[2] == 'X' && state[5]=='X') ||
(state[6] == 'X' && state[7]=='X'))&&
(state[8]=='-')){
pot=8;
}
}
//X win gets priority
//Check if 0 is free and potential winning spot for X
else {
if(((state[1] == 'X' && state[2] == 'X') ||
(state[3] == 'X' && state[6]=='X') ||
(state[4] == 'X' && state[8]=='X'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for X
else if(((state[0] == 'X' && state[2] == 'X') ||
(state[4] == 'X' && state[7]=='X'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X') ||
(state[4] == 'X' && state[6]=='X') ||
(state[5] == 'X' && state[8]=='X'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for X
else if(((state[0] == 'X' && state[6] == 'X') ||
(state[4] == 'X' && state[5]=='X'))&&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for X
else if(((state[0] == 'X' && state[8] == 'X') ||
(state[1] == 'X' && state[7]=='X') ||
(state[2] == 'X' && state[6]=='X') ||
(state[3] == 'X' && state[5] == 'X'))&&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for X
else if(((state[2] == 'X' && state[8] == 'X') ||
(state[3] == 'X' && state[4]=='X'))&&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for X
else if(((state[0] == 'X' && state[3] == 'X') ||
(state[4] == 'X' && state[2]=='X') ||
(state[7] == 'X' && state[8]=='X'))&&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for X
else if(((state[1] == 'X' && state[4] == 'X') ||
(state[6] == 'X' && state[8]=='X'))&&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for X
else if(((state[0] == 'X' && state[4] == 'X') ||
(state[2] == 'X' && state[5]=='X') ||
(state[6] == 'X' && state[7]=='X'))&&
(state[8]=='-')){
pot=8;
}
//Check for possible O win if there are no X wins
//Check if 0 is free and potential winning spot for O
else if(((state[1] == 'O' && state[2] == 'O') ||
(state[3] == 'O' && state[6]=='O') ||
(state[4] == 'O' && state[8]=='O'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for O
else if(((state[0] == 'O' && state[2] == 'O') ||
(state[4] == 'O' && state[7]=='O'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O') ||
(state[4] == 'O' && state[6]=='O') ||
(state[5] == 'O' && state[8]=='O'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for O
else if(((state[0] == 'O' && state[6] == 'O') ||
(state[4] == 'O' && state[5]=='O'))&&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for O
else if(((state[0] == 'O' && state[8] == 'O') ||
(state[1] == 'O' && state[7]=='O') ||
(state[2] == 'O' && state[6]=='O') ||
(state[3] == 'O' && state[5] == 'O'))&&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for O
else if(((state[2] == 'O' && state[8] == 'O') ||
(state[3] == 'O' && state[4]=='O'))&&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for O
else if(((state[0] == 'O' && state[3] == 'O') ||
(state[4] == 'O' && state[2]=='O') ||
(state[7] == 'O' && state[8]=='O'))&&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for O
else if(((state[1] == 'O' && state[4] == 'O') ||
(state[6] == 'O' && state[8]=='O'))&&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for O
else if(((state[0] == 'O' && state[4] == 'O') ||
(state[2] == 'O' && state[5]=='O') ||
(state[6] == 'O' && state[7]=='O'))&&
(state[8]=='-')){
pot=8;
}
}
}
else {
if(turn=='O'){
//potential O win gets priority
//Check if 0 is free and potential winning spot for O
if(((state[1] == 'O' && state[2] == 'O' && state[3]=='O') ||
(state[4] == 'O' && state[8]=='O' && state[12]=='O') ||
(state[5] == 'O' && state[10]=='O' && state[15]=='O'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for O
else if(((state[0] == 'O' && state[2] == 'O' && state[3]=='O') ||
(state[5] == 'O' && state[9]=='O' && state[13]=='O'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O' && state[3]=='O') ||
(state[6] == 'O' && state[10]=='O' && state[14]=='O'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O' && state[2]=='O') ||
(state[7] == 'O' && state[11] =='O' && state[15]=='O') ||
(state[12] == 'O' && state[9] == 'O' && state[6] == 'O')) &&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for O
else if(((state[0] == 'O' && state[8] == 'O' && state[12]=='O') ||
(state[5] == 'O' && state[6] =='O' && state[7]=='O')) &&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for O
else if(((state[1] == 'O' && state[9] == 'O' && state[13]=='O') ||
(state[4] == 'O' && state[6] =='O' && state[7]=='O')) &&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for O
else if(((state[2] == 'O' && state[10] == 'O' && state[14]=='O') ||
(state[4] == 'O' && state[5] =='O' && state[7]=='O')) &&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for O
else if(((state[3] == 'O' && state[11] == 'O' && state[15]=='O') ||
(state[4] == 'O' && state[6] =='O' && state[5]=='O')) &&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for O
else if(((state[9] == 'O' && state[10] == 'O' && state[11]=='O') ||
(state[0] == 'O' && state[4] =='O' && state[12]=='O')) &&
(state[8]=='-')){
pot=8;
}
//Check if 9 is free and potential winning spot for O
else if(((state[8] == 'O' && state[10] == 'O' && state[11]=='O') ||
(state[1] == 'O' && state[5] =='O' && state[13]=='O')) &&
(state[9]=='-')){
pot=9;
}
//Check if 10 is free and potential winning spot for O
else if(((state[8] == 'O' && state[9] == 'O' && state[11]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[14]=='O')) &&
(state[10]=='-')){
pot=10;
}
//Check if 11 is free and potential winning spot for O
else if(((state[8] == 'O' && state[9] == 'O' && state[10]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[14]=='O')) &&
(state[11]=='-')){
pot=11;
}
//Check if 12 is free and potential winning spot for O
else if(((state[13] == 'O' && state[14] == 'O' && state[15]=='O') ||
(state[0] == 'O' && state[4] =='O' && state[8]=='O') ||
(state[9] == 'O' && state[6] =='O' && state[3]=='O')) &&
(state[12]=='-')){
pot=12;
}
//Check if 13 is free and potential winning spot for O
else if(((state[12] == 'O' && state[14] == 'O' && state[15]=='O') ||
(state[1] == 'O' && state[5] =='O' && state[9]=='O')) &&
(state[13]=='-')){
pot=13;
}
//Check if 14 is free and potential winning spot for O
else if(((state[12] == 'O' && state[13] == 'O' && state[15]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[10]=='O')) &&
(state[14]=='-')){
pot=14;
}
//Check if 15 is free and potential winning spot for O
else if(((state[12] == 'O' && state[13] == 'O' && state[14]=='O') ||
(state[3] == 'O' && state[7] =='O' && state[11]=='O') ||
(state[10] == 'O' && state[5] =='O' && state[0]=='O')) &&
(state[15]=='-')){
pot=15;
}
//Check if 0 is free and potential winning spot for X
else if(((state[1] == 'X' && state[2] == 'X' && state[3]=='X') ||
(state[4] == 'X' && state[8]=='X' && state[12]=='X') ||
(state[5] == 'X' && state[10]=='X' && state[15]=='X'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for X
else if(((state[0] == 'X' && state[2] == 'X' && state[3]=='X') ||
(state[5] == 'X' && state[9]=='X' && state[13]=='X'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X' && state[3]=='X') ||
(state[6] == 'X' && state[10]=='X' && state[14]=='X'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X' && state[2]=='X') ||
(state[7] == 'X' && state[11] =='X' && state[15]=='X') ||
(state[12] == 'X' && state[9] == 'X' && state[6] == 'X')) &&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for X
else if(((state[0] == 'X' && state[8] == 'X' && state[12]=='X') ||
(state[5] == 'X' && state[6] =='X' && state[7]=='X')) &&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for X
else if(((state[1] == 'X' && state[9] == 'X' && state[13]=='X') ||
(state[4] == 'X' && state[6] =='X' && state[7]=='X')) &&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for X
else if(((state[2] == 'X' && state[10] == 'X' && state[14]=='X') ||
(state[4] == 'X' && state[5] =='X' && state[7]=='X')) &&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for X
else if(((state[3] == 'X' && state[11] == 'X' && state[15]=='X') ||
(state[4] == 'X' && state[6] =='X' && state[5]=='X')) &&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for X
else if(((state[9] == 'X' && state[10] == 'X' && state[11]=='X') ||
(state[0] == 'X' && state[4] =='X' && state[12]=='X')) &&
(state[8]=='-')){
pot=8;
}
//Check if 9 is free and potential winning spot for X
else if(((state[8] == 'X' && state[10] == 'X' && state[11]=='X') ||
(state[1] == 'X' && state[5] =='X' && state[13]=='X')) &&
(state[9]=='-')){
pot=9;
}
//Check if 10 is free and potential winning spot for X
else if(((state[8] == 'X' && state[9] == 'X' && state[11]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[14]=='X')) &&
(state[10]=='-')){
pot=10;
}
//Check if 11 is free and potential winning spot for X
else if(((state[8] == 'X' && state[9] == 'X' && state[10]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[14]=='X')) &&
(state[11]=='-')){
pot=11;
}
//Check if 12 is free and potential winning spot for X
else if(((state[13] == 'X' && state[14] == 'X' && state[15]=='X') ||
(state[0] == 'X' && state[4] =='X' && state[8]=='X') ||
(state[9] == 'X' && state[6] =='X' && state[3]=='X')) &&
(state[12]=='-')){
pot=12;
}
//Check if 13 is free and potential winning spot for X
else if(((state[12] == 'X' && state[14] == 'X' && state[15]=='X') ||
(state[1] == 'X' && state[5] =='X' && state[9]=='X')) &&
(state[13]=='-')){
pot=13;
}
//Check if 14 is free and potential winning spot for X
else if(((state[12] == 'X' && state[13] == 'X' && state[15]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[10]=='X')) &&
(state[14]=='-')){
pot=14;
}
//Check if 15 is free and potential winning spot for X
else if(((state[12] == 'X' && state[13] == 'X' && state[14]=='X') ||
(state[3] == 'X' && state[7] =='X' && state[11]=='X') ||
(state[10] == 'X' && state[5] =='X' && state[0]=='X')) &&
(state[15]=='-')){
pot=15;
}
}
else {
//potential O win gets priority
//Check if 0 is free and potential winning spot for X
if(((state[1] == 'X' && state[2] == 'X' && state[3]=='X') ||
(state[4] == 'X' && state[8]=='X' && state[12]=='X') ||
(state[5] == 'X' && state[10]=='X' && state[15]=='X'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for X
else if(((state[0] == 'X' && state[2] == 'X' && state[3]=='X') ||
(state[5] == 'X' && state[9]=='X' && state[13]=='X'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X' && state[3]=='X') ||
(state[6] == 'X' && state[10]=='X' && state[14]=='X'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for X
else if(((state[0] == 'X' && state[1] == 'X' && state[2]=='X') ||
(state[7] == 'X' && state[11] =='X' && state[15]=='X') ||
(state[12] == 'X' && state[9] == 'X' && state[6] == 'X')) &&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for X
else if(((state[0] == 'X' && state[8] == 'X' && state[12]=='X') ||
(state[5] == 'X' && state[6] =='X' && state[7]=='X')) &&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for X
else if(((state[1] == 'X' && state[9] == 'X' && state[13]=='X') ||
(state[4] == 'X' && state[6] =='X' && state[7]=='X')) &&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for X
else if(((state[2] == 'X' && state[10] == 'X' && state[14]=='X') ||
(state[4] == 'X' && state[5] =='X' && state[7]=='X')) &&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for X
else if(((state[3] == 'X' && state[11] == 'X' && state[15]=='X') ||
(state[4] == 'X' && state[6] =='X' && state[5]=='X')) &&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for X
else if(((state[9] == 'X' && state[10] == 'X' && state[11]=='X') ||
(state[0] == 'X' && state[4] =='X' && state[12]=='X')) &&
(state[8]=='-')){
pot=8;
}
//Check if 9 is free and potential winning spot for X
else if(((state[8] == 'X' && state[10] == 'X' && state[11]=='X') ||
(state[1] == 'X' && state[5] =='X' && state[13]=='X')) &&
(state[9]=='-')){
pot=9;
}
//Check if 10 is free and potential winning spot for X
else if(((state[8] == 'X' && state[9] == 'X' && state[11]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[14]=='X')) &&
(state[10]=='-')){
pot=10;
}
//Check if 11 is free and potential winning spot for X
else if(((state[8] == 'X' && state[9] == 'X' && state[10]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[14]=='X')) &&
(state[11]=='-')){
pot=11;
}
//Check if 12 is free and potential winning spot for X
else if(((state[13] == 'X' && state[14] == 'X' && state[15]=='X') ||
(state[0] == 'X' && state[4] =='X' && state[8]=='X') ||
(state[9] == 'X' && state[6] =='X' && state[3]=='X')) &&
(state[12]=='-')){
pot=12;
}
//Check if 13 is free and potential winning spot for X
else if(((state[12] == 'X' && state[14] == 'X' && state[15]=='X') ||
(state[1] == 'X' && state[5] =='X' && state[9]=='X')) &&
(state[13]=='-')){
pot=13;
}
//Check if 14 is free and potential winning spot for X
else if(((state[12] == 'X' && state[13] == 'X' && state[15]=='X') ||
(state[2] == 'X' && state[6] =='X' && state[10]=='X')) &&
(state[14]=='-')){
pot=14;
}
//Check if 15 is free and potential winning spot for X
else if(((state[12] == 'X' && state[13] == 'X' && state[14]=='X') ||
(state[3] == 'X' && state[7] =='X' && state[11]=='X') ||
(state[10] == 'X' && state[5] =='X' && state[0]=='X')) &&
(state[15]=='-')){
pot=15;
}
//Check if 0 is free and potential winning spot for O
if(((state[1] == 'O' && state[2] == 'O' && state[3]=='O') ||
(state[4] == 'O' && state[8]=='O' && state[12]=='O') ||
(state[5] == 'O' && state[10]=='O' && state[15]=='O'))&&
(state[0]=='-')){
pot=0;
}
//Check if 1 is free and potential winning spot for O
else if(((state[0] == 'O' && state[2] == 'O' && state[3]=='O') ||
(state[5] == 'O' && state[9]=='O' && state[13]=='O'))&&
(state[1]=='-')){
pot=1;
}
//Check if 2 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O' && state[3]=='O') ||
(state[6] == 'O' && state[10]=='O' && state[14]=='O'))&&
(state[2]=='-')){
pot=2;
}
//Check if 3 is free and potential winning spot for O
else if(((state[0] == 'O' && state[1] == 'O' && state[2]=='O') ||
(state[7] == 'O' && state[11] =='O' && state[15]=='O') ||
(state[12] == 'O' && state[9] == 'O' && state[6] == 'O')) &&
(state[3]=='-')){
pot=3;
}
//Check if 4 is free and potential winning spot for O
else if(((state[0] == 'O' && state[8] == 'O' && state[12]=='O') ||
(state[5] == 'O' && state[6] =='O' && state[7]=='O')) &&
(state[4]=='-')){
pot=4;
}
//Check if 5 is free and potential winning spot for O
else if(((state[1] == 'O' && state[9] == 'O' && state[13]=='O') ||
(state[4] == 'O' && state[6] =='O' && state[7]=='O')) &&
(state[5]=='-')){
pot=5;
}
//Check if 6 is free and potential winning spot for O
else if(((state[2] == 'O' && state[10] == 'O' && state[14]=='O') ||
(state[4] == 'O' && state[5] =='O' && state[7]=='O')) &&
(state[6]=='-')){
pot=6;
}
//Check if 7 is free and potential winning spot for O
else if(((state[3] == 'O' && state[11] == 'O' && state[15]=='O') ||
(state[4] == 'O' && state[6] =='O' && state[5]=='O')) &&
(state[7]=='-')){
pot=7;
}
//Check if 8 is free and potential winning spot for O
else if(((state[9] == 'O' && state[10] == 'O' && state[11]=='O') ||
(state[0] == 'O' && state[4] =='O' && state[12]=='O')) &&
(state[8]=='-')){
pot=8;
}
//Check if 9 is free and potential winning spot for O
else if(((state[8] == 'O' && state[10] == 'O' && state[11]=='O') ||
(state[1] == 'O' && state[5] =='O' && state[13]=='O')) &&
(state[9]=='-')){
pot=9;
}
//Check if 10 is free and potential winning spot for O
else if(((state[8] == 'O' && state[9] == 'O' && state[11]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[14]=='O')) &&
(state[10]=='-')){
pot=10;
}
//Check if 11 is free and potential winning spot for O
else if(((state[8] == 'O' && state[9] == 'O' && state[10]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[14]=='O')) &&
(state[11]=='-')){
pot=11;
}
//Check if 12 is free and potential winning spot for O
else if(((state[13] == 'O' && state[14] == 'O' && state[15]=='O') ||
(state[0] == 'O' && state[4] =='O' && state[8]=='O') ||
(state[9] == 'O' && state[6] =='O' && state[3]=='O')) &&
(state[12]=='-')){
pot=12;
}
//Check if 13 is free and potential winning spot for O
else if(((state[12] == 'O' && state[14] == 'O' && state[15]=='O') ||
(state[1] == 'O' && state[5] =='O' && state[9]=='O')) &&
(state[13]=='-')){
pot=13;
}
//Check if 14 is free and potential winning spot for O
else if(((state[12] == 'O' && state[13] == 'O' && state[15]=='O') ||
(state[2] == 'O' && state[6] =='O' && state[10]=='O')) &&
(state[14]=='-')){
pot=14;
}
//Check if 15 is free and potential winning spot for O
else if(((state[12] == 'O' && state[13] == 'O' && state[14]=='O') ||
(state[3] == 'O' && state[7] =='O' && state[11]=='O') ||
(state[10] == 'O' && state[5] =='O' && state[0]=='O')) &&
(state[15]=='-')){
pot=15;
}
}
}
return pot;
}
答案 0 :(得分:0)
由于州#小于16,而且每个&#34;否则如果&#34;条件是固定的,您可以使用查找表(只需使用位掩码将每个条件组合到<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<div class="container-fluid">
<nav class="navbar navbar-fixed-top navbar-default">
<div class="navbar-header">
<button data-toggle="collapse-side" data-target=".side-collapse" type="button" class="navbar-toggle"><span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span>
</button> <a class="navbar-brand" href="#">Brand</a>
</div>
<div class="navbar-default side-collapse in">
<nav role="navigation" class="navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a>
</li>
<li><a href="#">Link</a>
</li>
<li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <i class="fa fa-chevron-down"></i></a>
<ul class="dropdown-menu">
<li><a href="#">Link</a>
</li>
<li><a href="#">Link</a>
</li>
<li><a href="#">Link</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="#">Link</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="#">Link</a>
</li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" />
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Link</a>
</li>
<li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <i class="fa fa-chevron-down"></i></a>
<ul class="dropdown-menu">
<li><a href="#">Link</a>
</li>
<li><a href="#">Link</a>
</li>
<li><a href="#">Link</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="#">Link</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="#">Link</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</nav>
<div class="side-collapse-container">
<div class="alert alert-info alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span>
</button> <strong>Warning!</strong> This is an Off-Canvas Mobile Menu</div>
</div>
</div>
,并在需要时返回其映射值)。
unsigned short int
这应该非常快,因为你需要!
答案 1 :(得分:0)
你在那里重复检查获胜的重复是错误的代码练习 - 并且可能导致很多混乱。看看这个帖子 - 当我创建我的第一个tic tac toe算法时,它对我帮助很大。
答案 2 :(得分:0)
还有一些关于如何使代码更具可读性的建议。
public int canWin3(){
int pot=-1;
if(n != 3 && turn !='O') {
return pot; // or something meaning full
} elseif (zeroIsFree()) {
pot = 0;
} else if (oneIsFree()) {
pot =1;
} ...
return pot;
}
private function zeroIsFree() {
return ((state[1] == 'O' && state[2] == 'O') ||
(state[3] == 'O' && state[6]=='O') ||
(state[4] == 'O' && state[8]=='O')) &&
(state[0]=='-'));
}
这将使canWin3
函数的实现更具可读性,并使调试更容易。当然,整个代码可以更好地改进,但这个建议是基于阅读您现有的代码并试图猜测您当前的技能水平。
您还可以结合Wyatt Lowery的答案中的技巧。