Java tictactoe。不知道如何继续

时间:2015-09-20 09:21:26

标签: java

需要帮助来确认游戏!我想要一个tic tac toe我的命令行。我现在卡住了如何在游戏中放置X和O.例如,我只想按1就会改变为" x"或者" o"。在命令Promt中。我也想知道我应该如何宣传玩家在游戏中的转变。  所有你的时间。抱歉我的英语不好。

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    let sceneView = view as! SKView
    // sceneView.showsFPS = true
    // sceneView.showsNodeCount = true
    sceneView.ignoresSiblingOrder = true

    let scene = MenuScene(size: view.bounds.size)
    scene.scaleMode = .ResizeFill
    sceneView.presentScene(scene)
    }

1 个答案:

答案 0 :(得分:0)

我会帮助理解这种游戏背后的逻辑并给你测试代码,但建议你自己做。

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

比赛什么时候结束? 2个可能的答案:

  • 其中一名选手获胜
  • 细胞全部没有任何赢家

这将是您在do{}while()循环

中测试的内容

之后,每次玩家移动时你都需要填充数组。

你必须注意两件事:

  • 输入的数字是数组的索引
  • 输入的号码尚未播放

第一个条件很简单,但是对于第二个条件你需要一种方法来“存储”两个玩家已经完成的游戏。

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

有人如何赢得tic tac toe?通过具有相同字符的水平,垂直或对角线集合。你必须测试所有的可能性并在填满时改变你的旗帜。

否则,如果您的电路板完全填满,您将必须检查并断开循环。

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;
    }
}