中國象棋軟體 引擎實現(二)棋局表示

2021-08-15 16:48:11 字數 2226 閱讀 4385

對於棋盤的表示當前比較先進的思想是「位棋盤」。「位棋盤」用於西洋棋非常便捷,因為西洋棋的棋盤正好有64個格仔,可以將乙個棋盤的資訊用乙個64位的變數來表示。其基本思想就是用位上的值是1或0來表示棋子在棋盤相應位置上的存在與否,這樣做的好處是可以通過位操作運算來加快局面評估和著法生成的速度。當用於中國象棋時需要進行拼湊以表示中國象棋棋盤的90個格仔……

由於考慮到本人目前水平精力均著實有限。當前應以實現本程式為首要目標,而不是致力於高質量演算法研究,所以就偷懶採用了傳統的較為簡單的「棋盤陣列」——即用乙個9*10的陣列來儲存棋盤上的資訊,陣列的每個元素儲存棋盤上相應位置是何種棋子。這種表示方法簡單易行。按此方法棋盤的初始情形如下所示:

byte cchessboard[9][10] = ;
其中」0」表示無棋子,」r」表示紅車,」r」表示黑車等等(詳見後面的**),也就是我們給棋盤進行了如下圖所示的編號,並約定紅方棋子總在棋盤的下方。

下面是cchessdef.h的**。該標頭檔案定義了象棋相關的基本資料結構,包括棋子棋盤的表示,行棋的基本結構型別等。我同時使用了兩種方式來為乙個棋子命名,這是為了在有些情況下見名知意而在其它情況下能簡單快捷地表示。

// cchessdef.h       

// 基本型別定義 //

typedef char byte;

typedef struct _point point ; // 棋盤上的點的結構

typedef struct _cchessmove cchessmove ; // 走法結構

// 下棋方定義

const int human = 1; // 人

const int computer = 0; // 電腦

const int red = 1; // 紅方

const int black = 0; // 黑方

// 棋子定義 //

//紅方棋子定義 紅

const byte k = 1; // 帥

const byte a = 2; // 仕

const byte e = 3; // 相

const byte h = 4; // 馬

const byte r = 5; // 車

const byte c = 6; // 炮

const byte p = 7; // 兵

//黑方棋子定義 黑

const byte k = 8; // 將

const byte a = 9; // 士

const byte e = 10; // 象

const byte h = 11; // 馬

const byte r = 12; // 車

const byte c = 13; // 炮

const byte p = 14; // 卒

//紅方棋子定義

#define red_k k

#define red_s a

#define red_x e

#define red_m h

#define red_j r

#define red_p c

#define red_b p

//黑方棋子定義

#define black_k k

#define black_s a

#define black_x e

#define black_m h

#define black_j r

#define black_p c

#define black_b p

//判斷該棋子為哪一方

const int sideofman[15] =;

//此陣列將作為乙個「函式」來使用。類似 int sideofman( byte );

/// 棋局定義//

// 棋盤上棋子分布

byte cchessboard[9][10] = ;

// end of cchessdef.h

中國象棋軟體 引擎實現(七)測試程式

之前我們已經講了實現乙個中國象棋軟體的所有要素,本篇我們只是粗略地建乙個工程再新增一點檔案使得我們能看到程式的運 況如何。在介面完成之前,我先建了乙個win32控制台專案 學生朋友們對這個最熟悉也最容易理解 根據前面所講的我們已經有了cchessdef.h cchessmove.h cchessse...

中國象棋主流象棋引擎分析

象棋旋風與佳佳象棋,從出現以來就廣泛吸引住了人們的眼球。在那個奇兵與大聖逐漸沒落的年代,旋風與佳佳的接連出現為象棋軟體的發展注入了新的活力。兩個軟體都採取了新的演算法,使得棋力相比過去的軟體有了較大幅度的增長,一時間風靡網路。這兩個軟體都開發了很多個版本,直到現在也沒有停息。但新版本採用了非常先進的...

中國象棋局面總數粗略計算

將9 c 9,1 士5 c 5,2 c 5,1 1 無士 16 象7 c 7,2 c 7,1 1 無象 29 兵55 c 50,5 1 無兵 3478761 341055 26235 1485 55 1 3847592 車90 c 90,2 c 90,1 1 無車 4005 90 1 4096 馬9...