大家好,我是冰河~~
沒錯,正如標題所言,我使用了三天時間開發了一款國民級游戲,說這款游戲是國民級游戲,而且是一款老少皆宜的游戲,一點都不為過,為啥這樣說呢?因為我開發的這款游戲是——中國象棋!
注:專案可以直接運行,可直接用作畢業設計,專案中使用了Java的基礎資料結構和演算法,也可以作為學習Java編程的入門專案,支持播放音樂,建議收藏!
先來說說我為啥要開發這么一款游戲呢?因為我喜歡下象棋嗎?不是,我下象棋的水平很菜的,下象棋講究策略,而且要走一步,想三步那種,而且還要思考對方的走法,而我,這些完全看不出來,所以,如果我跟其他小伙伴下象棋的話,基本就是被虐的那種,那我是為啥要開發這款游戲呢?其實,我開發這款游戲是為了鞏固下自己對于資料結構和演算法的掌握,經過三天的時間,從調研到測驗完成,不僅把這款游戲做出來了,而且還把一些基礎的資料結構和演算法復習了一遍,
好了,說了這么多,我們還是看下這款游戲吧,首先,我們來看下這個游戲專案的專案結構,

這里,我創建的是一個Maven專案,如果對Maven專案部署的小伙伴,可以看下我在CSDN上寫的【精通互聯網工程系列】文章,從圖中可以看出,這款游戲是支持背景音樂的,
接下來,我們看下代碼結構,

對于棋子的實作類和介面的關系如下所示,

接下來,我們再看下Chess介面的核心定義,
package io.binghe.chess.piece;
import java.awt.*;
/**
* @author binghe
* @version 1.0.0
* @description 基礎的棋子介面
*/
public interface Chess {
/**
* 檢查落子是否合法
* @param map 地圖
* @param currentRow 當前棋子的行號
* @param currentColumn 當前棋子的列號
* @param toRow 移動的目標行號
* @param toColumn 移動的目標列號
* @param isBlack 是否為黑方棋子移動 傳true 否則傳false
* @return 如果合法,回傳true, 否則回傳false
*/
boolean check(int[][] map,int currentRow, int currentColumn ,int toRow, int toColumn, boolean isBlack);
/**
* 回傳型別
*/
int getType();
/**
* 回傳名稱
*/
String getName();
/**
* 回傳顏色資訊
*/
Image getImage(boolean isBlack);
}
關于實作類,我們就查看下兵和卒的棋子實作類,其他實作類,小伙伴們自行查看專案原始碼,
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啦,
https://download.csdn.net/download/l1028386804/18150516
也上傳到我的百度網盤啦,
鏈接:https://pan.baidu.com/s/11K0WtGIYoepRj3LsXu73dQ
提取碼:5v8v
好了,今天就到這兒吧,我是冰河,大家有啥問題可以在下方留言,一起交流技術,一起進階,一起進大廠~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280988.html
標籤:其他
