這個程序是為我的學(xué)生做的一個象棋游戲,里面涉及大家有興趣的朋友可以下載來看看
其中繪制了一個虛擬網(wǎng)格,其中網(wǎng)格分布為9X10分布,和正規(guī)象棋布局一樣,即GridX,GridY作為該網(wǎng)格的X,Y坐標(biāo),所有坐標(biāo)點(diǎn)均采用此虛擬網(wǎng)格進(jìn)行轉(zhuǎn)換
其中定義了一個棋子接口,所有棋盤和棋子之間的交互均來自此接口
public interface IChessItem
{
/**//// <summary>
/// 為藍(lán)方還是紅方
/// </summary>
Enums.ChessType type{get;set;}
/**//// <summary>
/// 是否被按下
/// </summary>
bool IsChecked{get;set;}
/**//// <summary>
/// 移動的步長X
/// </summary>
int StepX{get;}
/**//// <summary>
/// 移動的步長Y
/// </summary>
int StepY{get;}
/**//// <summary>
/// 在棋盤網(wǎng)格中的X坐標(biāo)
/// </summary>
int GridX{get;set;}
/**//// <summary>
/// 在棋盤網(wǎng)格中的Y坐標(biāo)
/// </summary>
int GridY{get;set;}
/**//// <summary>
/// 移動棋子
/// </summary>
/// <param name="ChessX">將要移動的網(wǎng)格X坐標(biāo)</param>
/// <param name="ChessY">將要移動的網(wǎng)格Y坐標(biāo)</param>
/// <returns>是否成功移動</returns>
bool MoveItem(int ChessX,int ChessY);
/**//// <summary>
/// 初始化棋子
/// </summary>
void InitItem();
/**//// <summary>
/// 移除棋子,作為被其他棋子吃掉
/// </summary>
void Remove();
}
其中有兩個比較重要的事件 PRivate void cib_Click(object sender, EventArgs e)此事件為棋子被點(diǎn)機(jī)事件,由它來響應(yīng)棋子的選中以及吃別的棋子,名字沒改,呵呵,不好意思
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)此事件做為棋子實現(xiàn)移動
所有棋子移動均來源于IChessItem接口中的
bool MoveItem(int ChessX,int ChessY);
由于是給我學(xué)生看,此程序比較簡單,所以流程也比較簡單.學(xué)習(xí)C#的朋友可以來看一下,呵呵
其中算法麻煩一點(diǎn)的是炮的翻山,馬的蹩腳,象的蹩腳
所有棋子繼承ChessItemBase,其中一些棋子重寫函數(shù)public virtual bool LimitPoint(int ChessX,int ChessY)以實現(xiàn)自己的特殊限制移動,比如炮,馬,象,兵等
Demo Soure http://m.survivalescaperooms.com/Files/KeithDan/Chess.rar
http://m.survivalescaperooms.com/KeithDan/archive/2006/12/06/583472.html
新聞熱點(diǎn)
疑難解答