制作java tic-tac-toe与计算机
这是我的TictaToe游戏,我有一个问题,当我编译我的程序时,我无法发现 欢迎来到Tic Tac Toe Falken教授制作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
***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”)
。更好的是,为什么不将设为有效的
布尔值而不是字符串?