用Java swing写一个简单象棋程序的心里历程(2)

说干就干,在Data类里面写了两个静态方法,首先就是把真实的坐标转换成简单的0,1,2,3。还有就是把简单的0、1、2、3转成真实的像素坐标。其中每一个象棋子的长宽都是 41 像素。
用Java swing写一个简单象棋程序的心里历程(2)再就是在每一个棋子类里面设置走的规则,有哪些地方不可以走,我通过了重写 setLocation的方法来实现的,再里面加上判断语句就可以。以后在GamePanel里监听鼠标的按下位置后,就用 重写的setLocation方法将棋子移到那个地方。下面是BB(黑象)这个类中重写的setLocation方法。其中CurrentsimX和CurrentsimY代表棋子当前的simple x,y(就是0、1、2),只有当你下一步想要走的setsimX和setsimY和当前的x,y坐标满足一定关系时才会进行move到新的坐标,并把新的坐标设置成当前坐标。(这个规则里还有别象脚和不能过河没实现)
用Java swing写一个简单象棋程序的心里历程(2)另外还设置了个棋盘背景额,但是好像有点小问题,现在不管他。就是通过重写GamePanel里面paintComponent方法实现的。
用Java swing写一个简单象棋程序的心里历程(2)还有当鼠标点击一个棋子后,它的Icon会被设置成选中的形式。这是点击其余的棋子时,前面的那个棋子应该就会重新被设置成未选中的形式。以前并没有这个功能额。为了实现它,重新设置了一个 ChessPiece的类让它去继承JButton,然后让其余的棋子去继承ChessPiece。这样做主要就是因为可以在ChessPiece里面写一些棋子们共有的方法和属性,就比如设置Icon的方法。其实就是把以前的方法搬到ChessPiece里面去了,但是这是很有必要的。因为后面需要在Data设置一个静态对象lastSelectPiece(上一次被选中的棋子),如果把它设置成JButton类的话,它就没有方法让Icon变成被选之前的形式了。这时只有在ChessPiece里写一个改变Icon的方法,然后让lastSelectPiece继承ChessPiece,就可以完成在点击另外一个棋子时,把上一个棋子的选中状态变成非选中状态。(绕晕了,看代码捋一遍就好。下面是BB(黑象)类里的鼠标监听按下时的处理代码,就是实现改变选中状态和设置当前被选中的是哪一个棋子的功能。只有知道了当前选中的是哪一个棋子,后面的走棋功能才可以实现。
用Java swing写一个简单象棋程序的心里历程(2)走棋的话,下图,还是在GamePanel里面的鼠标监听那里,就是改了一下坐标的表达形式,直接用0、1、2这样看着顺眼多了。当然,由于前面重写了setLocation方法,所以棋子不是你想走哪去就可以走哪去的了额。
用Java swing写一个简单象棋程序的心里历程(2)

再来看看演示图吧
用Java swing写一个简单象棋程序的心里历程(2)