Java实现三子棋小游戏的代码怎么写
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,本篇内容主要讲解"Java实现三子棋小游戏的代码怎么写",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java实现三子棋小游戏的代码怎么写"吧!游戏操作如图
千家信息网最后更新 2024年09月30日Java实现三子棋小游戏的代码怎么写
本篇内容主要讲解"Java实现三子棋小游戏的代码怎么写",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java实现三子棋小游戏的代码怎么写"吧!
游戏操作如图示:
原理:
主要借助3x3的二维数组
实现:
1、Main–主程序
public class Main { public static void main(String[] args) { Player player=new Player();//玩家 Game game=new Game(player); //一次循环代表一次游戏 while (true){ game.Init();//初始化 game.play();//开始游戏 game.destory();//释放 boolean q=player.queryContinue(); //一局游戏结束后,询问用户是否开始下一局游戏 if (!q){ System.out.println("欢迎下次继续游戏!"); break; } } }}
2、AI–电脑
import java.util.Random;//返回AI对象的落子位置//用数组表示 第几行第几列 从0开始//所以有效范围是[0,2]public class AI { private final Random random=new Random(); public int[] getPosition(){ int r=random.nextInt(3);//生成[0,2]的随机整数 0 1 2 int c=random.nextInt(3); return new int[]{r,c}; }}
3、Player–玩家
import java.util.Scanner;//返回玩家落子位置//用数组表示 第几行第几列 从0开始//所以有效范围是[0,2]public class Player { private final Scanner sc=new Scanner(System.in); public int[] getPosition(){ System.out.println("请输入要落子的位置,行列有效取值范围为[0,2]"); System.out.print(">>>"); int r,c; while (true){ System.out.print(">>>"); r=sc.nextInt(); c=sc.nextInt(); if (r>=0&&r<=2&&c>=0&&c<=2){ break; } System.out.println("行列有效范围为[0,2],请重新输入"); } return new int[]{r,c}; } //询问用户是否继续下一局 public boolean queryContinue(){ System.out.println("本局游戏结束,开始新游戏请输入true,否则输入false"); System.out.print(">>>"); return sc.nextBoolean(); }}
4、ChessBoard–棋盘
import java.util.Arrays;//棋盘 用来实例化对象//棋盘对象//功能 1、落子 2、判断棋盘状态public class ChessBoard { private static final int empty=0;//空白位置用0表示 private static final int circle=1;//落子为o的位置 private static final int cross=2;//落子为x的位置 private final int[][] array={ {empty,empty,empty}, {empty,empty,empty}, {empty,empty,empty} }; public boolean moveCircleAt(int row,int column){//落一个o if (array[row][column]!=empty){ //落子前需要先判断该位置是否为空白 return false; } array[row][column]=circle; return true; } public boolean moveCrossAT(int row,int column){//某个位置落个x if (array[row][column]!=empty){ return false; } array[row][column]=cross; return true; } //棋盘的四种状态 public static final int CIRCLE_WIN=0;//执o者赢 //三横三竖两对角成直线 public static final int CROSS_WIN=1;//执x者赢 public static final int DRAW=2;//平局 //没有成直线 但无落子位置了 public static final int CONTINUE=3;//继续 public int getState(){//得到棋盘的状态 //判断行 for (int i=0;i<3;i++){ if(array[i][0]==array[i][1]&&array[i][1]==array[i][2]){ if (array[i][0]==circle){ System.out.println("恭喜你赢了!"); return CIRCLE_WIN; } else if (array[i][0]==cross){ System.out.println("很遗憾你输了!"); return CROSS_WIN; } } } for (int i=0;i<3;i++){ if (array[0][i]==array[1][i]&&array[1][i]==array[2][i]){ if (array[0][i]==circle){ System.out.println("恭喜你赢了!"); return CIRCLE_WIN; } else if(array[0][i]==cross){ System.out.println("很遗憾你输了!"); return CROSS_WIN; } } } //正负对角线 //正负对角线 if ((array[0][0]==array[1][1]&&array[1][1]==array[2][2]) ||(array[0][2]==array[1][1]&&array[1][1]==array[2][0])){ if (array[1][1]==circle){ System.out.println("恭喜你赢了!"); return CIRCLE_WIN; } else if (array[1][1]==cross){ System.out.println("很遗憾你输了!"); return CROSS_WIN; } } //无获胜 for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ if (array[i][j]==empty){ return CONTINUE; } } } return DRAW;//无获胜也无空白 平局 } private static String show(int i){ //显示 switch (i){ case empty: return " "; case circle: return "o"; case cross: return "x"; default: return "1"; } } @Override public String toString() { String s="---------\n"; for (int i=0;i<2;i++){ //前两行 s+=String.format("|%s|%s|%s|\n",show(array[i][0]),show(array[i][1]),show(array[i][2])); s+="---------\n"; } //最后一行 s+=String.format("|%s|%s|%s|\n",show(array[2][0]),show(array[2][1]),show(array[2][2])); s+="---------"; return s; } public void reset() { for (int i=0;i<3;i++){ Arrays.fill(array[i],empty);//所有位置再次设置为空白 } }}
5、Game–游戏
import java.util.Arrays;public class Game { private final ChessBoard chessboard; private final Player player; private final AI ai; public Game(Player player){ this.chessboard=new ChessBoard(); this.player=player; this.ai=new AI(); } //初始化 public void Init(){ System.out.println("欢迎进入三子棋游戏"); System.out.println(chessboard); } //回合制游戏,游戏主流程 public void play(){ while (true){ //一次循环=player回合+AI回合 if (playerTurn()){//玩家回合 break; } if (aiTurn()){//ai回合 break; } } } private boolean aiTurn() { System.out.println("AI回合:"); while (true) { int[] rc=ai.getPosition(); int row=rc[0]; int column=rc[1]; if(chessboard.moveCrossAT(row, column)){ break; } } System.out.println(chessboard); return chessboard.getState()!=ChessBoard.CONTINUE; } private boolean playerTurn() { System.out.println("玩家回合:"); while (true) { int[] rc=player.getPosition(); int row=rc[0]; int column=rc[1]; if(chessboard.moveCircleAt(row, column)){ break; } System.out.println("该位置已经有棋子,请重新选择位置"); } System.out.println(chessboard); return chessboard.getState()!=ChessBoard.CONTINUE; } //新一局游戏开始时 游戏的界面需要重置 否则会是上一局游戏的结局界面 public void destory(){ chessboard.reset(); }}
运行结果:
1、测试落子位置合法性
2、测试棋盘状态/输赢
3、测试平局
到此,相信大家对"Java实现三子棋小游戏的代码怎么写"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
位置
回合
棋盘
玩家
三子
状态
空白
代码
小游戏
有效
遗憾
对角
对象
平局
数组
范围
测试
内容
对角线
正负
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
培训app软件开发费用
用数据库c 做学生成绩系统
计算机网络技术 中职
阿里云服务器代理价格便宜多少
属于数据库系统的应用实例的是
战地5社区创建服务器后延迟高
网络安全加固系统
太原ar软件开发公司
服务器目前暂未开放明日方舟
修改数据库中标怎么定罪
免费疾病数据库
修复服务器任务管理器
云主机 sql数据库
广州浪潮服务器
网络安全就是保证什么安全
永兴电脑软件开发培训学校
重庆二手服务器回收选哪家云主机
安卓应用软件开发学习
铁路监控服务器的职责
was怎么修改数据库密码
如何连接到网站服务器
已连接到服务器是什么意思
个人网络安全犯罪
无线网络技术的文献
天津港软件开发待遇
一个人买几个腾讯云服务器
工业互联网科技成果转化
至强服务器报价
西藏软件开发外包报价
h3c服务器建的虚机分辨率