象棋程序在大家的帮助下基本完成了,但是有个比较重要的部分就是翻转棋盘和悔棋,感觉悔棋难度比翻转棋盘更大一些,但现在问题是红黑双方交换的时候棋子是过来了,不过棋子上的字也跟着倒了,如下图所示(图片是自己截图翻转的,自己并没有实现棋盘翻转功能),如何设置棋盘翻转和翻转过来后字还不能倒着?以及如何设置悔棋
PS://棋盘是一个背景图片,翻转的时候用PS弄个转过来的一换就行,棋子是用一个二维数组存放的,求大神帮忙

------解决思路----------------------
你需要两个数组来进行翻转,你用一个数组的话,有可能你翻红方棋子的时候吧黑方的棋子清除掉了。一个更好的办法是你的数组根本不用翻转,而是显示的方法翻转,或者说坐标系翻转。
对你原帖的第二个问题,你应该有记录每一步走了什么吧,吧那个倒过来走就可以了。当然如果吃了子的话,要记住吃了啥
------解决思路----------------------
翻转棋盘时,棋盘是不动的只是棋子做中心对称交换
如 八八位的炮交换到88位,当坐标的文字也交换后,依然是八八位
在实际实现时并不需要真实地交换棋子在数组中的位置,只是对显示坐标加一个偏移
悔棋也很简单,你本来就需要记谱的。
悔棋只是依记录从后往前倒过来走,直到开局。想悔几步都可以
------解决思路----------------------
悔棋跟翻转的要点类似。
“棋谱”中数据结构可以是
public class 棋谱
{
public 棋子 q; //枚举值,例如 棋子.红车1
public 位置 起点; //例如 E8
public 位置 终点; //例如 E5
pubic 棋谱 前一步;
}
可见,棋谱是一个“链表结构”,并且以最后一步作为棋谱。当新增加一个步骤时,就创建一个新的棋谱做最新的棋谱,并且把之前的棋谱赋值给新的棋谱对象的“前一步”属性。
这样也就知道了如何悔棋。只要把当前棋谱的相应棋子放回起点,并且将其“前一步”属性重新恢复为当前棋谱。