中国象棋网络对战版(作者:孙中吕,C/S框架网原创)
作者:C/S框架网  发布日期:2011/05/05 22:25:19
  中国象棋网络对战版(作者:孙中吕,C/S框架网原创)

中国象棋网络对战版(作者:孙中吕,C/S框架网原创)



中国象棋网络对战版(2011)

单机版源码由网友提供,花了几天时间将单机版改为网络版对战版,纠正原程序中一些错误,如马蹩脚算法。


本程序涉及到Tcp/IP,GDI图形等相关技术,完全面向对象编程(OOP)

可作为高校C#培训教材,优质学习资源!



程序分为3个模块:

1. ChineseChess.EXE.主程序EXE,如主窗体,连接玩家,系统设置等

2. ChineseChess.Library.DLL 中国象棋程序代码库, 业务逻辑.

3. ChineseChess.Res.DLL 图片资源库


通过分解单机版方便扩展以后的版本,目前[悔棋]功能尚未实现,留点思考空间给网友们自由发挥嘛,
改成网络版本是为了兑现网友"苹果"的承诺!



中国象棋网络对战版本介绍:


1.配置玩家名称.在debug目录下有个player.ini文件,用记事本打开输入名称即可。(不支持中文名称)

2.运行程序,在主窗体点开始按钮,此时启动Tcp/IP Listener(监控程序).

  第一次运行程序会打开连接对家的窗口,你可以关闭连接窗体等待玩家连接你的电脑。
  如远程电脑也点了开始菜单启动监控程序,那么远程电脑会接收到您请求玩游戏的消息。
 
3.通过分解单机版程序,将frmMain窗体内的业务逻辑封装在Game类及GameControlPanel类.
 
4.组装/调整部分代码,将类似业务的代码组合在一起。

5.图片资源完全分离。



中国象棋网络对战版



贴图图片




贴图图片

 

中国象棋网络对战版 - C#源码:


C# Code:

/// <summary>
/// 移动棋子到远程玩家发送来的棋子坐标
/// </summary>
public void MoveChessByRemote(ChessPoint fromPoint, ChessPoint toPoint)
{
   Chess from = this[fromPoint];
   from.MoveTo(toPoint);//移动棋子
   
   _EnableMove = true;
   
   this._currentGame.ShowHistory(from); //显示最后移动的棋子
   
   //移动棋子完成,重画棋盘
   this.DrawChessBoard();
   
   //启动计时器
   this.CurrentGame.ControlPanel.StartTimer(ChessColor.Red);
   this.CurrentGame.ControlPanel.StopTimer(ChessColor.Black);
}


//来源:C/S框架网(www.csframework.com) QQ:1980854898



C# Code:

/// <summary>
/// 移动棋子
/// </summary>
public void MoveChess(ChessPoint point)
{
   try
   {
      Chess chess = this[point];//获取鼠标点的棋子
      
      //之前没有选中棋子
      if (this.CurrentChess == null)
      {
         //当前棋子为空,又点了一个空白点
         if (chess == null) return;
         
         //当前棋子为空,点击了一个不属于自己颜色的棋子
         if (chess.Color != ChessColor.Red) return;
         
         this.CurrentChess = chess;//设置当前棋子
         this.DrawChessBoard();
      }
      else
      {
         //之前选中了一个棋子,现在又点击了之前选中的棋子,退出
         if (chess == this.CurrentChess) return;
         
         //点中了自己的棋子,改变当前棋子到目标棋子
         if (chess != null && chess.Color == this.CurrentChess.Color)
         {
            this.CurrentChess = chess;
         }
         else //点中对方的棋子或目标点为空,移动到目标点或吃掉对方的棋子
         {
            ChessPoint currPoint = this.CurrentChess.CurrentPoint;//保存变量
            
            this.CurrentChess.MoveTo(point);//移动棋子
            
            //如果移动失败
            if (!this.CurrentChess.CurrentPoint.Equals(point)) return;
            
            //移动成功,通知(对方)远程更新棋盘
            this.CurrentGame.SendPointToRemote(currPoint, point);
            
            _EnableMove = false; //禁用棋盘
            
            this._currentGame.ShowHistory(this.CurrentChess); //显示最后移动的棋子
            this.CurrentChess = null;
         }
         
         //移动棋子完成,重画棋盘
         this.DrawChessBoard();
         
         //停止计时器
         this.CurrentGame.ControlPanel.StopTimer(ChessColor.Red);
         this.CurrentGame.ControlPanel.StartTimer(ChessColor.Black);
      }
   }
   catch (GameLoseException ex)
   {
      _currentGame.Victory();
      _currentGame.Gameover();
      Msg.ShowInformation(ex.Message);
   }
}


//来源:C/S框架网(www.csframework.com) QQ:1980854898





C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务



车马炮相士将对象定义:

Source Code for VIP:
点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇