Java 必须为两名玩家编写一个井字游戏
我现在写这篇文章完全是用if语句,我觉得这是一个天生的错误方法。我可以得到每个玩家的第一步,但我无法找到一种方法来“保存”第一个玩家移动后棋盘的状态,它只是打印一个包含玩家1的第一步的棋盘,然后打印一个包含玩家2的第一步的棋盘,但它们不在同一个棋盘上。我觉得自己在这里有点格格不入…我从你的类中创建了一个新类,这个类将保存用户输入的元素,只需完成它:Java 必须为两名玩家编写一个井字游戏,java,tic-tac-toe,Java,Tic Tac Toe,我现在写这篇文章完全是用if语句,我觉得这是一个天生的错误方法。我可以得到每个玩家的第一步,但我无法找到一种方法来“保存”第一个玩家移动后棋盘的状态,它只是打印一个包含玩家1的第一步的棋盘,然后打印一个包含玩家2的第一步的棋盘,但它们不在同一个棋盘上。我觉得自己在这里有点格格不入…我从你的类中创建了一个新类,这个类将保存用户输入的元素,只需完成它: import java.util.Scanner; public class gameBoard { public static void m
import java.util.Scanner;
public class gameBoard
{
public static void main(String[] args)
{
String str1;
Scanner scan = new Scanner(System.in);
System.out.println("Player 1 please enter 1 or 2, 1 = O, 2 = X");
int a = scan.nextInt();
if(a == 1){
String str2 = "O";
str1 = str2;
}else{
String str2 = "X";
str1 = str2;
}
System.out.println("Player 1 please enter the ROW (1, 2 or 3) you want: ");
int b = scan.nextInt();
if (b == 1 || b == 2 || b == 3){
System.out.println("Player 1 please enter the COLUMN you want: ");
int c = scan.nextInt();
if( c == 1 || c == 2 || c == 3){
if ( b == 2 && c == 2){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | " + str1 + " | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (b == 1 && c == 1){
System.out.println(str1 + " | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (b == 2 && c == 1){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(str1 + " | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (b == 3 && c == 1){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(str1 + " | | ");
}
if (b == 1 && c == 2){
System.out.println(" | " +str1 + " | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if( b == 3 && c == 2){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | " + str1 + "| ");
}
if (b == 1 && c == 3){
System.out.println(" | |" + str1);
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (b == 2 && c == 3){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | " + str1);
System.out.println("-----------");
System.out.println(" | | ");
}
if ( b == 3 && c == 3){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | " + str1);
}
System.out.println("Player 2 please enter 1 or 2, 1 = O, 2 = X");
int e = scan.nextInt();
if(e == 1){
String str2 = "O";
str1 = str2;
}else{
String str2 = "X";
str1 = str2;
}
System.out.println("Player 2 please enter the ROW (1, 2 or 3) you want: ");
int f = scan.nextInt();
if (f == 1 || f == 2 || f == 3){
System.out.println("Player 2 please enter the COLUMN you want: ");
int g = scan.nextInt();
if( g == 1 || g == 2 || g == 3){
if ( f == 2 && g == 2){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | " + str1 + " | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (f == 1 && g == 1){
System.out.println(str1 + " | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (f == 2 && g == 1){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(str1 + " | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (f == 3 && g == 1){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(str1 + " | | ");
}
if (f == 1 && g == 2){
System.out.println(" | " +str1 + " | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if( f == 3 && g == 2){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | " + str1 + "| ");
}
if (f == 1 && g == 3){
System.out.println(" | |" + str1);
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
}
if (f == 2 && g == 3){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | " + str1);
System.out.println("-----------");
System.out.println(" | | ");
}
if ( f == 3 && g == 3){
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | ");
System.out.println("-----------");
System.out.println(" | | " + str1);
}
System.out.println("");
}
}
}
}
}
}
import java.util.Scanner;
公共类游戏板{
公共静态void main(字符串[]args){
int n=1,j,i,b;
字符str1='o';
扫描仪扫描=新扫描仪(System.in);
字符[][]g=新字符[3][3];
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
如果(j==2){
系统输出打印(n);
}
否则{
系统输出打印(n+“|”);
}
g[i][j]='';
n++;
}
System.out.println(“”);
}
n=1;
System.out.println(“玩家1请输入你想要的方块(1-9):”;
b=scan.nextInt();
而(b>9 | | b<1){
System.out.println(“玩家1请输入你想要的方块(1-9):”;
b=scan.nextInt();
}
开关(b){
案例1:
if(g[0][0]=''){
g[0][0]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例2:
如果(g[0][1]=''){
g[0][1]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例3:
如果(g[0][2]=''){
g[0][2]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例4:
如果(g[1][0]=''){
g[1][0]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例5:
如果(g[1][1]=''){
g[1][1]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例6:
if(g[1][2]=''){
g[1][2]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例7:
if(g[2][0]=''){
g[2][0]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例8:
如果(g[2][1]=''){
g[2][1]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
案例9:
如果(g[2][2]=''){
g[2][2]=str1;
}
否则{
System.out.println(“已经在那个广场上玩过”);
}
打破
}
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
如果(j==2){
系统输出打印(g[i][j]);
}
否则{
系统输出打印(g[i][j]+“|”);
}
n++;
}
System.out.println(“”);
}
系统输出打印(“再见”);
}
}
希望这能帮助您了解如何完成它:)
祝你好运
顺便说一句,这里有一个例子,你可以从那里引导自己。你还有一个。为了防止您陷入困境,您应该更倾向于使用字段(用于“保存”)和方法(用于重用代码位) 试试这个例子:
import java.util.Scanner;
public class gameBoard {
public static void main(String[] args) {
int n = 1, j, i, b;
char str1 = 'o';
Scanner scan = new Scanner(System.in);
char[][] g = new char[3][3];
for(i = 0; i < 3; i ++){
for(j = 0; j < 3; j ++){
if(j == 2){
System.out.print(n);
}
else{
System.out.print(n + " | ");
}
g[i][j] = ' ';
n++;
}
System.out.println("");
}
n = 1;
System.out.println("Player 1 please enter the square you want (1-9): ");
b = scan.nextInt();
while(b > 9 || b < 1){
System.out.println("Player 1 please enter the square you want (1-9): ");
b = scan.nextInt();
}
switch(b){
case 1:
if(g[0][0] == ' '){
g[0][0] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 2:
if(g[0][1] == ' '){
g[0][1] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 3:
if(g[0][2] == ' '){
g[0][2] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 4:
if(g[1][0] == ' '){
g[1][0] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 5:
if(g[1][1] == ' '){
g[1][1] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 6:
if(g[1][2] == ' '){
g[1][2] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 7:
if(g[2][0] == ' '){
g[2][0] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 8:
if(g[2][1] == ' '){
g[2][1] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
case 9:
if(g[2][2] == ' '){
g[2][2] = str1;
}
else{
System.out.println("Already played on that square");
}
break;
}
for(i = 0; i < 3; i ++){
for(j = 0; j < 3; j ++){
if(j == 2){
System.out.print(g[i][j]);
}
else{
System.out.print(g[i][j] + " | ");
}
n++;
}
System.out.println("");
}
System.out.print("Bye");
}
}
您希望电路板由数组(3,3)表示。然后在数组中存储“X”和“O”,并输出数组。检查是否有人赢了是一个更大的技巧(水平、垂直和对角检查)。是的,到目前为止你所做的是错误的。这在很大程度上是一种程序方法。您需要一种面向对象的方法。让棋盘成为一个对象,给它一些方法,比如打印状态,用X或O更新一个方块,然后有一个播放方法,它有一个while循环,使用循环语句一直运行到游戏结束@尽管Java中没有
array
,但使用二维数组还是有一个很好的观点。当您倾向于看到重复模式时,这是一个很好的提示,说明可以做一些不同的事情。看见
import java.util.Scanner;
public class GameBoard {
// Use a matrix to emulate a 3*3 grid.
private String[][] board = new String[3][3];
private String[][] players = { { "Player 1", "X" }, { "Player 2", "O" } };
private int currentPlayer = -1;
public boolean isBoardFull() {
for (String[] row : board) {
for (String col : row) {
if (col == null) {
return false;
}
}
}
return true;
}
public boolean gameIsWon() {
// I shall leave this to your imagination ;)
return false;
}
public void printBoard() {
for (String[] row : board) {
for (String col : row) {
System.out.print("|" + (col == null ? " " : col) + "|");
}
System.out.println("\n---------");
}
}
public void play() {
// Try-with-resource (Java 7+)
try (Scanner scanner = new Scanner(System.in)) {
while (!isBoardFull()) {
currentPlayer = (currentPlayer + 1) % 2;
boolean valid = false;
// Loop until a certain player makes a valid move
while (!valid) {
System.out.print(players[currentPlayer][0] + ", choose your row: \n> ");
int row = scanner.nextInt() - 1;
System.out.print(players[currentPlayer][0] + ", you have chosen row " + (row + 1) + ". Choose your column: \n> ");
int col = scanner.nextInt() - 1;
if (board[row][col] == null) {
board[row][col] = players[currentPlayer][1];
printBoard();
if (gameIsWon()) {
System.out.println(players[currentPlayer][0] + " wins!");
return;
}
valid = true; // This will allow players to switch turns
} else {
System.out.println("This slot is taken, try again!");
}
}
}
System.out.println("Draw!");
}
}
public static void main(String[] args) {
new GameBoard().play();
}
}