




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
import java.io.BufferedReader;import java.io.InputStreamReader;/* * 五子棋游戏类 * */public class GobangGame / 定义达到赢条件的棋子数目private final int WIN_COUNT = 5;/ 定义用户输入的X坐标private int posX = 0;/ 定义用户输入的X坐标private int posY = 0;/ 定义棋盘private Chessboard chessboard;/* * 空构造器 */public GobangGame() /* * 构造器,初始化棋盘和棋子属性 * * param chessboard * 棋盘类 */public GobangGame(Chessboard chessboard) this.chessboard = chessboard;/* * 检查输入是否合法。 * * param inputStr * 由控制台输入的字符串。 * return 字符串合法返回true,反则返回false。 */public boolean isValid(String inputStr) / 将用户输入的字符串以逗号(,)作为分隔,分隔成两个字符串String posStrArr = inputStr.split(,);try posX = Integer.parseInt(posStrArr0) - 1;posY = Integer.parseInt(posStrArr1) - 1; catch (NumberFormatException e) chessboard.printBoard();System.out.println(请以(数字,数字)的格式输入:如3,5);return false;/ 检查输入数值是否在范围之内if (posX = Chessboard.BOARD_SIZE | posY = Chessboard.BOARD_SIZE) chessboard.printBoard();System.out.println(X与Y坐标只能大于等于1,与小于等于 + Chessboard.BOARD_SIZE+ ,请重新输入:);return false;/ 检查输入的位置是否已经有棋子String board = chessboard.getBoard();if (boardposXposY != 十) chessboard.printBoard();System.out.println(此位置已经有棋子,请重新输入:);return false;return true;/* * 开始下棋 */public void start() throws Exception / true为游戏结束boolean isOver = false;chessboard.initBoard();chessboard.printBoard();/ 获取键盘的输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in);String inputStr = null;/ br.readLine:每当键盘输入一行内容按回车键,则输入的内容被br读取到while (inputStr = br.readLine() != null) isOver = false;if (!isValid(inputStr) / 如果不合法,要求重新输入,再继续continue;/ 把对应的数组元素赋为String chessman = Chessman.BLACK.getChessman();chessboard.setBoard(posX, posY, chessman);/ 判断用户是否赢了if (isWon(posX, posY, chessman) isOver = true; else / 计算机随机选择位置坐标int computerPosArr = computerDo();chessman = Chessman.WHITE.getChessman();chessboard.setBoard(computerPosArr0, computerPosArr1,chessman);/ 判断计算机是否赢了if (isWon(computerPosArr0, computerPosArr1, chessman) isOver = true;/ 如果产生胜者,询问用户是否继续游戏if (isOver) / 如果继续,重新初始化棋盘,继续游戏if (isReplay(chessman) chessboard.initBoard();chessboard.printBoard();continue;/ 如果不继续,退出程序break;chessboard.printBoard();System.out.println(请输入您下棋的坐标,应以x,y的格式输入:);/* * 是否重新开始下棋。 * * param chessman * 为用户,为计算机。 * return 开始返回true,反则返回false。 */public boolean isReplay(String chessman) throws Exception chessboard.printBoard();String message = chessman.equals(Chessman.BLACK.getChessman() ? 恭喜您,您赢了,: 很遗憾,您输了,;System.out.println(message + 再下一局?(y/n);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);if (br.readLine().equals(y) / 开始新一局return true;return false;/* * 计算机随机下棋 */public int computerDo() int posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1);int posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1);String board = chessboard.getBoard();while (boardposXposY != 十) posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1);posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1);int result = posX, posY ;return result;/* * 判断输赢 * * param posX * 棋子的X坐标。 * param posY * 棋子的Y坐标 * param ico * 棋子类型 * return 如果有五颗相邻棋子连成一条直接,返回真,否则相反。 */public boolean isWon(int posX, int posY, String ico) / 直线起点的X坐标int startX = 0;/ 直线起点Y坐标int startY = 0;/ 直线结束X坐标int endX = Chessboard.BOARD_SIZE - 1;/ 直线结束Y坐标int endY = endX;/ 同条直线上相邻棋子累积数int sameCount = 0;int temp = 0;/ 计算起点的最小X坐标与Y坐标temp = posX - WIN_COUNT + 1;startX = temp 0 ? 0 : temp;temp = posY - WIN_COUNT + 1;startY = temp Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1: temp;temp = posY + WIN_COUNT - 1;endY = temp Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1: temp;/ 从左到右方向计算相同相邻棋子的数目String board = chessboard.getBoard();for (int i = startY; i endY; i+) if (boardposXi = ico & boardposXi + 1 = ico) sameCount+; else if (sameCount != WIN_COUNT - 1) sameCount = 0;if (sameCount = 0) / 从上到下计算相同相邻棋子的数目for (int i = startX; i endX; i+) if (boardiposY = ico & boardi + 1posY = ico) sameCount+; else if (sameCount != WIN_COUNT - 1) sameCount = 0;if (sameCount = 0) / 从左上到右下计算相同相邻棋子的数目int j = startY;for (int i = startX; i endX; i+) if (j endY) if (boardij = ico & boardi + 1j + 1 = ico) sameCount+; el
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北保健按摩师五级(初级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西有线广播电视机务员五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏假肢制作装配工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西热处理工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西机械冷加工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西垃圾清扫与处理工四级(中级工)历年参考题库含答案解析
- 焊工安全基本知识培训课件
- 焊工作业安全知识培训课件
- 2020-2025年投资项目管理师之宏观经济政策自测模拟预测题库(名校卷)
- 2025年银行金融类-金融考试-银行业专业人员初级(法规+银行管理)历年参考题库含答案解析
- 《机械制图》职业院校机械类专业全套教学课件
- 充电桩巡查记录表
- 人教版六年级数学上册第一单元测试卷
- 浙江省镇海中学高三一诊考试新高考物理试卷及答案解析
- JT-T-155-2021汽车举升机行业标准
- 化妆品质量意识培训大纲
- 八下单词表(Unit 1-10)大全
- YS-T 650-2020 医用气体和真空用无缝铜管
- JC-T 564-2000 纤维增强硅酸钙板
- 《建筑装饰工程质量检验与检测》课程标准
- PVC地胶板施工工艺流程图文
评论
0/150
提交评论