生成计算机移动

问题描述:

我做了一个井字棋游戏,虽然我有一个正常工作的计算机代码的举动,似乎只是去从左至右一刀切,而不是选择一个随机板插槽。生成计算机移动

下面是我对计算机移动代码:

public static void compTurn(char[][] board, char computer) 
{ 
    for (int i = 0; i < board.length; i++) 
    { 
     for (int j = 0; j < board.length; j++) 
     { 
      if(board[i][j] == ' ') 
      { 
       board[i][j] = computer; 
       return; 
      } 
     } 
    } 
} 
+2

你的代码在哪里产生一个随机移动?现在你有嵌套的数组一行一行地排队。 – Ryan

+0

我没有用于生成随机移动的代码。我所拥有的全部代码都是将计算机棋子移动到棋盘上,除非棋子被填满。我需要一些帮助来产生一个随机移动。如果我上传了整个代码,会更容易吗? @Ryan – USC23

+2

这种气味的类分配:)但一个简单的方法:使所有空的x,y插槽数组,然后使用arrayOfEmptySlots [rand()%arrayOfEmptySlots.length]。而且你应该弄清楚具体细节:) – Diniden

你现在正在做的权利是通过空间顺序去,如果他们是开放的检查。如果是,电脑将移到那里。你需要做的是选择一个随机点直到找到一个点。更好的是,你可以保留一个阵列中被占用的位置列表,并尝试移动到空位。

这是一个基本的解决方案,但在使用阵列的所有诚实是一个更好的路要走,无论是在性能和​​优雅条款。你基本上会创建2个数组;一个包含占用的插槽(用于存放占用该插槽的玩家),另一个用于存放空白区域的阵列(可能是一个简单的布尔值,表示可以移动的区域)。每转一圈,检查空置阵列中是否有空位,随机移动。

public static void compTurn(char[][] board, char computer) 
{ 
    Random rand; 
    boolean moved = false; 

    /* If we haven't moved, look for a space to move to 
     max = the highest space you have 
     min = the lowest space you have 
    */ 
    while (!moved) { 
     int randomSpace = rand.nextInt((max - min) + 1) + min; 

     /* I leave this part for you to figure out */ 
     if(thisSpace == ' ') 
     { 
      //make the computer move to this space 
      moved = true; 
     } 
    }; 

} 

由于这是很显然的任务,我留下了一些空白,为您自己填写,但是这应该是你在找什么。