Java制作五子棋人机对战
目录
简介
游戏思路
源码
效果视频
代码片段
简介
Hello,I'm Shendi
继上次写完象棋后又花了一天时间写了个五子棋,比较简单
拥有大概如下功能
- 五子棋的基本功能
- 棋盘大小的自由设置
- 胜利棋数的自由设置
- 人机对战
游戏思路
五子棋相比其他棋牌游戏比较简单
我们判断胜负只需要在玩家/人机下棋处循环遍历
- 上下是不是连起来到了指定点数
- 左右...
- 左斜
- 右斜
源码
github: https://github.com/1711680493/Application#gobang
效果视频
Java制作五子棋/连珠棋+简单AI
代码片段
棋盘,棋子绘制代码
/*** 重新绘制棋盘.* @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>* @param chessBoardNum 棋盘大小*/
public void repaint(int chessBoardNum) {BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);Graphics g = img.getGraphics();size = 380 / chessBoardNum;first = size >> 1;// 棋子大小初始化Game.getGame().getChesses().forEach((chess) -> chess.setSize(size,size));// 将棋盘上所有位置初始化positions.clear();for (int i = 0;i < chessBoardNum;i++) {positions.put(i, first + size * i);}// 绘制棋盘for (int i = 1;i < chessBoardNum;i++) {// 横线g.drawLine(size, size * i, 380, size * i);// 竖线g.drawLine(size * i, size, size * i, 380);}g.drawLine(size, 380 , 380, 380);g.drawLine(380, size, 380, 380);g.dispose();background.setIcon(new ImageIcon(img));invalidate();repaint();// 白色黑色棋子图int imgPos = (size - size / 2) >> 1;int imgSize = size >> 1;BufferedImage whiteChessImg = new BufferedImage(size,size,BufferedImage.TYPE_INT_ARGB);g = whiteChessImg.getGraphics();g.setColor(Color.WHITE);g.fillRoundRect(imgPos, imgPos, imgSize, imgSize, 180, 180);g.dispose();BufferedImage blackChessImg = new BufferedImage(size,size,BufferedImage.TYPE_INT_ARGB);g = blackChessImg.getGraphics();g.setColor(Color.BLACK);g.fillRoundRect(imgPos, imgPos, imgSize, imgSize, 180, 180);g.dispose();whiteChessIcon = new ImageIcon(whiteChessImg);blackChessIcon = new ImageIcon(blackChessImg);
}
判断游戏逻辑代码
/*** 执行下棋操作.* @author Shendi <a href='tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1711680493'>QQ</a>* @param chess 棋子* @param whiteBlack 白棋还是黑棋.*/
public void exec(JLabel chess,boolean whiteBlack) {// 指定位置是否有棋子,有不做操作int x = chessBoard.getScenePos(chess.getX());int y = chessBoard.getScenePos(chess.getY());if (scene[y][x] != 0) { return; }// 下棋int team = whiteBlack ? 1 : 2;scene[y][x] = team;// for (int[] xScene : scene) System.out.println(Arrays.toString(xScene));if (whiteBlack) chess.setIcon(chessBoard.whiteChessIcon);else chess.setIcon(chessBoard.blackChessIcon);// 判断胜负,横竖斜有指定数量棋子则胜利,对方失败int h = 1,v = 1,ld = 1,rd = 1;// 横,左右int posX,posY;for (int i = 1;i < chessBoardNum;i++) {posX = x - i;if (posX < 0) break;if (scene[y][posX] == team) h++; else break;}for (int i = 1;i < chessBoardNum;i++) {posX = x + i;if (posX >= chessBoardNum) break;if (scene[y][posX] == team) h++; else break;}// 竖,上下for (int i = 1;i < chessBoardNum;i++) {posY = y - i;if (posY < 0) break;if (scene[posY][x] == team) v++; else break;}for (int i = 1;i < chessBoardNum;i++) {posY = y + i;if (posY >= chessBoardNum) break;if (scene[posY][x] == team) v++; else break;}// 左斜,上左下右 \for (int i = 1;i < chessBoardNum;i++) {posX = x - i;posY = y - i;if (posX < 0 || posY < 0) break;if (scene[posY][posX] == team) ld++; else break;}for (int i = 1;i < chessBoardNum;i++) {posX = x + i;posY = y + i;if (posX >= chessBoardNum || posY >= chessBoardNum) break;if (scene[posY][posX] == team) ld++; else break;}// 右斜,上右下左 /for (int i = 1;i < chessBoardNum;i++) {posX = x + i;posY = y - i;if (posX >= chessBoardNum || posY < 0) break;if (scene[posY][posX] == team) rd++; else break;}for (int i = 1;i < chessBoardNum;i++) {posX = x - i;posY = y + i;if (posX < 0 || posY >= chessBoardNum) break;if (scene[posY][posX] == team) rd++; else break;}if (h >= vectoryNum || v >= vectoryNum || ld >= vectoryNum || rd >= vectoryNum) {stop(whiteBlack);return;}// 当前角色下棋完成,换一边currentTeam = !currentTeam;if (!currentTeam) AI.getAI().play();
}
Java制作五子棋人机对战相关推荐
- java五子棋人机对战_实现简单的人机对战五子棋(实践)
五子棋人机对战实践项目 总的任务和目标 完成一个人机对战的五子棋项目,基本效果如下: 第一部分 Java绘图原理 1. 基本概念 像素,坐标 2. 组件自定义绘图原理 3. Graphic ...
- 五子棋人机对战_10.带人机对战的五子棋程序
今天我们带来一个带人机对战功能的五子棋程序.程序基于前面文章中的框架搭建,新增人机对战的策略.程序基于规则进行决策,不考虑禁手,玩家执黑子先行.棋盘规模采用15乘15,棋盘规模容易扩展,程序棋力中等, ...
- C语言 AI智能,五子棋 人机对战,人人对战
C语言五子棋,人机对战,人人对战 chunli@Linux:~$ cat main.c # include<stdio.h> # include<string.h> # inc ...
- java五子棋联网对战,毕业设计-- 用JAVA实现五子棋网络对战系统
毕业设计-- 用JAVA实现五子棋网络对战系统 本科生毕业设计(论文)本科生毕业设计(论文) 题 目 用 JAVA 实现五子棋网络对战系统 姓 名 xxxx 学 号 xxxxx 系 别 计算机工程系 ...
- C#实现五子棋人机对战的思路与源码分享
前言 业余闲暇时,基于.netframework使用C#语言开发了一个五子棋人机对战的游戏,在此做些整理和分享,先上图. winform版 UI虽然很简洁,却花了些功夫,图形元素全动态生成,毕竟不是美 ...
- 人工智能 - 五子棋人机对战
人工智能 - 五子棋人机对战 作者: jig 阅读人次: 6635 文章来源:本站原创 发布时间:2007-7-12 网友评论(8)条 原帖及讨论:http://bbs.bc ...
- java制作五子棋的论文,基于java的五子棋的设计与实现.docx
摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识.根据计算机的发展过程我们发现如今计算机应用的现 ...
- Python实现五子棋人机对战 | CSDN博文精选
作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) 五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题.这篇文章主要介绍了Python版本五子棋的实现代码,大家可以做个参 ...
- 五子棋人机对战_原生JS+Canvas实现五子棋游戏
原生JS+Canvas实现五子棋游戏 效果图 主要功能模块为: 1.人机对战功能 2.悔棋功能 3.撤销悔棋功能 二.代码详解 2.1 人机对战功能实现 从效果图可以看到,棋盘的横竖可以放的位置为15 ...
- python五子棋人机对战_Python:游戏:五子棋之人机对战
原标题:Python:游戏:五子棋之人机对战 开端 画棋盘 首先肯定是要画出棋盘来,用 pygame 画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到, ...
最新文章
- 美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?
- R语言在ggplot中使用变量指定柱状图的名称实战
- solver.prototxt参数说明(三)
- libudev-dev 错误 libudev1 (= 204-5ubuntu20) 但是 204-5ubuntu20.5 正要被安装 解决方法
- 机器学习之 weka学习(四)
- https open api_Web上的分享(Share)API
- DOS 入侵、群发邮件、心脏起搏器……病毒攻击简史!
- link中的rel表示relation(关系),表示了当前文档与 Web 集合中其他文档的关系
- 生产环境一次诡异的空指针问题,反转了4次
- 解决maven报错JAVA_HOME should point to a JDK not a JRE问题
- SpringBoot整合editormd富文本编辑器
- gRPC如何在Golang和PHP中进行实战?7步教你上手!
- 使用阿里云OSS对象存储搭建个人图床
- 群晖7.0搭建discuz论坛
- T9632 待机led 控制
- 数字电路器件——门电路——与门电路、或门电路、非门电路及实例
- 简单易懂的CRC校验原理阐述
- Manjaro 个人新装配置
- 电脑突然断电蓝屏导致Git错误的一种解决办法
- 环境配置 | ubuntun16.04下卸载matlab