五子棋java.doc

上传人:asd****56 文档编号:70328514 上传时间:2023-01-19 格式:DOC 页数:6 大小:42KB
返回 下载 相关 举报
五子棋java.doc_第1页
第1页 / 共6页
五子棋java.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《五子棋java.doc》由会员分享,可在线阅读,更多相关《五子棋java.doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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() /* * 构造器,初始化棋盘和棋子

2、属性 * * 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

3、= 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.

4、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为游戏结束bool

5、ean 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) / 如果不合法,要求

6、重新输入,再继续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(computerPosAr

7、r0, 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(请

8、输入您下棋的坐标,应以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

9、/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);S

10、tring 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 * 棋子类型 * retu

11、rn 如果有五颗相邻棋子连成一条直接,返回真,否则相反。 */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

12、= 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

13、 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 (

14、sameCount = 0) / 从左上到右下计算相同相邻棋子的数目int j = startY;for (int i = startX; i endX; i+) if (j endY) if (boardij = ico & boardi + 1j + 1 = ico) sameCount+; else if (sameCount != WIN_COUNT - 1) sameCount = 0;j+;return sameCount = WIN_COUNT - 1 ? true : false;public static void main(String args) throws Exception GobangGame gb = new GobangGame(new Chessboard();gb.start();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 休闲娱乐

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com