中國象棋——C++編程設(shè)計(jì)

[日期:2025-03-03] 作者:信息技術(shù) 次瀏覽 [字體: ]

      中國象棋——C++編程設(shè)計(jì)

  中國象棋是一款很多人都喜歡而且十分考驗(yàn)智力的游戲。今天我就嘗試用C++來做一個(gè)雙人對(duì)戰(zhàn)版本的中國象棋游戲。但這款游戲利用C++開發(fā)真的是困難重重,為了解決這些問題我從書籍中、網(wǎng)絡(luò)上查閱了很多的文章和資料參考進(jìn)行開發(fā)。

 具體的設(shè)計(jì)思路為:1.利用圖像處理頭文件graphics.h生成一個(gè)畫布,也就是棋盤;2.通過定義類的方法畫出不同的中國象棋棋子;3.添加棋子的移動(dòng)組件;4.添加棋子移動(dòng)的限制組件;5.判斷輸贏的條件。

  首先,傳統(tǒng)的C++的程序是一個(gè)黑窗口,且無法用鼠標(biāo)進(jìn)行操作,這與象棋是違背的,所以以傳統(tǒng)的代碼是行不通的,因此需要使用一個(gè)自行導(dǎo)入的頭文件easyx.h,使用其中的

函數(shù)initgraphy(800,800,NOCLOSE);加載出一個(gè)自定義窗口,接著使用setbkcolor(WHITE)函數(shù)設(shè)置窗口顏色,再用cleardevice()函數(shù)顯示顏色。如圖所示:

接著需要將棋盤和棋子畫出,畫棋子和棋盤時(shí)要注意坐標(biāo)軸,坐標(biāo)軸錯(cuò)誤便會(huì)導(dǎo)致一些不知名的特性,是游戲無法進(jìn)行,在從事軟件開發(fā)時(shí)這一點(diǎn)尤為重要,具體過程不在展示,運(yùn)行結(jié)果如下:


畫出棋子后,便需要添加移動(dòng)組件,其中最重要的是判斷鼠標(biāo)的按下,需要用MSOUEMSG類創(chuàng)建一個(gè)對(duì)象m,并且需要給m復(fù)制,代碼如下:

MOSUEMSG m;

m=GetMouseMsg();

并進(jìn)行一個(gè)判斷,當(dāng)m.msg.uMsg==WM_LBUTTONDOWN時(shí),開始對(duì)棋子進(jìn)行操作具體內(nèi)容較為復(fù)雜不便講解。并且在象棋當(dāng)中各個(gè)棋子的移動(dòng)會(huì)受限,如:兵未過河,只能向前走,過河后左右也可走,但不能后退;馬會(huì)被蹩腳等等,這些都是需要添加限制組件的,通過一個(gè)函數(shù)進(jìn)行判斷是否可以將棋子下那。

同時(shí)我還在棋盤右側(cè)設(shè)置了一個(gè)方框,來提示該誰下棋。如下圖:


而第五點(diǎn),判斷輸贏是通過兩個(gè)二維數(shù)組進(jìn)行判斷,將將和帥的坐標(biāo)輸入數(shù)組,帥為1,將為2,并不斷地通過循環(huán)查找數(shù)組之中是否有1和2,當(dāng)1不見或2不見是,便會(huì)彈出游戲結(jié)束的消息框,不過本次設(shè)計(jì)未實(shí)現(xiàn)兩王相見,游戲結(jié)束的判斷。

本軟件還有更多細(xì)節(jié)值得發(fā)現(xiàn),這兒便不一一介紹了。

  這便是我本次的C++程序設(shè)計(jì),耗時(shí)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");