亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

井字游戲邏輯

井字游戲邏輯

慕婉清6462132 2022-06-15 10:44:53
我不懂井字游戲。我剛開始學習 Android 并學習了一門很容易開始的課程,但現在我被困在這個游戲中。請幫我。我被困在這段代碼中。誰能解釋一下那里發生了什么?for (int[] columnWinner : winner) {        if (playerChoices[columnWinner[0]] == playerChoices[columnWinner[1]] &&                playerChoices[columnWinner[1]] == playerChoices[columnWinner[2]] &&                playerChoices[columnWinner[0]] != Player.NO) {            Toast.makeText(getApplicationContext(), "We have Winner", Toast.LENGTH_LONG).show();        }    }這是完整的代碼,它運行良好,沒有任何錯誤。Player currentPlayer = Player.ONE;Player[] playerChoices = new Player[9];int[][] winner = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    playerChoices[0] = Player.NO;    playerChoices[1] = Player.NO;    playerChoices[2] = Player.NO;    playerChoices[3] = Player.NO;    playerChoices[4] = Player.NO;    playerChoices[5] = Player.NO;    playerChoices[6] = Player.NO;    playerChoices[7] = Player.NO;    playerChoices[8] = Player.NO;}public void imageViewIsTapped(View imageView) {    ImageView tappedImage = (ImageView) imageView;    tappedImage.setTranslationX(-2000);    int tiTag = Integer.parseInt(tappedImage.getTag().toString());    playerChoices[tiTag] = currentPlayer;    if (currentPlayer == Player.ONE) {        tappedImage.setImageResource(R.drawable.tiger);        currentPlayer = Player.TWO;    } else if (currentPlayer == Player.TWO) {        tappedImage.setImageResource(R.drawable.lion);        currentPlayer = Player.ONE;    }    for (int[] columnWinner : winner) {}enum Player {    ONE, TWO, NO}}
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

int[][] winner = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}}; 

當有贏家時,這都是所有可能的情況。前 3 個是水平的,接下來的 3 個是垂直的,最后 2 個是對角的,其中的數字是這樣定義的,在前面的代碼中表示:


 0 | 1 | 2

---+---+---

 3 | 4 | 5

---+---+---

 6 | 7 | 8

那么我們來分析一下核心代碼:


for (int[] columnWinner : winner) { // traverses all cases

    if ( // if there is a case satisfied

       // for a specified case for example {0, 1, 2}

        playerChoices[columnWinner[0]] == playerChoices[columnWinner[1]] && // check if choice at 0 is the same as choice at 1

        playerChoices[columnWinner[1]] == playerChoices[columnWinner[2]] && // check if choice at 1 is the same as choice at 2

        // then choice at 0 1 2 are the same

        playerChoices[columnWinner[0]] != Player.NO // and this "the same" is not "they are all empty"

    ) { 

    // then there is a winner


查看完整回答
反對 回復 2022-06-15
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

我假設您正在詢問 for each 循環:

for (int[] columnWinner : winner) {

該循環稱為 for each 循環,它創建一個變量并為循環中的每次迭代賦予一個值。

在這種情況下,循環為井字棋棋盤上每個可能的行、列和對角線創建一個名為 columnWinner 的長度為 3 的數組。

每次循環時,它都會檢查該人是否贏得了驗證 columnWinner 數組中的所有三個元素是否相同:

if (playerChoices[columnWinner[0]] == playerChoices[columnWinner[1]] && playerChoices[columnWinner[1]] == playerChoices[columnWinner[2]]

然后檢查以確保它們已填寫,而不是空的。

&& playerChoices[columnWinner[0]] != Player.NO) {


查看完整回答
反對 回復 2022-06-15
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

3 x 3 板由一維數組表示(相當奇怪)。所有獲勝位置都是手動確定的,并winner以三倍的形式列在數組中,因為在井字游戲中占據一個獲勝位置需要 3 個標記。

您指示的循環依次檢查每個獲勝位置。

例如,考慮獲勝位置{1, 4, 7}。if 語句檢查棋盤位置 1、4、7 的值是否相同,并且不等于表示沒有人在那里玩過的“NO”值。

實際winners數據結構為(3 元素)數組的數組;因此 for 循環一次獲取每個 3 元素數組并使用它來驅動“if”語句。例如,when columnWinneris {1, 4, 7}thencolumnWinner[0]是 4,因此playerChoices[columnWinner[0]]正在查看playerChoices[4]。


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號