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

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

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

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

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

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

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

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


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

MOSUEMSG m;

m=GetMouseMsg();

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

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


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

   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");