2016-01-22 55 views
-2

我做了一個井字棋遊戲,雖然我有一個正常工作的計算機代碼的舉動,似乎只是去從左至右一刀切,而不是選擇一個隨機板插槽。生成計算機移動

下面是我對計算機移動代碼:

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

回答

1

你現在正在做的權利是通過空間順序去,如果他們是開放的檢查。如果是,電腦將移到那裏。你需要做的是選擇一個隨機點直到找到一個點。更好的是,你可以保留一個陣列中被佔用的位置列表,並嘗試移動到空位。

這是一個基本的解決方案,但在使用陣列的所有誠實是一個更好的路要走,無論是在性能和​​優雅條款。你基本上會創建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; 
     } 
    }; 

} 

由於這是很顯然的任務,我留下了一些空白,爲您自己填寫,但是這應該是你在找什麼。