中国象棋网络对战版(作者:孙中吕,C/S框架网原创)
中国象棋网络对战版(作者:孙中吕,C/S框架网原创)
中国象棋网络对战版(2011)
扫一扫加作者微信
车马炮相士将对象定义:
Source Code for VIP:
中国象棋网络对战版(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
/// <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
/// <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
扫一扫加作者微信
车马炮相士将对象定义:
Source Code for VIP:
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网