2017-08-04 8 views
0

私はコンセプトを3x3 Tic Tac Toeに9x9に変更しています。コンセプトはちょうどTicTacToeのようなものです。あなたは水平の垂直または斜め3点の唯一の違いを獲得する必要があります。人がその人のための単一のスポットとしてマークする特定のセットを獲得すると、ゲームを9つのセットに分けました。メインゲームに勝つために次のセットを獲得する。 問題に私は直面しているゲームはうまくいきますAIは人やコンピュータが最初のセットを獲得するまで乱数を生成しています。その後、AIの動きはランダムではありません。タックのタックタックToe not moving random

Showing the stepsに何が起こっているかを示すために写真を添付

import java.util.Random; 

public class TicTacToeGame { 

private char mBoard[]; 
private final static int BOARD_SIZE = 81; 

public static final char PLAYER_ONE = 'X'; 
public static final char PLAYER_TWO = '0'; 
public static final char EMPTY_SPACE = ' '; 

private Random mRand; 


public static int getBOARD_SIZE() { 
    // Return the size of the board 
    return BOARD_SIZE; 
} 

public TicTacToeGame(){ 

    mBoard = new char[BOARD_SIZE]; 

    for (int i = 0; i < BOARD_SIZE; i++) 
     mBoard[i] = EMPTY_SPACE; 

    mRand = new Random(); 
} 

// Clear the board of all X's and O's 
public void clearBoard() 
{ 
    for (int i = 0; i < BOARD_SIZE; i++) 
    { 
     mBoard[i] = EMPTY_SPACE; 
    } 
} 

// set the given player at the given location on the game board. 
// the location must be available, or the board will not be changed. 
public void setMove(char player, int location) 
{ 
    mBoard[location] = player; 
} 

// Return the best move for the computer to make. You must call setMove() 
// to actually make the computer move to that location. 
public int getComputerMove() 
{ 
    int move; 

    // First see if there's a move O can make to win 
    for (int i = 0; i < getBOARD_SIZE(); i++) 
    { 
     if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
     { 
      char curr = mBoard[i]; 
      mBoard[i] = PLAYER_TWO; 
      if (checkForWinner() == 3) 
      { 
       setMove(PLAYER_TWO, i); 
       return i; 
      } 
      else 
       mBoard[i] = curr; 
     } 
    } 

    // See if there's a move O can make to block X from winning 
    for (int i = 0; i < getBOARD_SIZE(); i++) 
    { 
     if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
     { 
      char curr = mBoard[i]; 
      mBoard[i] = PLAYER_ONE; 
      if (checkForWinner() == 2) 
      { 
       setMove(PLAYER_TWO, i); 
       return i; 
      } 
      else 
       mBoard[i] = curr; 
     } 
    } 

    // Generate random move 
    do 
    { 
     move = mRand.nextInt(getBOARD_SIZE()); 
    } while (mBoard[move] == PLAYER_ONE || mBoard[move] == PLAYER_TWO); 

    setMove(PLAYER_TWO, move); 
    return move; 
} 

// Check for a winner and return a status value indicating who has won. 
// Return 0 if no winner or tie yet, 1 if it's a tie, 2 if X won, or 3 
// if O won. 
public int checkForWinner() 
{ 
    //set0 win chk 
    if ((mBoard[0] == PLAYER_ONE && 
      mBoard[1] == PLAYER_ONE && 
      mBoard[2] == PLAYER_ONE) || 
      (mBoard[9] == PLAYER_ONE && 
        mBoard[10] == PLAYER_ONE && 
        mBoard[11] == PLAYER_ONE) || 
      (mBoard[18] == PLAYER_ONE && 
        mBoard[19] == PLAYER_ONE && 
        mBoard[20] == PLAYER_ONE) || 
      (mBoard[0] == PLAYER_ONE && 
        mBoard[9] == PLAYER_ONE && 
        mBoard[18] == PLAYER_ONE) || 
      (mBoard[1] == PLAYER_ONE && 
        mBoard[10] == PLAYER_ONE && 
        mBoard[19] == PLAYER_ONE) || 
      (mBoard[2] == PLAYER_ONE && 
        mBoard[11] == PLAYER_ONE && 
        mBoard[20] == PLAYER_ONE) || 
      (mBoard[0] == PLAYER_ONE && 
        mBoard[10] == PLAYER_ONE && 
        mBoard[20] == PLAYER_ONE) || 
      (mBoard[2] == PLAYER_ONE && 
        mBoard[10] == PLAYER_ONE && 
        mBoard[18] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[0] == PLAYER_TWO && 
      mBoard[1] == PLAYER_TWO && 
      mBoard[2] == PLAYER_TWO) || 
      (mBoard[9] == PLAYER_TWO && 
        mBoard[10] == PLAYER_TWO && 
        mBoard[11] == PLAYER_TWO) || 
      (mBoard[18] == PLAYER_TWO && 
        mBoard[19] == PLAYER_TWO && 
        mBoard[20] == PLAYER_TWO) || 
      (mBoard[0] == PLAYER_TWO && 
        mBoard[9] == PLAYER_TWO && 
        mBoard[18] == PLAYER_TWO) || 
      (mBoard[1] == PLAYER_TWO && 
        mBoard[10] == PLAYER_TWO && 
        mBoard[19] == PLAYER_TWO) || 
      (mBoard[2] == PLAYER_TWO && 
        mBoard[11] == PLAYER_TWO && 
        mBoard[20] == PLAYER_TWO) || 
      (mBoard[0] == PLAYER_TWO && 
        mBoard[10] == PLAYER_TWO && 
        mBoard[20] == PLAYER_TWO) || 
      (mBoard[2] == PLAYER_TWO && 
        mBoard[10] == PLAYER_TWO && 
        mBoard[18] == PLAYER_TWO)) 
     return 3; 

    //set1 win chk 
    if ((mBoard[3] == PLAYER_ONE && 
      mBoard[4] == PLAYER_ONE && 
      mBoard[5] == PLAYER_ONE) || 
      (mBoard[12] == PLAYER_ONE && 
        mBoard[13] == PLAYER_ONE && 
        mBoard[14] == PLAYER_ONE) || 
      (mBoard[21] == PLAYER_ONE && 
        mBoard[22] == PLAYER_ONE && 
        mBoard[23] == PLAYER_ONE) || 
      (mBoard[3] == PLAYER_ONE && 
        mBoard[12] == PLAYER_ONE && 
        mBoard[21] == PLAYER_ONE) || 
      (mBoard[4] == PLAYER_ONE && 
        mBoard[13] == PLAYER_ONE && 
        mBoard[22] == PLAYER_ONE) || 
      (mBoard[5] == PLAYER_ONE && 
        mBoard[14] == PLAYER_ONE && 
        mBoard[23] == PLAYER_ONE) || 
      (mBoard[3] == PLAYER_ONE && 
        mBoard[13] == PLAYER_ONE && 
        mBoard[23] == PLAYER_ONE) || 
      (mBoard[5] == PLAYER_ONE && 
        mBoard[13] == PLAYER_ONE && 
        mBoard[21] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[3] == PLAYER_TWO && 
      mBoard[4] == PLAYER_TWO && 
      mBoard[5] == PLAYER_TWO) || 
      (mBoard[12] == PLAYER_TWO && 
        mBoard[13] == PLAYER_TWO && 
        mBoard[14] == PLAYER_TWO) || 
      (mBoard[21] == PLAYER_TWO && 
        mBoard[22] == PLAYER_TWO && 
        mBoard[23] == PLAYER_TWO) || 
      (mBoard[3] == PLAYER_TWO && 
        mBoard[12] == PLAYER_TWO && 
        mBoard[21] == PLAYER_TWO) || 
      (mBoard[4] == PLAYER_TWO && 
        mBoard[13] == PLAYER_TWO && 
        mBoard[22] == PLAYER_TWO) || 
      (mBoard[5] == PLAYER_TWO && 
        mBoard[14] == PLAYER_TWO && 
        mBoard[23] == PLAYER_TWO) || 
      (mBoard[3] == PLAYER_TWO && 
        mBoard[13] == PLAYER_TWO && 
        mBoard[23] == PLAYER_TWO) || 
      (mBoard[5] == PLAYER_TWO && 
        mBoard[13] == PLAYER_TWO && 
        mBoard[21] == PLAYER_TWO)) 
     return 3; 

    //set2 win chk 
    if ((mBoard[6] == PLAYER_ONE && 
      mBoard[7] == PLAYER_ONE && 
      mBoard[8] == PLAYER_ONE) || 
      (mBoard[15] == PLAYER_ONE && 
        mBoard[16] == PLAYER_ONE && 
        mBoard[17] == PLAYER_ONE) || 
      (mBoard[24] == PLAYER_ONE && 
        mBoard[25] == PLAYER_ONE && 
        mBoard[26] == PLAYER_ONE) || 
      (mBoard[6] == PLAYER_ONE && 
        mBoard[15] == PLAYER_ONE && 
        mBoard[24] == PLAYER_ONE) || 
      (mBoard[7] == PLAYER_ONE && 
        mBoard[16] == PLAYER_ONE && 
        mBoard[25] == PLAYER_ONE) || 
      (mBoard[8] == PLAYER_ONE && 
        mBoard[17] == PLAYER_ONE && 
        mBoard[26] == PLAYER_ONE) || 
      (mBoard[6] == PLAYER_ONE && 
        mBoard[16] == PLAYER_ONE && 
        mBoard[26] == PLAYER_ONE) || 
      (mBoard[8] == PLAYER_ONE && 
        mBoard[16] == PLAYER_ONE && 
        mBoard[24] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[6] == PLAYER_TWO && 
      mBoard[7] == PLAYER_TWO && 
      mBoard[8] == PLAYER_TWO) || 
      (mBoard[15] == PLAYER_TWO && 
        mBoard[16] == PLAYER_TWO && 
        mBoard[17] == PLAYER_TWO) || 
      (mBoard[24] == PLAYER_TWO && 
        mBoard[25] == PLAYER_TWO && 
        mBoard[26] == PLAYER_TWO) || 
      (mBoard[6] == PLAYER_TWO && 
        mBoard[15] == PLAYER_TWO && 
        mBoard[24] == PLAYER_TWO) || 
      (mBoard[7] == PLAYER_TWO && 
        mBoard[16] == PLAYER_TWO && 
        mBoard[25] == PLAYER_TWO) || 
      (mBoard[8] == PLAYER_TWO && 
        mBoard[17] == PLAYER_TWO && 
        mBoard[26] == PLAYER_TWO) || 
      (mBoard[6] == PLAYER_TWO && 
        mBoard[16] == PLAYER_TWO && 
        mBoard[26] == PLAYER_TWO) || 
      (mBoard[8] == PLAYER_TWO && 
        mBoard[16] == PLAYER_TWO && 
        mBoard[24] == PLAYER_TWO)) 
     return 3; 

    //set3 win chk 
    if ((mBoard[27] == PLAYER_ONE && 
      mBoard[28] == PLAYER_ONE && 
      mBoard[29] == PLAYER_ONE) || 
      (mBoard[36] == PLAYER_ONE && 
        mBoard[37] == PLAYER_ONE && 
        mBoard[38] == PLAYER_ONE) || 
      (mBoard[45] == PLAYER_ONE && 
        mBoard[46] == PLAYER_ONE && 
        mBoard[47] == PLAYER_ONE) || 
      (mBoard[27] == PLAYER_ONE && 
        mBoard[36] == PLAYER_ONE && 
        mBoard[45] == PLAYER_ONE) || 
      (mBoard[28] == PLAYER_ONE && 
        mBoard[37] == PLAYER_ONE && 
        mBoard[46] == PLAYER_ONE) || 
      (mBoard[29] == PLAYER_ONE && 
        mBoard[38] == PLAYER_ONE && 
        mBoard[47] == PLAYER_ONE) || 
      (mBoard[27] == PLAYER_ONE && 
        mBoard[37] == PLAYER_ONE && 
        mBoard[47] == PLAYER_ONE) || 
      (mBoard[29] == PLAYER_ONE && 
        mBoard[37] == PLAYER_ONE && 
        mBoard[45] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[27] == PLAYER_TWO && 
      mBoard[28] == PLAYER_TWO && 
      mBoard[29] == PLAYER_TWO) || 
      (mBoard[36] == PLAYER_TWO && 
        mBoard[37] == PLAYER_TWO && 
        mBoard[38] == PLAYER_TWO) || 
      (mBoard[45] == PLAYER_TWO && 
        mBoard[46] == PLAYER_TWO && 
        mBoard[47] == PLAYER_TWO) || 
      (mBoard[27] == PLAYER_TWO && 
        mBoard[36] == PLAYER_TWO && 
        mBoard[45] == PLAYER_TWO) || 
      (mBoard[28] == PLAYER_TWO && 
        mBoard[37] == PLAYER_TWO && 
        mBoard[46] == PLAYER_TWO) || 
      (mBoard[29] == PLAYER_TWO && 
        mBoard[38] == PLAYER_TWO && 
        mBoard[47] == PLAYER_TWO) || 
      (mBoard[27] == PLAYER_TWO && 
        mBoard[37] == PLAYER_TWO && 
        mBoard[47] == PLAYER_TWO) || 
      (mBoard[29] == PLAYER_TWO && 
        mBoard[37] == PLAYER_TWO && 
        mBoard[45] == PLAYER_TWO)) 
     return 3; 

    //set4 win chk 
    if ((mBoard[30] == PLAYER_ONE && 
      mBoard[31] == PLAYER_ONE && 
      mBoard[32] == PLAYER_ONE) || 
      (mBoard[39] == PLAYER_ONE && 
        mBoard[40] == PLAYER_ONE && 
        mBoard[41] == PLAYER_ONE) || 
      (mBoard[48] == PLAYER_ONE && 
        mBoard[49] == PLAYER_ONE && 
        mBoard[50] == PLAYER_ONE) || 
      (mBoard[30] == PLAYER_ONE && 
        mBoard[39] == PLAYER_ONE && 
        mBoard[48] == PLAYER_ONE) || 
      (mBoard[31] == PLAYER_ONE && 
        mBoard[40] == PLAYER_ONE && 
        mBoard[49] == PLAYER_ONE) || 
      (mBoard[32] == PLAYER_ONE && 
        mBoard[41] == PLAYER_ONE && 
        mBoard[50] == PLAYER_ONE) || 
      (mBoard[30] == PLAYER_ONE && 
        mBoard[40] == PLAYER_ONE && 
        mBoard[50] == PLAYER_ONE) || 
      (mBoard[32] == PLAYER_ONE && 
        mBoard[40] == PLAYER_ONE && 
        mBoard[48] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[30] == PLAYER_TWO && 
      mBoard[31] == PLAYER_TWO && 
      mBoard[32] == PLAYER_TWO) || 
      (mBoard[39] == PLAYER_TWO && 
        mBoard[40] == PLAYER_TWO && 
        mBoard[41] == PLAYER_TWO) || 
      (mBoard[48] == PLAYER_TWO && 
        mBoard[49] == PLAYER_TWO && 
        mBoard[50] == PLAYER_TWO) || 
      (mBoard[30] == PLAYER_TWO && 
        mBoard[39] == PLAYER_TWO && 
        mBoard[48] == PLAYER_TWO) || 
      (mBoard[31] == PLAYER_TWO && 
        mBoard[40] == PLAYER_TWO && 
        mBoard[49] == PLAYER_TWO) || 
      (mBoard[32] == PLAYER_TWO && 
        mBoard[41] == PLAYER_TWO && 
        mBoard[50] == PLAYER_TWO) || 
      (mBoard[30] == PLAYER_TWO && 
        mBoard[40] == PLAYER_TWO && 
        mBoard[50] == PLAYER_TWO) || 
      (mBoard[32] == PLAYER_TWO && 
        mBoard[40] == PLAYER_TWO && 
        mBoard[48] == PLAYER_TWO)) 
     return 3; 

    //set5 win chk 
    if ((mBoard[33] == PLAYER_ONE && 
      mBoard[34] == PLAYER_ONE && 
      mBoard[35] == PLAYER_ONE) || 
      (mBoard[42] == PLAYER_ONE && 
        mBoard[43] == PLAYER_ONE && 
        mBoard[44] == PLAYER_ONE) || 
      (mBoard[51] == PLAYER_ONE && 
        mBoard[52] == PLAYER_ONE && 
        mBoard[53] == PLAYER_ONE) || 
      (mBoard[33] == PLAYER_ONE && 
        mBoard[48] == PLAYER_ONE && 
        mBoard[51] == PLAYER_ONE) || 
      (mBoard[34] == PLAYER_ONE && 
        mBoard[43] == PLAYER_ONE && 
        mBoard[52] == PLAYER_ONE) || 
      (mBoard[35] == PLAYER_ONE && 
        mBoard[44] == PLAYER_ONE && 
        mBoard[53] == PLAYER_ONE) || 
      (mBoard[33] == PLAYER_ONE && 
        mBoard[43] == PLAYER_ONE && 
        mBoard[53] == PLAYER_ONE) || 
      (mBoard[53] == PLAYER_ONE && 
        mBoard[43] == PLAYER_ONE && 
        mBoard[51] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[33] == PLAYER_TWO && 
      mBoard[34] == PLAYER_TWO && 
      mBoard[35] == PLAYER_TWO) || 
      (mBoard[42] == PLAYER_TWO && 
        mBoard[43] == PLAYER_TWO && 
        mBoard[44] == PLAYER_TWO) || 
      (mBoard[51] == PLAYER_TWO && 
        mBoard[52] == PLAYER_TWO && 
        mBoard[53] == PLAYER_TWO) || 
      (mBoard[33] == PLAYER_TWO && 
        mBoard[48] == PLAYER_TWO && 
        mBoard[51] == PLAYER_TWO) || 
      (mBoard[34] == PLAYER_TWO && 
        mBoard[43] == PLAYER_TWO && 
        mBoard[52] == PLAYER_TWO) || 
      (mBoard[35] == PLAYER_TWO && 
        mBoard[44] == PLAYER_TWO && 
        mBoard[53] == PLAYER_TWO) || 
      (mBoard[33] == PLAYER_TWO && 
        mBoard[43] == PLAYER_TWO && 
        mBoard[53] == PLAYER_TWO) || 
      (mBoard[53] == PLAYER_TWO && 
        mBoard[43] == PLAYER_TWO && 
        mBoard[51] == PLAYER_TWO)) 
     return 3; 

    //set6 win chk 
    if ((mBoard[54] == PLAYER_ONE && 
      mBoard[55] == PLAYER_ONE && 
      mBoard[56] == PLAYER_ONE) || 
      (mBoard[63] == PLAYER_ONE && 
        mBoard[64] == PLAYER_ONE && 
        mBoard[65] == PLAYER_ONE) || 
      (mBoard[72] == PLAYER_ONE && 
        mBoard[73] == PLAYER_ONE && 
        mBoard[74] == PLAYER_ONE) || 
      (mBoard[54] == PLAYER_ONE && 
        mBoard[63] == PLAYER_ONE && 
        mBoard[72] == PLAYER_ONE) || 
      (mBoard[55] == PLAYER_ONE && 
        mBoard[64] == PLAYER_ONE && 
        mBoard[73] == PLAYER_ONE) || 
      (mBoard[56] == PLAYER_ONE && 
        mBoard[65] == PLAYER_ONE && 
        mBoard[74] == PLAYER_ONE) || 
      (mBoard[54] == PLAYER_ONE && 
        mBoard[64] == PLAYER_ONE && 
        mBoard[74] == PLAYER_ONE) || 
      (mBoard[56] == PLAYER_ONE && 
        mBoard[64] == PLAYER_ONE && 
        mBoard[72] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[54] == PLAYER_TWO && 
      mBoard[55] == PLAYER_TWO && 
      mBoard[56] == PLAYER_TWO) || 
      (mBoard[63] == PLAYER_TWO && 
        mBoard[64] == PLAYER_TWO && 
        mBoard[65] == PLAYER_TWO) || 
      (mBoard[72] == PLAYER_TWO && 
        mBoard[73] == PLAYER_TWO && 
        mBoard[74] == PLAYER_TWO) || 
      (mBoard[54] == PLAYER_TWO && 
        mBoard[63] == PLAYER_TWO && 
        mBoard[72] == PLAYER_TWO) || 
      (mBoard[55] == PLAYER_TWO && 
        mBoard[64] == PLAYER_TWO && 
        mBoard[73] == PLAYER_TWO) || 
      (mBoard[56] == PLAYER_TWO && 
        mBoard[65] == PLAYER_TWO && 
        mBoard[74] == PLAYER_TWO) || 
      (mBoard[54] == PLAYER_TWO && 
        mBoard[64] == PLAYER_TWO && 
        mBoard[74] == PLAYER_TWO) || 
      (mBoard[56] == PLAYER_TWO && 
        mBoard[64] == PLAYER_TWO && 
        mBoard[72] == PLAYER_TWO)) 
     return 3; 

    //set7 win chk 
    if ((mBoard[57] == PLAYER_ONE && 
      mBoard[58] == PLAYER_ONE && 
      mBoard[59] == PLAYER_ONE) || 
      (mBoard[66] == PLAYER_ONE && 
        mBoard[67] == PLAYER_ONE && 
        mBoard[68] == PLAYER_ONE) || 
      (mBoard[75] == PLAYER_ONE && 
        mBoard[76] == PLAYER_ONE && 
        mBoard[77] == PLAYER_ONE) || 
      (mBoard[57] == PLAYER_ONE && 
        mBoard[66] == PLAYER_ONE && 
        mBoard[75] == PLAYER_ONE) || 
      (mBoard[58] == PLAYER_ONE && 
        mBoard[67] == PLAYER_ONE && 
        mBoard[76] == PLAYER_ONE) || 
      (mBoard[59] == PLAYER_ONE && 
        mBoard[68] == PLAYER_ONE && 
        mBoard[77] == PLAYER_ONE) || 
      (mBoard[57] == PLAYER_ONE && 
        mBoard[67] == PLAYER_ONE && 
        mBoard[77] == PLAYER_ONE) || 
      (mBoard[59] == PLAYER_ONE && 
        mBoard[67] == PLAYER_ONE && 
        mBoard[75] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[57] == PLAYER_TWO && 
      mBoard[58] == PLAYER_TWO && 
      mBoard[59] == PLAYER_TWO) || 
      (mBoard[66] == PLAYER_TWO && 
        mBoard[67] == PLAYER_TWO && 
        mBoard[68] == PLAYER_TWO) || 
      (mBoard[75] == PLAYER_TWO && 
        mBoard[76] == PLAYER_TWO && 
        mBoard[77] == PLAYER_TWO) || 
      (mBoard[57] == PLAYER_TWO && 
        mBoard[66] == PLAYER_TWO && 
        mBoard[75] == PLAYER_TWO) || 
      (mBoard[58] == PLAYER_TWO && 
        mBoard[67] == PLAYER_TWO && 
        mBoard[76] == PLAYER_TWO) || 
      (mBoard[59] == PLAYER_TWO && 
        mBoard[68] == PLAYER_TWO && 
        mBoard[77] == PLAYER_TWO) || 
      (mBoard[57] == PLAYER_TWO && 
        mBoard[67] == PLAYER_TWO && 
        mBoard[77] == PLAYER_TWO) || 
      (mBoard[59] == PLAYER_TWO && 
        mBoard[67] == PLAYER_TWO && 
        mBoard[75] == PLAYER_TWO)) 
     return 3; 

    //set8 win chk 
    if ((mBoard[60] == PLAYER_ONE && 
      mBoard[61] == PLAYER_ONE && 
      mBoard[62] == PLAYER_ONE) || 
      (mBoard[69] == PLAYER_ONE && 
        mBoard[70] == PLAYER_ONE && 
        mBoard[71] == PLAYER_ONE) || 
      (mBoard[78] == PLAYER_ONE && 
        mBoard[79] == PLAYER_ONE && 
        mBoard[80] == PLAYER_ONE) || 
      (mBoard[60] == PLAYER_ONE && 
        mBoard[69] == PLAYER_ONE && 
        mBoard[78] == PLAYER_ONE) || 
      (mBoard[61] == PLAYER_ONE && 
        mBoard[70] == PLAYER_ONE && 
        mBoard[79] == PLAYER_ONE) || 
      (mBoard[62] == PLAYER_ONE && 
        mBoard[71] == PLAYER_ONE && 
        mBoard[80] == PLAYER_ONE) || 
      (mBoard[60] == PLAYER_ONE && 
        mBoard[70] == PLAYER_ONE && 
        mBoard[80] == PLAYER_ONE) || 
      (mBoard[62] == PLAYER_ONE && 
        mBoard[70] == PLAYER_ONE && 
        mBoard[78] == PLAYER_ONE)) 
     return 2; 

    if ((mBoard[60] == PLAYER_TWO && 
      mBoard[61] == PLAYER_TWO && 
      mBoard[62] == PLAYER_TWO) || 
      (mBoard[69] == PLAYER_TWO && 
        mBoard[70] == PLAYER_TWO && 
        mBoard[71] == PLAYER_TWO) || 
      (mBoard[78] == PLAYER_TWO && 
        mBoard[79] == PLAYER_TWO && 
        mBoard[80] == PLAYER_TWO) || 
      (mBoard[60] == PLAYER_TWO && 
        mBoard[69] == PLAYER_TWO && 
        mBoard[78] == PLAYER_TWO) || 
      (mBoard[61] == PLAYER_TWO && 
        mBoard[70] == PLAYER_TWO && 
        mBoard[79] == PLAYER_TWO) || 
      (mBoard[62] == PLAYER_TWO && 
        mBoard[71] == PLAYER_TWO && 
        mBoard[80] == PLAYER_TWO) || 
      (mBoard[60] == PLAYER_TWO && 
        mBoard[70] == PLAYER_TWO && 
        mBoard[80] == PLAYER_TWO) || 
      (mBoard[62] == PLAYER_TWO && 
        mBoard[70] == PLAYER_TWO && 
        mBoard[78] == PLAYER_TWO)) 
     return 3; 

    // Check for a tie 
    for (int i = 0; i < getBOARD_SIZE(); i++) 
    { 
     // if we find a number, then no one has won yet 
     if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
      return 0; 
    } 

    // If we make it through the previous loop, all places are taken, so it's a tie 
    return 1; 
} 
} 

MainActivity.javaはここに置くために大きなにあると私はから次のコードを削除した場合ので、それが正常に動作しています乱数の上で共有されているTicTacToeGame.javaファイルのgetComputerMove()関数が正常に動作します。しかし、AIは決して勝つことを試みたり、勝つのを止めたりしません。

// First see if there's a move O can make to win 
for (int i = 0; i < getBOARD_SIZE(); i++) 
{ 
    if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
    { 
     char curr = mBoard[i]; 
     mBoard[i] = PLAYER_TWO; 
     if (checkForWinner() == 3) 
     { 
      setMove(PLAYER_TWO, i); 
      return i; 
     } 
     else 
      mBoard[i] = curr; 
    } 
} 

// See if there's a move O can make to block X from winning 
for (int i = 0; i < getBOARD_SIZE(); i++) 
{ 
    if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
    { 
     char curr = mBoard[i]; 
     mBoard[i] = PLAYER_ONE; 
     if (checkForWinner() == 2) 
     { 
      setMove(PLAYER_TWO, i); 
      return i; 
     } 
     else 
      mBoard[i] = curr; 
    } 
} 
+1

を表現するために、複数の1次元または2次元アレイを使用して検討する必要があります。あなたはそれほど多くの条件を必要としません。ループについて考えてみましょう... –

+0

それぞれ最後に別の情報を与えなければならないので、ループは私のためのものではありません –

+0

_今のところ私のためのループではありません_うん、それは見てほしくないよ –

答えて

1

勝利の動きを確認するため、AIはシーケンスで動作すると思います。

// First see if there's a move O can make to win 
for (int i = 0; i < getBOARD_SIZE(); i++) 
{ 
    if (mBoard[i] != PLAYER_ONE && mBoard[i] != PLAYER_TWO) 
    { 
     char curr = mBoard[i]; 
     mBoard[i] = PLAYER_TWO; 
     if (checkForWinner() == 3) 
     { 
      setMove(PLAYER_TWO, i); 
      return i; 
     } 
     else 
      mBoard[i] = curr; 
    } 
} 

Your AI saw this as a winning move 彼らはすべての動きを受賞としてカウントbeccauseだから、AIは、シーケンス内のこれらの水平方向の動きを作り続けます。

あなたはあなたのコードの設計とば完全に間違って何かがあり、各ミニ三目並べゲーム

+0

私は各セットを個体と考えると、すべてのセットを同時に移動するか、それともクリックした同じセット内で移動するだけですか –

+0

まあ、AIを再生する場所をランダムに選択するか、移動は特定のセットに制限されます。 –

+0

私は1つのセットに制限したくありませんボード全体を再生するために開いています –