【问题标题】:Java tictactoe. Don't know how to continue [closed]Java tictactoe。不知道如何继续[关闭]
【发布时间】:2015-09-20 09:21:25
【问题描述】:

需要帮助才能继续游戏!我想在命令行中进行井字游戏。我现在不知道如何在游戏中放置 X 和 O。例如,我想只需按 1 即可更改为“x”或“o”。在命令提示符中。我也想知道我应该如何在游戏中轮到玩家宣布。 谢谢你的时间。对不起我的英语不好。

 import java.util.Scanner;
    public class TicTacToe{
      public static void main (String[] args){



        Scanner keyboard;
        Scanner input;
        String answer;
        int whereToPlace;
        char playerX = x;
        char playerO = o;

      System.out.println ("wanna play? (Yes/No)" );
      keyboard = new Scanner (System.in);
      answer = keyboard.nextLine();

      while (answer.equals("yes")){

      }
      System.out.println("Pick a square");
    // skapa brädet i en 2D array
    String [][] board = { {"1", "2", "3"},
                        {"4", "5", "6"},
                        {"7", "8", "9"}
                        };

    for(int i = 0; i < board.length; i++) {
      // För varje vektor i vektorn newBoard...
      for(int j = 0; j < board[i].length; j++) {
        System.out.print( "[ " + board[i][j] + " ]" + "\t");
      }
      System.out.println("\n");
    }

    System.out.println("Player x turn ");
    input = new Scanner (System.in);

      }
    }

【问题讨论】:

  • 你的英语不好不是真正的问题。但缺乏适当的问题解释是。你到底卡在哪里了?你有什么具体问题?事实上,这个问题还不清楚(可能有点太宽泛了)。
  • 缩进是怎么回事?
  • 我想举个例子,只需按 1,它就会变成“x”或“o”。在命令 Promt
  • 请不要在 cmets 中添加信息,而是编辑您的问题。并且,请更正您的缩进。
  • 很抱歉在这个 webbside 上的新人。现在就去做

标签: java


【解决方案1】:

我将帮助您了解此类游戏背后的逻辑,并为您提供测试代码,但建议您自行完成。

首先,你需要一个标志来告诉你游戏是否结束。

游戏什么时候结束? 2个可能的答案:

  • 其中一名玩家获胜
  • 单元格已满,没有任何赢家

这将是您将在 do{}while() 循环中测试的内容

之后,您需要在玩家每次移动时填充一个数组。

这里你必须注意两件事:

  • 输入的数字是数组的索引
  • 输入的号码之前没有玩过

第一个条件很简单,但第二个条件你需要一种方法来“储存”双方球员已经完成的比赛。

在循环结束时,您必须检查游戏是否已完成,如果是,则更改您的布尔值。

有人如何赢得井字游戏?通过具有相同字符的水平、垂直或对角线集合。你必须测试所有的可能性,如果填满了就改变你的标志。

否则,如果您的棋盘已满,您将不得不检查并退出循环。

import java.util.ArrayList;
import java.util.Scanner;

public class TicTacToe{

    private static Scanner scan = new Scanner(System.in);

    public static void main (String[] args){

        boolean finished = false;
        int plays = 0;
        int position = 0;
        ArrayList<Integer> alreadyPlayed = new ArrayList<>();
        String[] board = {"_","_","_","_","_","_","_","_","_"};
        String character;

        do{
            character = plays % 2 == 0 ? "x" : "o";
            do{
            System.out.println("Player " + character + ", it's your turn. (0-8)");
            System.out.println("Already played :" + alreadyPlayed.toString());
            position = scan.nextInt();
            } while (position >= 9 || alreadyPlayed.contains(position));
            alreadyPlayed.add(position);
            board[position] = character;
            if (alreadyPlayed.size()>=5){
                finished = checkFinished(board);
            }
            plays++;

            for (int i = 0 ; i < 9 ; i++){
                System.out.print(board[i]);
                if ((i+1) % 3 == 0) System.out.println();
            }

        } while (!finished && plays < 9);
        if (checkFinished(board)) System.out.println("Players " + character + " wins !");
        else System.out.println("No one wins.");


    }

    private static boolean checkFinished(String[] toCheck) {
        // Horizontal checks
        if (!toCheck[0].equals("_") && toCheck[0].equals(toCheck[1]) && toCheck[0].equals(toCheck[2])) return true;
        if (!toCheck[3].equals("_") && toCheck[3].equals(toCheck[4]) && toCheck[3].equals(toCheck[5])) return true;
        if (!toCheck[6].equals("_") && toCheck[6].equals(toCheck[7]) && toCheck[6].equals(toCheck[8])) return true;

        // Vertical checks
        if (!toCheck[0].equals("_") && toCheck[0].equals(toCheck[3]) && toCheck[0].equals(toCheck[6])) return true;
        if (!toCheck[1].equals("_") && toCheck[1].equals(toCheck[4]) && toCheck[1].equals(toCheck[7])) return true;
        if (!toCheck[2].equals("_") && toCheck[2].equals(toCheck[5]) && toCheck[2].equals(toCheck[8])) return true;

        // Diagonal checks
        if (!toCheck[0].equals("_") && toCheck[0].equals(toCheck[4]) && toCheck[0].equals(toCheck[8])) return true;
        if (!toCheck[2].equals("_") && toCheck[2].equals(toCheck[4]) && toCheck[2].equals(toCheck[6])) return true;
        return false;
    }
}

【讨论】:

  • 哦,来吧。这可能是家庭作业或某种任务。为什么要为他这样做而不是帮助他了解自己做错了什么?为什么不提供任何解释?
  • 谢谢男人。我现在明白了很多事情要做。干杯
  • @silversoul 不客气,不要忘记验证答案 + 这里有一个提示:在编码之前,试着想象一下你的程序的算法将使用一张纸和一支笔。 . 这对我有很大帮助
  • 会的。我 2 周前才开始使用 Java。再次感谢
  • 没问题@silversoul。不要忘记验证答案:) 所以每个人都知道你对此很满意
猜你喜欢
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2013-12-30
  • 2012-03-22
相关资源
最近更新 更多