C#一个象棋游戏程序

这个程序是为我的学生做的一个象棋游戏,里面涉及大家有兴趣的朋友可以下载来看看

其中绘制了一个虚拟网格,其中网格分布为9X10分布,和正规象棋布局一样,即GridX,GridY作为该网格的X,Y坐标,所有坐标点均采用此虚拟网格进行转换

其中定义了一个棋子接口,所有棋盘和棋子之间的交互均来自此接口
None.gif public   interface  IChessItem
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 为蓝方还是红方
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        Enums.ChessType typedot.gif{get;set;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 是否被按下
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        bool IsCheckeddot.gif{get;set;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 移动的步长X
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int StepXdot.gif{get;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 移动的步长Y
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int StepYdot.gif{get;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 在棋盘网格中的X坐标
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int GridXdot.gif{get;set;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 在棋盘网格中的Y坐标
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        int GridYdot.gif{get;set;}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 移动棋子
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="ChessX">将要移动的网格X坐标</param>
InBlock.gif        
/// <param name="ChessY">将要移动的网格Y坐标</param>
ExpandedSubBlockEnd.gif        
/// <returns>是否成功移动</returns>

InBlock.gif        bool MoveItem(int ChessX,int ChessY);
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 初始化棋子
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        void InitItem();
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 移除棋子,作为被其他棋子吃掉
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        void Remove();
ExpandedBlockEnd.gif    }

其中有两个比较重要的事件
None.gif private   void  cib_Click( object  sender, EventArgs e)
此事件为棋子被点机事件,由它来响应棋子的选中以及吃别的棋子,名字没改,呵呵,不好意思

None.gif private   void  Form1_MouseDown( object  sender, System.Windows.Forms.MouseEventArgs e)
此事件做为棋子实现移动

所有棋子移动均来源于IChessItem接口中的
None.gif bool  MoveItem( int  ChessX, int  ChessY);

由于是给我学生看,此程序比较简单,所以流程也比较简单.学习C#的朋友可以来看一下,呵呵
其中算法麻烦一点的是炮的翻山,马的蹩脚,象的蹩脚

所有棋子继承ChessItemBase,其中一些棋子重写函数public virtual bool LimitPoint(int ChessX,int ChessY)以实现自己的特殊限制移动,比如炮,马,象, 兵等

Demo  Soure

转载于:https://www.cnblogs.com/KeithDan/archive/2006/12/06/583472.html

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值