学习编码有时会感到沮丧,但是将其变成游戏可以使过程更容易处理。
游戏体验的一种好方法是编码简单的游戏。初学者通常从类似的项目开始:
一个数字猜测游戏
岩纸剪裁
蛇或cent
太空入侵者
跳棋或国际象棋
TIC-TAC-TOE位于此难度范围的中间。如果您可以构建数字猜测者或岩纸剪裁游戏,即使它更具挑战性,您就可以在Java进行TIC-TAC-TOE。
虽然它不像Checkers或Checkess那样复杂,但建立TIC-TAC-TOE教授有关多维阵列,异常处理和流量控制的有价值的课程。当您继续进行更大,更复杂的棋盘游戏时,这些技能将很有用。
如何编码Java TIC-TAC-TOE游戏
要编码Java Tic-TAC-TOE程序,我们将遵循以下八个步骤,使我们能够逐步朝着完成游戏的目标迈进:
创建一个可运行的Java类,称为
TicTacToe。声明所有必需的变量。
打印一个基本的TIC-TAC-TOE板。
从两个播放器中获取用户输入。
检查获胜的比赛。
如果没有赢得比赛,请切换玩家。
如果采用所有正方形,则结束游戏。
运行Java TIC-TAC-TOE应用程序。
步骤1:创建Tictactoe Java类
首先,创建一个名为TicTacToe的类,该类具有可运行的主方法,如下所示。
此示例中的所有代码都在TicTacToe类的主要方法中,或声明为本类的一部分的内部方法。可选地,您可以在JSHELL中运行此示例,我总是建议您学习Java和快速原型。
/ *用Java编码的TIC TAC TOE游戏 */公共类Tictactoe {public static void main(string [] args){}}}步骤2:声明所需的变量
TIC-TAC-TOE板有9个正方形。在我们的游戏中,我们显示每个未选择的广场的数量,并询问播放器要标记哪个正方形。

板的每个元素[]阵列代表游戏板上的位置。
char [] board = {'1','2','3','4','4','5','6','7','8','9'};
我们还需要跟踪转弯的转弯以及弹奏了多少个正方形。如果所有九个正方形都没有赢家,比赛就以平局结束。
var Numberofsquaresplayed = 0; var whoseternitis ='x';
为此,我们从一个符合数字1-9的字符阵列开始,如:
步骤3:打印出TIC-TAC-TOE板
每次选择正方形时,我们都会重新绘制董事会。
由于这是一个简单的控制台游戏,因此板的显示并不复杂。它看起来像下面的图片:

在游戏过程中,玩家选择了一个空位数。
我们输入逻辑以生成和打印出Java TIC-TAC-toe游戏板,以名为printTheBoard()的方法:
私有静态空隙printtheboard(char []板){系统。 out .println(板[0] +“ | ” +板[1] +“ | ” +板[2]);系统。 out .println( “ - + - + - ” );系统。 out .println(板[3] +“ | ” +板[4] +“ | ” +板[5]);系统。 out .println( “ - + - + - ” );系统。 out .println(board [6] +“ | ” +板[7] +“ | ” +板[8]);}
首先绘制板时,它仅显示数字:
1 | 2 | 3 - + - + - 4 | 5 | 6 - + - + - 7 | 8 | 9
随着游戏的进行,董事会将使用X和O更新。完整的TIC-TAC-TOE JAVA战斗看起来像这样:
X | O | X - + - + - X | 5 | o - + - + - x | O | 9
步骤4:获取用户输入
只要numberOfSquaresPlayed小于9,我们向播放器显示板的当前状态,并提示他们选择一个正方形,利用Java的Scanner仪类用于用户输入:
while(数字播放<9){ printtheboard (board);系统。 Out .printf(“选择一个方形播放器%s:”,Whoseternitis炎); var scanner = new java.util.scanner( System。in ); var input = scanner.nextint();板[Input-1] = Whoseternitis;}
请注意, char数组如何使用X或O更新,具体取决于转弯的转弯。
董事会[INPUT-1] = WHOSETRERSI炎;
由于数组基于零,因此我们从用户提供的数字中减去一个。如果用户选择数字5的正方形,则对应于我们数组中的索引4。
步骤5:检查获胜者
每次用户选择一个正方形时,我们都会检查他们是否完成了一条线并赢得了游戏。
有八种赢得Tic Tac Toe的方法:
三条水平线。
三个垂直线。
两条线穿过广场。
在这种情况下,有条件的逻辑可能会变得丑陋,因为必须根据当前玩家的字母检查潜在的获胜行中的每个正方形。
对第一条水平线的检查可能是这样的:
if(((板[0] == Whoseternitis)&&(板[1] == Whoseternitis)&&(板[2] == Whoseternitis)){系统。 Out .println(“您赢了!!!恭喜!”);休息;}
需要进行八次检查以检查游戏是否赢得了,这可能会变得丑陋。
另一个选项略微少一些,涉及使用char类型的鲜为人知的功能。
炭是整数类型
很少有人知道这一点,但是Java char实际上是整数类型。您可以像使用INT , Double或Float一样对其进行数学操作。
这意味着您可以在给定的行中添加三个chars ,看看结果是否等于“ x”炭自身三次。如果确实如此,您知道您连续三个“ X” chars 。如果轮到第二个球员,则对“ O” char做同样的事情。
以下逻辑使用CHAR的基于整数的性质来查看给定的行,列或交叉是否已完成:
if((板[0] +板[1] +板[2] ==(Whoseternitis * 3))//第一行||(板[3] +板[4] +板[4] +板[5] ==(Whoseternitis * 3))//第二行||(木板[6] +板[7] +板[7] +板[8] ==(whoseteritian Is * 3) + boart + boart + boart + boart + boart + boart + boart + board + barbs + board + barbs + barbs + board + board + board + barbs(3) (Whoseternitis * 3)//第一列||(板[1] +板[4] +板[7] ==(Whoseternitis * 3)//第二列(板[2] +板[4] +板[6] ==(Whoseternitis * 3))//第二个对角线){ printtheboard (board);系统。 Out .println(“您赢了!!!恭喜!”); break;} else {numberOfsquaresplayed ++; Whoseternitis =(Whoseternitis =='X')? 'o':'x';}
在char上成功执行数学操作的光芒。您可能会在整个职业生涯中享受其余的职业,再也看不到Java char再次使用过这样的Char。
步骤6:开关转
如果我们的条件检查显示了一条线已经完成,我们将祝贺玩家并脱离循环,如上所述:
打印板(板);系统。 Out .println(“您赢了!!!恭喜!”);休息;
如果一排未完成,我们会增加播放正方形的数量和变化转弯。我们与三元操作员一起做到这一点。
squaresplayed ++; Whoseternitis =(Whoseternitis =='X')? 'o':'x';
Java的条件操作员
三元运算符是一个快捷方式,可根据条件语句的结果简化分配。
我们可以简单地说:
如果(Whoseternitis =='X'){Whoseternitis ='o';} else {Whoseternitis ='X';}
但是,我们使用三元运算符来使语法更精确。
Whoseternitis =(Whoseternitis =='X')? 'o':'x';
作为新开发人员,我总是不喜欢三元运营商的神秘语法。作为经验丰富的Java开发人员,我仍然不喜欢它,但我更感谢它。
步骤7:处理领带
如果比赛是9次,没有赢家,则循环退出。
在此时间点,我们宣布比赛是一场比赛,并祝贺双方:
if(numberSquaresplayed == 9){ printtheboard (board);系统。 Out .println(“一场艰苦的战斗为平局而战!”);};}步骤8:运行TIC-TAC-TOE JAVA游戏
将所有这些代码拉在一起并节省您的更改,并运行Java Tic-Tac-toe游戏。
只要您提供有效的输入并遵循快乐的道路,游戏就会完美地执行。
这是完整的,可运行的TicTacToe Java类编码到这一点:
软件包com.mcnz.vector;公共类Tictactest {public static void main(string [] args){char [] board = {'1','2','2','3','4','4','5','6','7','7',8','8','9'}; var numberOfsquaresplayed = 0; var whoseternitis ='x'; while(数字播放<9){ printtheboard (board);系统。 Out .printf(“选择一个方形播放器%s:”,Whoseternitis炎); var scanner = new java.util.scanner( System。in ); var input = scanner.nextint();董事会[输入-1] = Whoseternitis; if((板[0] +板[1] +板[2] ==(Whoseternitis * 3))//第一行||(板[3] +板[4] +板[4] +板[5] ==(Whoseternitis * 3))//第二行||(木板[6] +板[7] +板[7] +板[8] ==(whoseteritian Is * 3) + boart + boart + boart + boart + boart + boart + boart + board + barbs + board + barbs + barbs + board + board + board + barbs(3) (Whoseternitis * 3)//第一列||(板[1] +板[4] +板[7] ==(Whoseternitis * 3)//第二列(板[2] +板[4] +板[6] ==(Whoseternitis * 3))//第二个对角线){ printtheboard (board);系统。 Out .println(“您赢了!!!恭喜!”);休息; } else {numberOfSquaresplayed ++; Whoseternitis =(Whoseternitis =='X')? 'o':'x'; }}} private static void printtheboard(char []板){系统。 out .printf(“%n%s |%s |%s%n”,董事会[0],董事会[1],董事会[2]);系统。 out .println(“ - + - + - ”);系统。 out .printf(“%s |%s |%s%n”,董事会[3],董事会[4],董事会[5]);系统。 out .println(“ - + - + - ”);系统。 out .printf(“%s |%s |%s%n%n”,董事会[6],董事会[7],董事会[8]); }} / * Java Tictactoe游戏的结尾 * /增强Java TIC-TAC-TOE应用程序
通过实现核心逻辑,您可以通过增强Java TIC-TAC-TOE游戏来推动编程知识。
可能的增强包括以下内容:
验证该用户输入在所需范围内。
执行异常处理以处理运行时错误。
对核心逻辑进行重构为较小的方法。
让游戏继续玩,直到玩家决定退出。
从秋千包装中添加GUI组件。
使用扫描仪类的自动氯糖特征。
使用枚举定义转弯是谁。
使用Java字符串格式化功能进行显示功能。
自动化服务器,因此游戏支持单人游戏模式。
Java TIC-TAC-TOE游戏的源代码
稍微增强的Java Tic-TAC-TOE游戏的完整代码如下。添加自己的增强功能,并进一步推动对Java的了解。
/ * java tic-tac-toe游戏源代码 */软件包com.mcnz.tictactoe; public class tictactoe {public static void main(string [] args [] args){char [char [] board = {'1','2','2','3','3','4','4',5',5',6','7','7'',''''','','''''''''}; var numberOfsquaresplayed = 0; var whoseternitis ='x'; var gameNdendMessage =“”; while(数字播放<9){ printtheboard (board); GetTheusertoselecttheirsquare (董事会,Whoseternitis);如果(他们wontheGame (董事会,Whoseternitis)){gameendendMessage =“您赢了!恭喜!”;休息; } else if(numberOfSquaresplayed == 9){gameendendMessage =“一场艰难的战斗进行了抽奖!”; } else {numberOfSquaresplayed ++; Whoseternitis =(Whoseternitis =='X')? 'o':'x';继续; }} printtheboard (board);系统。 Out .println(gameendendmessage); }私有静态void printtheboard(char []板){系统。 out .printf(“%n%s |%s |%s%n”,董事会[0],董事会[1],董事会[2]);系统。 out .println(“ - + - + - ”);系统。 out .printf(“%s |%s |%s%n”,董事会[3],董事会[4],董事会[5]);系统。 out .println(“ - + - + - ”);系统。 out .printf(“%s |%s |%s%n%n”,董事会[6],董事会[7],董事会[8]); }私有静态无效的gettheusertoselecttheirsquare(char []板,char Whoseternitis){do {try {system。 Out .printf(“播放器%s请选择一个未选出的正方形:”,Whoseternitis); var scanner = new java.util.scanner( System。in ); var input = scanner.nextint(); if(字符。Isdigit (board [Input -1])){板[输入-1] = Whoseternitis;休息; } else {系统。 Out .println(“对不起,那是摄取的。”); }} catch(异常E){系统。 Out .println(“出现问题。让我们再试一次。”); }打印板(板); } while(true); }私人静态布尔值HewonTheGame(char []板,char Whoseternitis){return(board [0] +板[1] +板[1] +板[2] ==(Whoseternitis * 3))//第一行|| (板[3] +板[4] +板[5] ==(Whoseternitis * 3))//第二行|| (板[6] +板[7] +板[8] ==(Whoseternitis * 3))//第三行|| (板[0] +板[3] +板[6] ==(Whoseternitis * 3))//第一列|| (板[1] +板[4] +板[7] ==(Whoseternitis * 3))//第二列|| (板[2] +板[5] +板[8] ==(Whoseternitis * 3))//第三列|| (董事会[0] +板[4] +板[8] ==(Whoseternitis * 3))//第一次十字架|| (板[2] +板[4] +板[6] ==(Whoseternitis * 3)); //第二十字}}}