中國象棋——C++編程設計

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

      中國象棋——C++編程設計

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

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

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

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

接著需要將棋盤和棋子畫出,畫棋子和棋盤時要注意坐標軸,坐標軸錯誤便會導致一些不知名的特性,是游戲無法進行,在從事軟件開發(fā)時這一點尤為重要,具體過程不在展示,運行結果如下:


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

MOSUEMSG m;

m=GetMouseMsg();

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

同時我還在棋盤右側設置了一個方框,來提示該誰下棋。如下圖:


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

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

  這便是我本次的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");