在现实中,我们有可能手抖不小心点到错误的位置导致棋子下错了,这时就应该有个悔棋的功能,让我们能够回到上一步。当然这个功能也是非常容易实现的,下面我将大致地说一下思路。

思路

创建一个数组用来保存棋盘上所有移动。只需要添加以下代码即可。

int[][] lianbiao = new int[99999][6];// 棋子初始位置,现在的位置,棋子的编号,棋子占的位原来的棋子的编号

当我们点击“悔棋”按钮时,将最后一步撤回,即

  1. 将最后移动的棋子移动到的位置原来的棋子(空位)复原;
  2. 将最后移动的棋子返回前一步的位置。

如此,我们即可实现悔棋的功能。下面说一下具体步骤。

一、悔棋方法

按照刚才的思路写即可

 public void Regret_Chess(){r = -1;if (index > 0) {flag[lianbiao[index - 1][0]][lianbiao[index - 1][1]] = lianbiao[index - 1][4];flag[lianbiao[index - 1][2]][lianbiao[index - 1][3]] = lianbiao[index - 1][5];rechessflag();index--;}}

二、重新开始方法

这个比较简单,只需要将棋盘初始化以下即可。

 public void renew() {flag = new int[][] { { 1, 2, 3, 4, 5, 4, 3, 2, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 6, 0, 0, 0, 0, 0, 6, 0 }, { 7, 0, 7, 0, 7, 0, 7, 0, 7 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 77, 0, 77, 0, 77, 0, 77, 0, 77 }, { 0, 66, 0, 0, 0, 0, 0, 66, 0 },{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 11, 22, 33, 44, 55, 44, 33, 22, 11 } };chessflag = 1;r = -1;x1=0;y1=0;x2=0;y2=0;index=0;beindex=0;chessflag = 1;lianbiao = new int[99999][6];curchess = new int[3];beforechess = new int[3];}

三、按钮的回调函数

 public void actionPerformed(ActionEvent e) {// 获取按钮上的文字action = e.getActionCommand();if (action.equals("开始游戏")) {System.out.println("开始游戏");renew();ui.repaint();} else if (action.equals("重新开始")) {System.out.println("重新开始");renew();ui.repaint();} else if (action.equals("悔棋")) {System.out.println("悔棋");Regret_Chess();ui.repaint();}}

四、保存移动

每次棋子成功移动即可将移动的情况保存在 l i a n b i a o lianbiao lianbiao数组中,先创建一个 s e t L b ( ) setLb() setLb()方法,再将此方法添加到 w a l k ( ) walk() walk()方法中即可。

 // 更新悔棋列表public void setLb() {lianbiao[index][0] = beforechess[0];lianbiao[index][1] = beforechess[1];lianbiao[index][2] = r;lianbiao[index][3] = c;lianbiao[index][4] = beforechess[2];lianbiao[index][5] = flag[r][c];index++;}

更改后的 w a l k ( ) walk() walk()方法如下:

 public void walk(){setLb();// 把此棋子的前后位置保存下来flag[r][c] = beforechess[2];flag[beforechess[0]][beforechess[1]] = 0;ifwin();curchess = new int[3]; // 走完一步后curchess变为0beforechess = new int[3];c = -1;r = -1;rechessflag();ui.repaint();}

至此就完成了悔棋以及重新开始的实现。

关注微信公众号:图灵完备,回复中国象棋即可获得图片及代码资源。

java实现中国象棋4:悔棋及重新开始相关推荐

  1. java实现中国象棋 源代码

    java实现中国象棋 在网上找了很久中国象棋实现的源代码,终于找到了,下面就是源代码. /**中国象棋Java版V3.0*源文件:Chess.java*添加功能:实现了当前棋局的保存*/import ...

  2. java中国象棋网络对弈_基于JAVA的中国象棋对弈系统(附答辩记录)

    基于JAVA的中国象棋对弈系统(附答辩记录)(包含选题审批表,任务书,开题报告,中期报告,毕业论文7100字,程序) 摘  要:本毕业设计采用Java实现中国象棋对弈,可以由两个玩家操作来进行.其图形 ...

  3. java实现中国象棋1:界面的制作

    java实现中国象棋1:界面的制作 前言 界面思路 棋盘 棋子 按钮和Logo 前言 中国象棋的界面主要有三个部分:棋盘,棋子和按钮.棋盘在网上可以找到许多相关的图片,但是棋子和按钮就找不到,或者找到 ...

  4. 视频教程-Java基础中国象棋和网络聊天室Swing开发-Java

    Java基础中国象棋和网络聊天室Swing开发 IT行业资深从业者,7年资深Java高级开发,Java架构师.曾就职银行.电信等行业多家上市公司.担任项目负责人,软件架构师.有丰富的高并发.分布式系统 ...

  5. Java实现中国象棋(联机版)

    Java实现中国象棋(联机版) 该版本的中国象棋,程序有点复杂,是基于网络通信的基础上实现的.由于代码带太长,我这里就只做简单的演示,下面会给出链接地址的. 一.程序结构: 客户端: 服务端: 二.操 ...

  6. java实现中国象棋2:移动棋子

    java实现中国象棋2:移动棋子 我在"java实现中国象棋1"的博客中说了一下如何把棋子画在棋盘上,使用一个flagflagflag二维数组即可实现.因此如果我们想让棋子移动,只 ...

  7. java设计中国象棋_Java课程设计—象棋

    1. 团队名称.团队成员介绍 团队名称:WY 团队成员: 吴慧婷[组长] 201521123094 网络1514 姚佳希 201521123042 网络1512 2 项目git地址 3 项目git提交 ...

  8. 基于java的中国象棋的设计与实现

    技术:Java等 摘要: 中国象棋作为中华民族的文化瑰宝,千百年来常盛不衰,在中国有非常广泛的大众基础,在社会上有广泛的认同,它不仅是人们茶余饭后消遣娱乐的工具,其本身更是具有严密的逻辑和教育功能.随 ...

  9. 基于java的中国象棋的设计与实现毕业设计

    介绍: java,eclipse Java中国象棋项目完成后由Eclipse Java开发环境开发工具,软件使用EclipseJDK所以直接从开放源码下载网站,不是由自己收取的项目参考资料完成独立的文 ...

最新文章

  1. 刚刚,华为重磅宣布:无人驾驶正式上高速!
  2. arm linux 识别新硬盘_Arm发布首款64位实时处理器CortexR82
  3. 使用Fiddler进行Web接口测试
  4. [《孔雀》观后]聪明的孩子提着易碎的灯笼
  5. C语言字符串拼接函数:strcat()
  6. 主体的实践,摘录-----保守还是改革,不是靠思辨的力量,而是靠实践
  7. 详解go语言的array和slice 【二】
  8. 第四届大数据科学与工程国际会议(2019)
  9. web前端从无到有html标签,.NET MVC 扩展 HtmlHelper 从无到有(一)
  10. VS 2005 2008 项目模板丢失问题
  11. DeepMOT: A Differentiable Framework for Training Multiple Object Trackers
  12. 30-40W/年,某银行招聘架构设计岗(地点:上海)
  13. ecshop模板文件说明
  14. IO流案例:字符串反转
  15. 微信公众号第三方平台开发笔记--01创建第三方平台
  16. 关于GitHub Education(GitHub教育认证)认证
  17. 新零售新模式:完整了解「快闪店」运作
  18. 【Linux服务器运行jar包】
  19. 小白学习PYTHON之路---PY文件转换成EXE可执行文件
  20. R语言实现RMF模型

热门文章

  1. 湛江市中心城区交通拥堵综合治理规划
  2. Python+Request【第二章】处理数据源信息
  3. 做网站,赚钱未动,兴趣先行
  4. Collection接口方法
  5. C++虚析构函数和纯虚析构函数
  6. 字符串工具类总结(全)
  7. Windows+QtCreater+Opencv环境配置(成功运行)
  8. IOS安全测试(资源学习笔记)
  9. gtest基础使用10:Google Test自带示例七:通过TestWithParam进行接口测试
  10. 国税局计算机专业知识考哪些,国税系统计算机专业的考试大纲?????~~~~~...