中國象棋——C++編程設計
[日期:2025-03-03] | 作者:信息技術 次瀏覽 | [字體:大 中 小] |
中國象棋——C++編程設計
中國象棋是一款很多人都喜歡而且十分考驗智力的游戲。今天我就嘗試用C++來做一個雙人對戰版本的中國象棋游戲。但這款游戲利用C++開發真的是困難重重,為了解決這些問題我從書籍中、網絡上查閱了很多的文章和資料參考進行開發。
具體的設計思路為:1.利用圖像處理頭文件graphics.h生成一個畫布,也就是棋盤;2.通過定義類的方法畫出不同的中國象棋棋子;3.添加棋子的移動組件;4.添加棋子移動的限制組件;5.判斷輸贏的條件。
首先,傳統的C++的程序是一個黑窗口,且無法用鼠標進行操作,這與象棋是違背的,所以以傳統的代碼是行不通的,因此需要使用一個自行導入的頭文件easyx.h,使用其中的
函數initgraphy(800,800,NOCLOSE);加載出一個自定義窗口,接著使用setbkcolor(WHITE)函數設置窗口顏色,再用cleardevice()函數顯示顏色。如圖所示:
接著需要將棋盤和棋子畫出,畫棋子和棋盤時要注意坐標軸,坐標軸錯誤便會導致一些不知名的特性,是游戲無法進行,在從事軟件開發時這一點尤為重要,具體過程不在展示,運行結果如下:
畫出棋子后,便需要添加移動組件,其中最重要的是判斷鼠標的按下,需要用MSOUEMSG類創建一個對象m,并且需要給m復制,代碼如下:
MOSUEMSG m;
m=GetMouseMsg();
并進行一個判斷,當m.msg.uMsg==WM_LBUTTONDOWN時,開始對棋子進行操作具體內容較為復雜不便講解。并且在象棋當中各個棋子的移動會受限,如:兵未過河,只能向前走,過河后左右也可走,但不能后退;馬會被蹩腳等等,這些都是需要添加限制組件的,通過一個函數進行判斷是否可以將棋子下那。
同時我還在棋盤右側設置了一個方框,來提示該誰下棋。如下圖:
而第五點,判斷輸贏是通過兩個二維數組進行判斷,將將和帥的坐標輸入數組,帥為1,將為2,并不斷地通過循環查找數組之中是否有1和2,當1不見或2不見是,便會彈出游戲結束的消息框,不過本次設計未實現兩王相見,游戲結束的判斷。
本軟件還有更多細節值得發現,這兒便不一一介紹了。
這便是我本次的C++程序設計,耗時5天。
核心代碼:
#include<iostream>
#include<graphics.h>
using namespace std;
class CKind {
public:
WCHAR ROOKS = *(_T("車"));
WCHAR KNIGHTS = *_T("馬");
WCHAR ELEPHANTS = *_T("象");
WCHAR MINISTERS = *_T("相");
WCHAR MANDARINS = *_T("士");
WCHAR GUARDS = *_T("仕");
WCHAR KING = *_T("將");
WCHAR GENERALS = *_T("帥");
WCHAR CANNONS = *_T("炮");
WCHAR PAWNS = *_T("卒");
WCHAR SOLDIERS = *_T("兵");
WCHAR PLAYER_1 = *_T("BLACK");
WCHAR PLAYER_2 = *_T("RED");