仅用300行代码实现的智能五子棋人机对战

C#五子棋人人对战完整代码 阅读详情

和最近在做的项目类似,不过我的更高级,mark下稍后研究,这个算法不很好,但是够用了

这款五子棋小游戏是我五六年前在培训学习JAVA的时候花了一整个下午时间即兴写出来的,功能很简单,实现了五子棋的电脑对战,主要就是为了研究下电脑下棋算法,所以 其他的功能和细节都没考虑,比如电脑最后的落子点我是直接用图片标示出来的,最好是另建一个线程来闪烁最后落子点,还有智能等级也是可以调节的,偏重于防 守和进攻都可以修改代码中权值的设定来实现的,有兴趣的朋友可以在此基础上扩展一下。因为没有写谁先下棋的功能,可以模拟下电脑先下子,只需要你在边角上 先下一子就可以了,相比下来,电脑先下的话,电脑赢的几率更大点,一共用到了三张图片,都在附件中。

 



下面是全部的代码,写了一些注释,希望能对你阅读代码起到一点帮助

 

Java代码
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.net.URL;
  4. import javax.swing.*;
  5. public class GobangGame {
  6. public static void main(String[] args) {
  7. GameF game = new GameF();
  8. game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9. game.show();
  10. }
  11. }
  12. class GameF extends JFrame {
  13. public GameF() {
  14. Container contentPane = getContentPane();
  15. final Panel panel = new Panel();
  16. panel.setBackground(new Color(255, 182, 147));
  17. contentPane.setBackground(new Color(255, 182, 147));
  18. contentPane.add(panel);
  19. setSize(560, 560);
  20. setTitle("杨雷的五子棋游戏 版本1.0");
  21. setResizable(false);
  22. panel.setCursor(new Cursor(Cursor.HAND_CURSOR));
  23. JMenuBar menuBar=new JMenuBar();
  24. JMenu menu=new JMenu("选项");
  25. JMenuItem menuStart=new JMenuItem("开始游戏");
  26. menuStart.addActionListener(new ActionListener(){
  27. public void actionPerformed(ActionEvent e){
  28. panel.ResetGame();
  29. panel.repaint();
  30. }
  31. });
  32. JMenuItem menuExit =new JMenuItem("退出");
  33. menuExit.addActionListener(new ActionListener(){
  34. public void actionPerformed(ActionEvent e){
  35. System.exit(0);
  36. }
  37. });
  38. menuBar.add(menu);
  39. menu.add(menuStart);
  40. menu.add(menuExit);
  41. this.setJMenuBar(menuBar);
  42. }
  43. }
  44. class Panel extends JPanel {
  45. private URL blackImgURL = GobangGame.class.getResource("black.gif");
  46. private ImageIcon black=new ImageIcon(blackImgURL);
  47. private URL whiteImgURL = GobangGame.class.getResource("white.gif");
  48. private ImageIcon white=new ImageIcon(whiteImgURL);
  49. private URL currentImgURL = GobangGame.class.getResource("current.gif");
  50. private ImageIcon current=new ImageIcon(currentImgURL);
  51. private int i, j, k, m, n, icount;
  52. private int[][] board = new int [16][16];
  53. private boolean[][][] ptable = new boolean[16][16][672];
  54. private boolean[][][] ctable = new boolean[16][16][672];
  55. private int[][] cgrades = new int[16][16];
  56. private int[][] pgrades = new int[16][16];
  57. private int cgrade,pgrade;
  58. private int[][] win = new int[2][672];
  59. private int oldx,oldy;
  60. private int bout=1;
  61. private int pcount,ccount;
  62. private boolean player,computer,over,pwin,cwin,tie,start;
  63. private int mat,nat,mde,nde;
  64. public Panel(){
  65. addMouseListener(new Xiazi());
  66. this.ResetGame();
  67. }
  68. public void paintComponent(Graphics g) {
  69. super.paintComponent(g);
  70. for (int i = 0; i < 16; i++)
  71. for (int j = 0; j < 16; j++){
  72. g.drawLine(50, 50 + j * 30, 500, 50 + j * 30);
  73. }
  74. for (int i = 0; i < 16; i++)
  75. for (int j = 0; j < 16; j++){
  76. g.drawLine(50 + j * 30, 50, 50 + j * 30, 500);
  77. }
  78. for (int i = 0; i < 16; i++){
  79. String number = Integer.toString(i);
  80. g.drawString(number, 46 + 30 * i, 45);
  81. }
  82. for (int i = 1; i < 16; i++){
  83. String number = Integer.toString(i);
  84. g.drawString(number, 33, 53 + 30 * i);
  85. }
  86. updatePaint(g);
  87. }
  88. class Xiazi extends MouseAdapter{
  89. public void mouseClicked(MouseEvent e){
  90. if(!over)
  91. {
  92. oldx = e.getX();
  93. oldy = e.getY();
  94. mouseClick();
  95. repaint();
  96. }
  97. }
  98. }
  99. // 游戏初始化
  100. public void ResetGame()
  101. {
  102. //初始化棋盘
  103. for(i=0;i<16;i++)
  104. for(j=0;j<16;j++)
  105. {
  106. this.pgrades[i][j] = 0;
  107. this.cgrades[i][j] = 0;
  108. this.board[i][j] = 2;
  109. }
  110. //遍历所有的五连子可能情况的权值
  111. //横
  112. for(i=0;i<16;i++)
  113. for(j=0;j<12;j++){
  114. for(k=0;k<5;k++){
  115. this.ptable[j+k][i][icount] = true;
  116. this.ctable[j+k][i][icount] = true;
  117. }
  118. icount++;
  119. }
  120. //竖
  121. for(i=0;i<16;i++)
  122. for(j=0;j<12;j++){
  123. for(k=0;k<5;k++){
  124. this.ptable[i][j+k][icount] = true;
  125. this.ctable[i][j+k][icount] = true;
  126. }
  127. icount++;
  128. }
  129. //右斜
  130. for(i=0;i<12;i++)
  131. for(j=0;j<12;j++){
  132. for(k=0;k<5;k++){
  133. this.ptable[j+k][i+k][icount] = true;
  134. this.ctable[j+k][i+k][icount] = true;
  135. }
  136. icount++;
  137. }
  138. //左斜
  139. for(i=0;i<12;i++)
  140. for(j=15;j>=4;j--){
  141. for(k=0;k<5;k++){
  142. this.ptable[j-k][i+k][icount] = true;
  143. this.ctable[j-k][i+k][icount] = true;
  144. }
  145. icount++;
  146. }
  147. for(i=0;i<=1;i++) //初始化黑子白子上的每个权值上的连子数
  148. for(j=0;j<672;j++)
  149. this.win[i][j] = 0;
  150. this.player = true;
  151. this.icount = 0;
  152. this.ccount = 0;
  153. this.pcount = 0;
  154. this.start = true;
  155. this.over = false;
  156. this.pwin = false;
  157. this.cwin = false;
  158. this.tie = false;
  159. this.bout=1;
  160. }
  161. public void ComTurn(){ //找出电脑(白子)最佳落子点
  162. for(i=0;i<=15;i++) //遍历棋盘上的所有坐标
  163. for(j=0;j<=15;j++){
  164. this.pgrades[i][j]=0; //该坐标的黑子奖励积分清零
  165. if(this.board[i][j] == 2) //在还没下棋子的地方遍历
  166. for(k=0;k<672;k++) //遍历该棋盘可落子点上的黑子所有权值的连子情况,并给该落子点加上相应奖励分
  167. if(this.ptable[i][j][k]){
  168. switch(this.win[0][k]){
  169. case 1: //一连子
  170. this.pgrades[i][j]+=5;
  171. break;
  172. case 2: //两连子
  173. this.pgrades[i][j]+=50;
  174. break;
  175. case 3: //三连子
  176. this.pgrades[i][j]+=180;
  177. break;
  178. case 4: //四连子
  179. this.pgrades[i][j]+=400;
  180. break;
  181. }
  182. }
  183. this.cgrades[i][j]=0;//该坐标的白子的奖励积分清零
  184. if(this.board[i][j] == 2) //在还没下棋子的地方遍历
  185. for(k=0;k<672;k++) //遍历该棋盘可落子点上的白子所有权值的连子情况,并给该落子点加上相应奖励分
  186. if(this.ctable[i][j][k]){
  187. switch(this.win[1][k]){
  188. case 1: //一连子
  189. this.cgrades[i][j]+=5;
  190. break;
  191. case 2: //两连子
  192. this.cgrades[i][j]+=52;
  193. break;
  194. case 3: //三连子
  195. this.cgrades[i][j]+=100;
  196. break;
  197. case 4: //四连子
  198. this.cgrades[i][j]+=400;
  199. break;
  200. }
  201. }
  202. }
  203. if(this.start){ //开始时白子落子坐标
  204. if(this.board[4][4]==2){
  205. m = 4;
  206. n = 4;
  207. }else{
  208. m = 5;
  209. n = 5;
  210. }
  211. this.start = false;
  212. }else{
  213. for(i=0;i<16;i++)
  214. for(j=0;j<16;j++)
  215. if(this.board[i][j] == 2){ //找出棋盘上可落子点的黑子白子的各自最大权值,找出各自的最佳落子点
  216. if(this.cgrades[i][j]>=this.cgrade){
  217. this.cgrade = this.cgrades[i][j];
  218. this.mat = i;
  219. this.nat = j;
  220. }
  221. if(this.pgrades[i][j]>=this.pgrade){
  222. this.pgrade = this.pgrades[i][j];
  223. this.mde = i;
  224. this.nde = j;
  225. }
  226. }
  227. if(this.cgrade>=this.pgrade){ //如果白子的最佳落子点的权值比黑子的最佳落子点权值大,则电脑的最佳落子点为白子的最佳落子点,否则相反
  228. m = mat;
  229. n = nat;
  230. }else{
  231. m = mde;
  232. n = nde;
  233. }
  234. }
  235. this.cgrade = 0;
  236. this.pgrade = 0;
  237. this.board[m][n] = 1; //电脑下子位置
  238. ccount++;
  239. if((ccount == 50) && (pcount == 50)) //平局判断
  240. {
  241. this.tie = true;
  242. this.over = true;
  243. }
  244. for(i=0;i<672;i++){
  245. if(this.ctable[m][n][i] && this.win[1][i] != 7)
  246. this.win[1][i]++; //给白子的所有五连子可能的加载当前连子数
  247. if(this.ptable[m][n][i]){
  248. this.ptable[m][n][i] = false;
  249. this.win[0][i]=7;
  250. }
  251. }
  252. this.player = true; //该人落子
  253. this.computer = false; //电脑落子结束
  254. }
  255. public void mouseClick(){
  256. if(!this.over)
  257. if(this.player){
  258. if(this.oldx<520 && this.oldy<520) {
  259. int m1=m,n1=n;
  260. m = (oldx-33)/30;
  261. n = (oldy-33)/30;
  262. if(this.board[m][n] == 2){
  263. this.bout++;
  264. this.board[m][n] = 0;
  265. pcount++;
  266. if((ccount == 50) && (pcount == 50)){
  267. this.tie = true;
  268. this.over = true;
  269. }
  270. for(i=0;i<672;i++){
  271. if(this.ptable[m][n][i] && this.win[0][i] != 7)
  272. this.win[0][i]++; //给黑子的所有五连子可能的加载当前连子数
  273. if(this.ctable[m][n][i]){
  274. this.ctable[m][n][i] = false;
  275. this.win[1][i]=7;
  276. }
  277. }
  278. this.player = false;
  279. this.computer = true;
  280. }else{
  281. m=m1;n=n1;
  282. }
  283. }
  284. }
  285. }
  286. public void updatePaint(Graphics g){
  287. if(!this.over){ //如果是轮到电脑下
  288. if(this.computer)
  289. this.ComTurn(); //得到最佳下子点
  290. //遍历当前棋盘上的五连子情况,判断输赢
  291. for(i=0;i<=1;i++)
  292. for(j=0;j<672;j++){
  293. if(this.win[i][j] == 5)
  294. if(i==0){ //人赢
  295. this.pwin = true;
  296. this.over = true; //游戏结束
  297. break;
  298. }else{
  299. this.cwin = true; //电脑赢
  300. this.over = true;
  301. break;
  302. }
  303. if(this.over) //一遇到五连子退出棋盘遍历
  304. break;
  305. }
  306. g.setFont(new Font("华文行楷",0,20));
  307. g.setColor(Color.RED);
  308. //画出当前棋盘所有棋子
  309. for(i=0;i<=15;i++)
  310. for(j=0;j<=15;j++){ //如果board元素值为0,则该坐标处为黑子
  311. if(this.board[i][j] == 0){
  312. g.drawImage(black.getImage(),i*30+31,j*30+31,black.getImage().getWidth(black.getImageObserver())-3,black.getImage().getHeight(black.getImageObserver())-3, black.getImageObserver());
  313. }
  314. //如果board元素值为1,则该坐标处为白子
  315. if(this.board[i][j] == 1){
  316. g.drawImage(white.getImage(),i*30+31,j*30+31,white.getImage().getWidth(white.getImageObserver())-3,white.getImage().getHeight(white.getImageObserver())-3, white.getImageObserver());
  317. }
  318. }
  319. //画出白子(电脑)当前所下子,便于辨认
  320. if(this.board[m][n]!=2)
  321. g.drawImage(current.getImage(),m*30+31,n*30+31,current.getImage().getWidth(current.getImageObserver())-4,current.getImage().getHeight(current.getImageObserver())-4, current.getImageObserver());
  322. //判断输赢情况
  323. //人赢
  324. if(this.pwin)
  325. g.drawString("您太厉害了!再来一次请重新开始游戏..",20,200);
  326. //电脑赢
  327. if(this.cwin)
  328. g.drawString("很遗憾,你输了!再来一次请重新开始游戏..",84,190);
  329. //平局
  330. if(this.tie)
  331. g.drawString("不分胜负!再来一次请重新开始游戏..",80,200);
  332. g.dispose();
  333. }
  334. }
  335. }

如果有兴趣的朋友可以和我一起交流下技术, 我QQ号码: 249930610, MSN: yangsharp@hotmail.com

 

【C语言五子棋、三子棋人机对战篇的详细介绍】 【C语言实现五子棋、三子棋人机对战,包含电脑人工智能对战(可攻可守)】(非标题党)内容有点繁杂,大家可以按照目录,依据个人需要查阅内容。在写这篇详细介绍的同时,我也发现了一些漏洞,本篇改动地地方在:①判断游戏输赢board_wolf( ) ②电脑智能下棋系统(包含计分)computer_calc( )中对八个方向进行扫描//八个方向进行扫描,改动了为了,if (y == 0 && x!然后将代码间的写了注释,基本恨不得每句都介绍了,希望对大家有所帮助。... 阅读详情

相关推荐

基于Java的五子棋人机对战项目实战开发

五子棋作为一种规则简洁但策略丰富的经典棋类游戏,是学习人工智能博弈算法与图形界面开发的理想实践项目。本项目旨在通过Java语言实现一个具备图形界面、完整游戏逻辑与智能AI对手的五子棋人机对战系统。项目涵盖图形界面构建、游戏规则建模、AI决策算法设计、多线程优化以及可扩展架构等多个技术维度,具有较强的综合性与实战性。通过该项目的开发,不仅能加深对Java编程语言的理解,还能掌握博弈算法的核心思想和图形界面交互的实现方式,为后续开发复杂桌面应用打下坚实基础。

weixin_33506815的博客 841

C语言实现五子棋小游戏(内附源码)

游戏中有人机,双人两种模式。五子棋作为一个平面游戏,很明显用二维数组来写最合适不过。为了让代码看起来更有条理,我们用三个.c文件,分别是:text.c 用来测试我们的游戏;game.c 游戏功能的实现;is_win.c 判断输赢的版块。另外,还有一个game.h 文件来放我们的函数声明和头文件。

m0_63135219的博客 9992

纯C++实现的五子棋对战程序,含双人联机与智能AI对弈功能

这个五子棋程序完全用标准C++编写,不依赖第三方图形库或运行时环境,Windows和Linux下均可直接编译运行。支持两种核心玩法:双人联机模式允许两名玩家通过同一台设备轮流点击棋盘下棋,系统实时检测横、竖、斜方向的五子连线并即时弹出胜负提示,结束后一键返回主菜单;人机对战模式中玩家执黑先行,AI执白自动响应,采用AC搜索算法评估落子位置,兼顾效率与合理性,同样具备完整胜负判定与反馈机制。程序模块划分清晰,ChessEngine负责规则校验与终局判断,ACSearcher实现AI决策逻辑,PossibleP

uuu88的博客 223

【附源码/完整教程】如何使用C语言打造人机对战版五子棋?

1.项目分析 2.项目目标 AI的基础应用 算法的设计和实现 C语言的图形界面程序开发 3.项目准备 VS/VC++(任意版本) easyx图形库(直接双击即可安装) 领取素材(图片、音效)传送门 4.创建项目 创建空项目。 把素材拷贝到项目目录下 5.画棋盘 画棋盘,播放开局提示、播放背景音乐 #include<graphics.h>//easyx图像库的头文件 #include<windows.h> ...

C语言实战大全 1万+

基于C语言的五子棋(带人机对战)

基于控制台的C语言实现的控制台五子棋,带人机对战,玩家1操控使用 wasd j(确认下子) 玩家二使用上下左右 1确定下子 返回可按esc 老项目可能需要自己将地图修改下 人机对战 实现方式见代码

Scratch离线版部署指南:解决资源缺失与页面显示异常问题

本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。

wine的专栏 1263

c语言实现五子棋代码(有简单的人机对战,附解析)

前段时间,我和我的小伙伴一起做了关于五子棋的小的团队项目,我将其中一些非核心的内容简化了一下,保留了核心的内容,今天我就和你们来分享一下我们所做小项目。因为我们定义了比较多的函数,所以我将其每个函数都单独讲解,在这个项目中,我做了两个人机对战,一个非常简单的,一个简单的。(声明函数就不展示了)我们先定义两个全局变量。其中flag变量用来表示这个回合谁落子,偶数表示黑方落子,基数表示白方落子。数组中的数组代表子的颜色,2表示黑子,1表示白字。用来清屏。

2401_85637543的博客 3365

【小宁学习日记6 PCB】电路原理图

本文系统讲解了电子硬件设计中原理图的阅读与绘制技巧。首先剖析原理图的四大核心要素(元件符号、连接线、结点、注释),强调注释对可读性的重要性。然后提出三步读懂法:查看图纸信息、分模块分析、结合芯片手册验证,并列举5个典型芯片案例(CH224K、CH343P等)进行实战解析。最后给出6条绘制规范:模块化布局、详细标注、规范命名、信号流布局、符号封装匹配、版本管理。文章指出原理图是电子设计的"地基",掌握规范阅读与绘制方法能大幅提升设计效率,避免常见错误。新手应从开源项目分析和简单电路绘制入手

qq_74376834的博客 2352

Java五子棋人机对战AI算法

自己写的人机对战,思路是给每个未下的棋子进行评分,活二、活三、冲四等分别代表不同分数,取最高分数进行落子 简单写了个前端页面,大家可以玩玩看 https://www.linzhehao.cn/Gobang/single 下面是Java的核心代码及用法 一、示例用法 public class MyTest { public static void main(String[] args)...

qq243920161的博客 4869

保姆级教程:在STM32CubeIDE上快速部署micro_ros到STM32F407(附常见问题解决)

本文提供了一份详细的保姆级教程,指导开发者如何在STM32CubeIDE上快速部署micro_ros到STM32F407微控制器。内容涵盖从Windows与Ubuntu双环境搭建、micro-ROS静态库编译、STM32CubeIDE工程深度集成,到串口通信联调与常见问题解决的完整流程,旨在帮助读者构建稳定可靠的ROS2与嵌入式设备通信系统。

o4p5q6r7s的博客 324

手把手教你用USBasp给Arduino UNO烧写程序(ICSP模式,含BootLoader选择指南)

本文详细介绍了如何使用USBasp编程器通过ICSP模式为Arduino UNO烧写程序,包括硬件连接、软件配置、Hex文件处理和BootLoader选择指南。内容涵盖从新手入门到高级优化的全流程,帮助开发者高效完成烧写任务,特别适合需要修复BootLoader或进行量产烧写的用户。

weixin_33958381的博客 364

linux c语言五子棋人机对战程序,C语言 AI智能,五子棋 人机对战,人人对战

C语言五子棋,人机对战,人人对战chunli@Linux:~$catmain.c#include#include#include#defineSPA0#defineMAN1#defineCOM2/*空位置设为0,玩家下的位置设为1,电脑下的位置设为2*/intqipan[15][15];/*15*15的棋盘*/inta,b,c,d,x;...

weixin_32968155的博客 315

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

(C语言)基于EasyX的可视化智能AI人机交互对战五子棋

核心是分析横、竖、斜方向上长度为 5 的窗口,根据连子数量和开放性分配分数,比如 AI 的‘四连’是 1000 分,玩家的‘四连’是 500 分,确保攻防兼顾。sense() 函数遍历棋盘,综合四个方向的总得分,选出最高分的位置落子。能将过往下过的棋局数据存储,可随时观看(本人是将数据存储在.txt文件中,如果你想使用一下代码,首先你需要创建一个存储数据的文件,必须预先创建!下面是完整的代码(图片文件丢失了,如果有需要可以自己加图片,只需要将代码中的路径名更改为你自己设计的路径就行)绘图插件 EasyX。

qq_56291021的博客 1914

勒索病毒c语言源代码,勒索病毒原理解析

一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密,然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//文件遍...

weixin_35355756的博客 6601

VirtualBox虚拟机拖放文件总失败?手把手教你配置双向拖放与共享文件夹(Ubuntu版)

本文详细指导如何在VirtualBox的Ubuntu虚拟机中配置高效的数据交换方案。核心是安装VirtualBox Guest Additions,并在此基础上开启双向拖放与共享粘贴板功能,同时建立稳定的共享文件夹,彻底解决主机与虚拟机间文件传输失败的问题,构建无缝的跨系统工作环境。

weixin_29245767的博客 232

300行代码实现的智能五子棋人机对战

这款五子棋小游戏是我五六年前在培训的时候花了一整个下午时间即兴写出来的,功能很简单,实现了五子棋的电脑对战,主要就是为了研究下电脑下棋算法,所以其他的功能和细节都没考虑,比如电脑最后的落子点我是直接用图片标示出来的,最好是另建一个线程来闪烁最后落子点,还有智能等级也是可以调节的,偏重于防守和进攻都可以修改代码中权值的设定来实现的,有兴趣的朋友可以在此基础上扩展一下。因为没有写谁先下棋的功能,可以模...

yanglei998 600

基于STM32的智能快递柜设计(全部资料)

本文设计了一种基于STM32F407ZGT6的智能快递柜系统,通过模块化硬件设计和软件算法优化,实现了24小时无人值守、温湿度智能调控、远程监控等功能。系统集成OLED显示、GSM通信、舵机控制、超声波检测等模块,存取响应时间≤3秒,识别准确率达99.2%,较传统模式效率提升60%。测试表明系统运行稳定,用户满意度达92%,具有成本低、安全性高、可扩展性强等特点,为智慧物流末端配送提供了创新解决方案。未来可引入AI算法、太阳能供电等功能进一步优化系统性能。

3254968421的博客 586

AI智能人机对战五子棋(Java实现图形界面)

简述 这是本学期上完Java课后老师给出的课程设计题目,目的是:熟悉与掌握GUI编程;实现五子棋棋盘和棋子的绘制;实现游戏AI以及对二维数组的使用。 界面效果图 电脑先行,玩家输赢图: 玩家先行,玩家输赢图: 整体设计 界面设计部分 这里实现的是框架的主要界面设计(由4366中的在线五子棋修改而来),除棋盘之外的所有部分都在这里完成,即标签,图片,按钮的添加,框架边框的去除,实现框...

weixin_39453325的博客 7534

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python代码300行程序_Python:游戏:300行代码实现俄罗斯方块

本文代码基于 python3.6 和 pygame1.9.4。五子棋比起我之前写的几款游戏来说,难度提高了不少。如果是人与人对战,那么,电脑只需要判断是否赢了就可以。如果是人机对战,那你还得让电脑知道怎么下。我们先从简单的问题来看。开端画棋盘首先肯定是要画出棋盘来,用 pygame 画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了。画棋子...

weixin_39616880的博客 275

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

五子棋游戏设计详解(C语言)

五子棋游戏设计详解 五子棋游戏是大家耳熟能详的游戏,网上看到那些学习编程的都在制作这种游戏程序。我也来凑一下热闹。 游戏设计有几个要素: 一是界面设计,也就是画出棋盘;二是黑白双方如何下子,即时棋盘显示;三是程序要有悔棋功能;四是游戏过程记录,便于棋后复盘;五是游戏模式设置,双人对弈和人机模式。这五条是游戏的基本功能,其他功能可自行添加。 程序编制先定义全局变量: Canvas cs; //画布,绘图时图形图像载体 //VC是 canvas , VB是...

baidu_41801770的博客 4017

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于java的五子棋博弈系统

基于java的五子棋博弈系统 前言 本文是以学校Java面向对象程序设计课程设计要求为背景,利用了Java语言、人工智能算法知识和Eclipse IDE开发平台,开发了五子棋小游戏,本论文论述了五子棋小游戏的概念、结构、基本思路和方法,全文共分为绪论、设计分析、详细分析、设计结果及分析、总结和展望、参考文献以及附录(代码)等。 设计目的 巩固加深对java语言课程基本知识的理解和掌握; 掌握java语言编程和调试的基本技能; 掌握javaGUI编程的基本能力; 掌握JDK、WindowBuilder等开发

敷衍zgf的博客 4529

AI人工智能(调包侠)速成之路十二(AlphaZero代码实战4:人机对战实现)

AlphaZero巧妙了使用MCTS搜索树和神经网络一起,通过MCTS搜索树优化神经网络参数,反过来又通过优化的神经网络指导MCTS搜索。两者一主一辅,非常优雅的解决了这类状态完全可见,信息充分的棋类问题。前面结合一个五子棋AI的案例代码实现了蒙特卡洛树搜索,还使用Tensorflow2实现神经网络的部分。现在还差训练模型部分和人机对战的界面,我们先来实现人机交互。 AI人工智能(调包侠)速成之路十(AlphaZero代码实战2:蒙特卡洛树搜索)AI人工智能(调包侠)速成之路十一(Alph...

1128

五子棋小游戏(计科(智能)22-1赵冰凝小组)人人对战

/测试// System.out.println("高度:"+height);//测试 this.setLocation((width - 800) / 2, (height - 600) / 2);int a = JOptionPane.showOptionDialog(null,"请选择游戏模式","请选择",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null, objects, objects[0]);

2301_76842771的博客 253

五子棋小游戏(计科(智能)22-1赵冰凝小组)

2、下棋:需要对鼠标监听器获取x, y坐标处理,为了使黑白子轮流下棋,我们用了flag来标志,当flag为1时下的棋为黑色,flag为2时棋为白色。创建一个大小为15*15的二维数组,用来保存棋盘上的棋子值,初始化为0后,下了一颗黑棋就把数组对应的位置的值置为1,下白棋则置为2,同时每下一颗棋子将其放入ArrayList中,方便悔棋。另外,设置一个标志位gameover初始化为1,意思是允许下棋,当分出胜负后,设置gameover为0,就不能再下棋或者悔棋了。具体功能有重新开始,游戏设置,

m0_74895972的博客 218

人机对异五子棋源程序

/* This program is maked by nanchang*//* univercisty student ,The mechine *//**//**//**//**/#include#include#include#include#include#include#include#include#define ESC 0x11b#define LEFT 0x4b00#def

jxnczyp的专栏 997
上一篇: 自己动手编译Windows版的OpenJDK 7
下一篇: html5+webSocket+node.js的页面聊天应用
程序员迈克
博客等级 码龄16年 36粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值