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

本文详细介绍了使用Java Swing开发棋类游戏的过程,包括棋子坐标转换、棋子移动规则设定及棋盘绘制。通过重写setLocation方法实现棋子走动限制,利用重写的paintComponent方法设置棋盘背景,同时实现了棋子选中状态切换功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

再来看看演示图吧
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值