关于实现类,我们就查看下兵和卒的棋子实现类,其他实现类,小伙伴们自行查看项目源码。
package io.binghe.chess.piece.impl;
import io.binghe.chess.piece.Chess;
import io.binghe.chess.utils.ImageTools;
import javax.swing.*;
import java.awt.*;
/**
-
@author binghe
-
@version 1.0.0
-
@description 士兵与卒的棋子
*/
public class SoldierChess implements Chess {
@Override
public boolean check(int[][] map, int currentRow, int currentColumn, int toRow, int toColumn, boolean isBlack) {
int columnDistance = toColumn - currentColumn;
int rowDistance = toRow - currentRow;
//黑色棋子
if(isBlack){
//当前棋子未过河,只能向下移动一格
if(currentRow <= 4){
//如果是向下移动一格,则返回true,否则,返回false
return (columnDistance == 0 && rowDistance == 1);
}
//当前棋子已经过河
columnDistance = Math.abs(toColumn - currentColumn);
//如果当前棋子已经过河,则前进一格,可以横向移动
boolean success = (columnDistance == 1 && rowDistance == 0) || (rowDistance == 1 && columnDistance == 0);
//如果不是向下,向左或向右移动,则失败
if(!success){
return false;
}
if(map[toRow][toColumn] == ‘G’){
JOptionPane.showMessageDialog(null, “黑方胜利!”);
}
return true;
}else{ //红色棋子
if(currentRow >= 5){ //红色棋子未过河
//红色棋子未过河,只能向上走
return (columnDistance == 0 && rowDistance == -1);
}
//当前棋子已经过河
columnDistance = Math.abs(toColumn - currentColumn);
//红卒过河后向上、向左、向右移动
boolean success = (columnDistance == 1 && rowDistance == 0) || (rowDistance == -1 && columnDistance == 0);
if(!success){
return false;
}
if(map[toRow][toColumn] == 1000 + ‘G’){
JOptionPane.showMessageDialog(null, “红方胜利!”);
}
return true;
}
}
@Override
public int getType() {
return ‘A’;
}
@Override
public String getName() {
return “卒”;
}
@Override
public Image getImage(boolean isBlack) {
return ImageTools.loadImage(isBlack?“black_soldier.gif”:“red_soldier.gif”);
}
}
其他棋子的实现类,小伙伴们自行查看源代码吧。
接下来,再看看运行效果,下载源代码之后,运行io.binghe.chess.starter
包下的ChessStarter
类,一个完整的棋盘就呈现出来了,注意:需要点击“新游戏”方可开始。
红方胜利。
点击新游戏,又会呈现出新摆好的棋盘。
不玩了,退出游戏。
可以看到,实现了中国象棋的整体功能。
建议小伙伴们自行下载源代码学习,这个项目可用作毕业设计,项目中使用了Java的基础数据结构和算法,也可作为学习Java的入门项目。
说了这么多,该如何下载这款游戏的源码呢?这款游戏的源码我已经上传到CSDN啦。
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
353)]
- 第三个则是并发编程(72个知识点学习)
[外链图片转存中…(img-a04VJxGi-1720108651353)]
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
[外链图片转存中…(img-psTHNO3T-1720108651354)]
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来