Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
制作java tic-tac-toe与计算机_Java - Fatal编程技术网

制作java tic-tac-toe与计算机

制作java tic-tac-toe与计算机,java,Java,这是我的TictaToe游戏,我有一个问题,当我编译我的程序时,我无法发现 欢迎来到Tic Tac Toe Falken教授 ***Use Numbers 1-9 To Select A Square*** _1_|_2_|_3_| _4_|_5_|_6_| _7_|_8_|_9_| You Go First! ___|___|___| ___|___|___| ___|___|___| Player X, enter move (1 - 9): 10 INVALID M

这是我的TictaToe游戏,我有一个问题,当我编译我的程序时,我无法发现 欢迎来到Tic Tac Toe Falken教授

***Use Numbers 1-9 To Select A Square***

_1_|_2_|_3_|

_4_|_5_|_6_|

_7_|_8_|_9_|

  You Go First!

___|___|___|

___|___|___|

___|___|___|

Player X, enter move (1 - 9):

10

INVALID MOVE: Enter number 1 - 9 only:

5

___|___|___|

___|_X_|___|

___|___|___|

Player O, enter move (1 - 9):

___|___|___|

___|_X_|_O_|

___|___|___|

Player X, enter move (1 - 9):

4

___|___|___|

_X_|_X_|_O_|

___|___|___|
Player O, enter move (1 - 9): 
停在那里,我不知道为什么有人能帮我

import java.util.Random;
import java.util.Scanner;

public class TicTacToe {

    private Scanner in;
    private boardPiece[][] board = {{new boardPiece(),new boardPiece(),new boardPiece()},
                                    {new boardPiece(),new boardPiece(),new boardPiece()},
                                    {new boardPiece(),new boardPiece(),new boardPiece()}};
    private char turn = 'X';
    private boolean win = false;
    private int count = 0;
    private Random random = new Random();
    private int randomNumber = random.nextInt(9);

    public static void main(String [] args)
    {
    int replay;
    TicTacToe game = new TicTacToe();
    game.in = new Scanner(System.in);
    System.out.println("Welcome To Tic Tac Toe Professor Falken!");
    System.out.println("***Use Numbers 1-9 To Select A Square***");
    System.out.println("_1_|_2_|_3_|");
    System.out.println("_4_|_5_|_6_|");
    System.out.println("_7_|_8_|_9_|");
    System.out.println("           n  You Go First!");
    game.play();
    System.out.println("Would you like to play again?(1 = Yes & 2 = No): ");
    replay = game.in.nextInt();
    while(replay != 2){
    game.init();
    game.play();
    System.out.println("Would you like to play again?(1 = Yes & 2 = No): ");
    replay = game.in.nextInt();
    }
    game.in.close();
    System.out.println("How about a nice game of chess :p");
    }

    public void play()
    {
    printBoard();
    while(!win)
    move();
    }

    public void printBoard()
    {
    for(int x=0; x<3; x++){
    for(int y=0; y<3; y++){
    System.out.print(board[x][y].piece);
    }
    System.out.println();
    }
    }

    public void move()
    {
    int move = 0;
    String valid = "";
    System.out.println("Player " + turn + ", enter move (1 - 9): ");
    if(turn == 'O') {
        move = randomNumber; }
    else {
        move = in.nextInt();
    }

    valid = checkMove(move);
    while(valid != "ok")
    {
        if(turn == 'X') {
            System.out.println("INVALID MOVE: "+ valid);
            move = in.nextInt();

        }
        else {
            move = randomNumber;

        }
        valid = checkMove(move);
    }

    count++;
    board[(move-1)/3][(move-1)%3].piece = "_"+turn+"_|";
    board[(move-1)/3][(move-1)%3].player = turn;
    board[(move-1)/3][(move-1)%3].used = true;

    printBoard();

    if(count >= 5)
    checkWin(move);

    if(turn == 'X') 
        turn = 'O';

    else 
    turn = 'X';
    }

    public String checkMove(int move)
    {
    if(move < 1 || move > 9)
    return "Enter number 1 - 9 only: ";
    else
    if(board[(move-1)/3][(move-1)%3].used)
    return "That move has been used. Enter another move (1 - 9): ";
    else
    return "ok";
    }

    public void checkWin(int move)
    {
    for(int x = 0; x<3; x++){ //Horizontal 
    if((board[x][0].used && board[x][1].used && board[x][2].used) && 
    (board[x][0].player == board[x][1].player && board[x][0].player == board[x][2].player)){
    System.out.println("Congratulations Player " + turn + "!!! You win!");
    win = true;
    return;
    }
    }
    for(int y = 0; y<3; y++)
    {
    if((board[0][y].used && board[1][y].used && board[2][y].used) && 
    (board[0][y].player == board[1][y].player && board[0][y].player == board[2][y].player)){
    System.out.println("Congratulations Player " + turn + "!!! You win!");
    win = true;
    return;
    }
    }

    if((board[0][0].used && board[1][1].used && board[2][2].used) && 
    (board[0][0].player == board[1][1].player && board[0][0].player == board[2][2].player)){
    System.out.println("Congratulations Player " + turn + "!!! You win!");
    win = true;
    return;
    }

    if((board[2][0].used && board[1][1].used && board[0][2].used) && 
    (board[2][0].player == board[1][1].player && board[2][0].player == board[0][2].player))
    {
    System.out.println("Congratulations Player " + turn + "!!! You win!");
    win = true;
    return;
    }       

    if(count==9){
    System.out.println("Draw! Nobody Wins (´???`)");
    win = true;
    return;
    }
    }

    public void init()
    {
    for(int x=0;x<3;x++){
    for(int y=0;y<3;y++){
    board[x][y] = new boardPiece();
    }          
    }
    turn = 'X';
    win = false;
    count = 0;
    }

    class boardPiece{
    public String piece;
    public char player;
    public boolean used;

    boardPiece(){
    piece = "___|";
    used = false;
    }
    }
}
import java.util.Random;
导入java.util.Scanner;
公共类Tictatcoe{
私人扫描仪;
私有板件[][]板件={{new boardpoint(),new boardpoint(),new boardpoint()},
{新木板(),新木板(),新木板()},
{新板件(),新板件(),新板件()};
私有字符转换='X';
私有布尔赢=假;
私有整数计数=0;
私有随机=新随机();
私有int randomNumber=random.nextInt(9);
公共静态void main(字符串[]args)
{
int回放;
Tictatcoe游戏=新的Tictatcoe();
game.in=新扫描仪(System.in);
System.out.println(“欢迎来到Tic-Tac-Toe教授Falken!”);
System.out.println(“***使用数字1-9选择一个正方形***”);
System.out.println(“1_124;u2_124;u3_124;”);
System.out.println(“4_124;u5_124;u6_124;”);
System.out.println(“7_124;u8_124;u9_124;”);
System.out.println(“n你先走!”);
游戏;
System.out.println(“您想再次播放吗?(1=是&2=否):”;
replay=game.in.nextInt();
while(重播!=2){
game.init();
游戏;
System.out.println(“您想再次播放吗?(1=是&2=否):”;
replay=game.in.nextInt();
}
game.in.close();
System.out.println(“下一盘象棋怎么样:p”);
}
公共游戏
{
印制板();
而(!赢)
move();
}
公共印制板()
{
对于(int x=0;x 9)
返回“仅输入数字1-9:”;
其他的
如果(电路板[(移动-1)/3][(移动-1)%3]。已使用)
return“该招式已被使用。输入另一招式(1-9):”;
其他的
返回“ok”;
}
公共无效校验赢(整数移动)
{

对于(intx=0;x我在move和checkMove中做了一些更改

public void move() {
    int move = 0;
    Boolean valid = false;
    System.out.println("Player " + turn + ", enter move (1 - 9): ");
    if (turn == 'O') {
        move = randomNumber;
    } else {
        move = in.nextInt();
    }

    valid = checkMove(move);
    while (!valid) {
        if (turn == 'X') {
            move = in.nextInt();
        } else {
            move = random.nextInt(9);
        }
        valid = checkMove(move);
    }

    count++;
    board[(move - 1) / 3][(move - 1) % 3].piece = "_" + turn + "_|";
    board[(move - 1) / 3][(move - 1) % 3].player = turn;
    board[(move - 1) / 3][(move - 1) % 3].used = true;

    printBoard();

    if (count >= 5) {
        checkWin(move);
    }
    if (turn == 'X') {
        turn = 'O';
    }else {
        turn = 'X';
    }
}

public Boolean checkMove(int move) {
    if (move < 1 || move > 9) {
        System.out.println("INVALID MOVE: Enter number 1 - 9 only: ");
        return false;
    }else if (board[(move - 1) / 3][(move - 1) % 3].used) {
        System.out.println("INVALID MOVE: That move has been used. Enter another move (1 - 9): ");
        return false;
    }else {
        return true;
    }
}
公共作废移动(){
int move=0;
布尔有效=假;
System.out.println(“玩家”+回合+”,输入移动(1-9):”;
如果(转动='O'){
移动=随机数;
}否则{
move=in.nextInt();
}
有效=检查移动(移动);
while(!valid){
如果(转动='X'){
move=in.nextInt();
}否则{
move=random.nextInt(9);
}
有效=检查移动(移动);
}
计数++;
棋盘[(移动-1)/3][(移动-1)%3]。棋子=“(旋转+)”;
棋盘[(移动-1)/3][(移动-1)%3]。玩家=回合;
板[(移动-1)/3][(移动-1)%3]。已使用=真;
印制板();
如果(计数>=5){
checkWin(move);
}
如果(转动='X'){
转身='O';
}否则{
转角='X';
}
}
公共布尔校验移动(整数移动){
如果(移动<1 | |移动>9){
System.out.println(“无效移动:仅输入数字1-9:”);
返回false;
}否则如果(板[(移动-1)/3][(移动-1)%3]。已使用){
System.out.println(“无效移动:该移动已被使用。请输入另一个移动(1-9):”;
返回false;
}否则{
返回true;
}
}

当计算机移动时,在
move=randomNumber;之后;
尝试
System.out.println(“哔哔哔声”我的AI移动是“+move”)
。您会注意到它每次都是相同的数字。这是因为您分配了一次
randomNumber
,然后它会保留该值直到程序退出。如果您想要一个新的随机数,您必须执行
move=random.nextInt(9);
(您可能想将
+1
添加到该值中,使其在
1-9
范围内,而不是
0-8
while(valid!=“ok”)
这不是比较字符串的正确方法。您应该使用
valid.equals(“ok”)
valid.equalsIgnoreCase(“ok”)
。更好的是,为什么不将
设为有效的
布尔值而不是字符串?