怎么用JavaSE实现三子棋游戏
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容主要讲解"怎么用JavaSE实现三子棋游戏",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用JavaSE实现三子棋游戏"吧!用面向对象的思维把实
千家信息网最后更新 2025年11月08日怎么用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安全错误
数据库的锁怎样保障安全
高中生可以从事软件开发吗
4个硬盘服务器只加载出来一个
中国商业报告数据库
梦幻西游5开刷金数据库
如何在域控服务器设置管理员
华为车载软件开发
网络安全攻防大赛定位
轻量级服务器和共享型
吉林农信银行软件开发中心
crm软件开发团队
arcgis9.3做数据库
软件开发程序开发软件培训
深圳软件开发者合法吗
自己做服务器备份
什么是发布服务器
sql数据库pdf格式下载
oa数据库
小班开展网络安全
SAP组服务器没有
怎么看linux服务器内存占用
高中生可以从事软件开发吗
软件开发任职资格有哪些
数据库中限制一列的数值大小
危险化学品数据库
用数据库登陆
网络安全保险承保流程
网络安全怎么留言
河南高校网络安全宣传观后感
linux下的数据库操作
网络安全教育征文稿