怎么用JavaSE实现三子棋游戏
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本篇内容主要讲解"怎么用JavaSE实现三子棋游戏",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用JavaSE实现三子棋游戏"吧!用面向对象的思维把实
千家信息网最后更新 2025年02月24日怎么用JavaSE实现三子棋游戏
本篇内容主要讲解"怎么用JavaSE实现三子棋游戏",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用JavaSE实现三子棋游戏"吧!
用面向对象的思维把实现三子棋划分为四个模块:
main函数
public class main { public static void main(String[] args) { player player1 = new player(); game game1 = new game(player1); while(true){ game1.initialize(); game1.play(); game1.destroy(); boolean b = player1.queryContinue(); if (!b) { System.out.println("欢迎下次继续游戏"); break; } } }}
棋盘模块设计
棋盘初始化
接受玩家落子并返回当前棋盘状态
接受AI落子并返回当前棋盘状态
判断获胜方、平局或是继续游戏,新游戏重置棋盘。
import java.util.Arrays;public class chessboard { private static final int 空白 = 0; private static final int 画圈 = 1; private static final int 画叉 = 2; private int[][] array = { {空白,空白,空白}, {空白,空白,空白}, {空白,空白,空白}, }; public boolean moveCircleAt(int row,int column){ if(array[row][column] != 空白){ return false; } array[row][column] = 画圈; return true; } public boolean moveCrossAt(int row,int column){ if(array[row][column] != 空白){ return false; } array[row][column] = 画叉; return true; } public static final int CIRCLE_WIN = 0; public static final int CROSS_WIN = 1; public static final int DRAW = 2; public static final int CONTINUE = 3; private static String display(int i){ switch (i){ case 空白:return " "; case 画圈:return "@"; case 画叉:return "*"; default:return " "; } } @Override public String toString() { String s = "+-+-+-+-+-+\n"; for(int i = 0;i<2;i++){ s += String.format("|%s|%s|%s|\n",display(array[i][0]),display(array[i][1]),display(array[i][2]));// s += "+-+-+-+-+-+\n"; } s += String.format("|%s|%s|%s|\n",display(array[2][0]),display(array[2][1]),display(array[2][2])); s += "+-+-+-+-+-+"; return s; } 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] == 画圈 ){ System.out.println("玩家胜"); return CIRCLE_WIN; } else if(array[i][0] == 画叉){ 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] == 画圈 ){ System.out.println("玩家胜"); return CIRCLE_WIN; } else if(array[0][i] == 画叉){ System.out.println("机器赢"); return CROSS_WIN; } } } //斜线判断 if(array[0][0] == array[1][1] && array[1][1]== array[2][1]){ if(array[1][1] == 画圈 ){ return CIRCLE_WIN; } else if(array[1][1] == 画叉){ return CROSS_WIN; } } if(array[0][2] == array[1][1] && array[1][1]== array[2][0]){ if(array[1][1] == 画圈 ){ return CIRCLE_WIN; } else if(array[1][1] == 画叉){ return CROSS_WIN; } } //没人赢 for(int i = 0;i<3;i++){ for(int j = 0;j<3;j++){ if(array[i][j] == 空白){ return CONTINUE; } } } return DRAW; } public void reset() { for(int i = 0;i<3;i++){ Arrays.fill(array[i],空白); } }}
玩家模块设计
输入想要落子的位置,决定退出游戏还是再来一局。
import java.util.Scanner;public class player { private final Scanner scanner = new Scanner(System.in); public int[] getStation(){ System.out.println("请输入要落子的位置,行,列,有效输入是0,1,2"); int r,c; while (true) { System.out.print(">>>"); r = scanner.nextInt(); c = scanner.nextInt(); if(r >= 0 && r <= 2 &&c >= 0 && c <= 2){ break; } System.out.println("有效范围是0,1,2,请重新输入。"); } return new int[] {r,c}; } public boolean queryContinue(){ System.out.println("是否再来一把?,请输入true or false"); System.out.println(">>>"); return scanner.nextBoolean(); }}
AI(电脑)模块设计
生成随机坐标
import java.util.Random;public class AI { //返回落子的位置 //第几行,第几列都是从0开始 //有效值0~2 private final Random random = new Random(); int r,c; public int[] getStation(){ r = random.nextInt(3); c = random.nextInt(3); return new int[] {r,c}; }}
游戏模块设计
初始化工作:打印提示内容和分割线,加载棋盘
判断是玩家落子还是AI落子
玩家落子情况下:判断玩家输入的合法性,超出边界或是覆盖落子都是不合法行为
AI落子情况下:判断输入的合法性。
控制棋盘重置新棋局
package 三子棋;public class game { private final chessboard chessboard1; private final player player1; private final AI ai; public game(player player1){ this.chessboard1 = new chessboard(); this.player1 = player1; this.ai = new AI(); } //游戏开始之前,进行一些准备工作 public void initialize(){ System.out.println("欢迎进入井字棋游戏"); System.out.println("规则如下;省略"); System.out.println("==========================="); System.out.println(chessboard1); } public void play(){//cintinue会继续,玩家胜,AI胜和平局 都是break,退出循环。 while(true){ if(playerTurn()){ break; } if(aiTurn()) { break; } } } //游戏结束之前,完成一些收尾工作 public void destroy(){// ai.reset();// player1.reset(); chessboard1.reset(); } private boolean playerTurn(){ System.out.println("玩家回合"); while (true){ int[] rc = player1.getStation(); int row = rc[0]; int column = rc[1]; if(chessboard1.moveCircleAt(row,column)) { break; } System.out.println("该位置已经有子,请重新选择位置"); } System.out.println(chessboard1); if(chessboard1.getState() == chessboard.CONTINUE){ return false; } return true; } private boolean aiTurn(){ System.out.println("AI回合"); while (true){ int[] rc = ai.getStation(); int row = rc[0]; int column = rc[1]; if(chessboard1.moveCrossAt(row,column)) { break; } System.out.println("该位置已经有子,请重新选择位置"); } System.out.println(chessboard1); if(chessboard1.getState() == chessboard.CONTINUE){ return false; } return true; }}
到此,相信大家对"怎么用JavaSE实现三子棋游戏"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
空白
玩家
位置
棋盘
三子
模块
输入
设计
内容
工作
合法
有效
合法性
回合
平局
情况
机器
状态
还是
学习
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全审查办法修订全文
有关网络安全的手抄报初中
北京运营网络技术要多少钱
宏观社会网络安全
网络安全伴我行作文400字
用jdbc修改数据库
虹口区银联网络技术要多少钱
昆明网络安全工程师薪资高就业快
网络安全备案表编号
洞口软件开发学校
服务器系统在u盘怎么看
服务器管理器刷新失败
学习软件开发工程师的方法
做个人数据库最好的人
霸王服务器维修
数据库时间转换
网络安全举报地址
工业互联网龙头 剑桥科技
CSDN数据库技术入股
软件开发中DTT表示什么
软件开发部门组织架构
查看某个数据库中所有表的语句
网络安全知识征文比赛
视觉系统软件开发做什么的
陕西工程软件开发中心
网络安全3000字范文参考
浦东新区安装网络技术欢迎咨询
数据库笔记狂神
网络技术与新媒体是干什么
白朗听力软件开发