五子棋C#源码,网络对战版---转载--待学习
五子棋C#源码,网络对战版
MessClass msg = new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as MessClass;
switch (msg.sendKind)//获取发送的类型
{
case SendKind.SendConn://连接
{
if (msg.ChessStyle)//判断当前棋子的类型
ChessStyle = true;//黑棋
else
ChessStyle = false;//白棋
CGrow = ChessStyle;//记录当前棋子的类型
CKind = -1;//记录取胜的棋子种类
temMsg.sendKind = SendKind.SendConnHit;//设置消息发送类型为连接成功
temMsg.ChessStyle = ChessStyle;//在发送消息中设置当前棋子的类型
//向远程计算机发送消息
udpSocket1.Send(IPAddress.Parse(FrmClass.ServerIP),
Convert.ToInt32(FrmClass.ClientPort), new
ClassSerializers().SerializeBinary(temMsg).ToArray());
break;
}
case SendKind.SendConnHit://连接成功
{
MessageBox.Show("连接成功");//显示连接成功
button1.Tag = 1;//设置标识
button1.Text = "重新开始";
if (msg.ChessStyle)//如果是黑棋
{
ChessStyle = true;//设置本地的棋子类型为黑棋
DownChess = true;//本地先下
label2.Text = "黑棋";//显示本地为黑棋
}
else
{
ChessStyle = false;//设置本地的棋子类型为白棋
DownChess = false;//本地后下
label2.Text = "白棋";//显示本地为白棋
}
CGrow = ChessStyle;//记录本地的棋子类型
panel2.Visible = false;//隐藏最后落子的标记
break;
}
case SendKind.SendAfresh://重新下棋
{
//清空棋盘中各棋子的位置
for (int i = 0; i < 15; i++)
for (int j = 0; j < 15; j++)
note[i, j] = -1;
Graphics g = panel1.CreateGraphics();//创健panel1控件的Graphics类
g.DrawImage(Properties.Resources.棋盘, 0, 0, panel1.Width, panel1.Height);//清空棋盘
if (msg.ChessStyle)//如果是黑棋
{
ChessStyle = true;//设置本地的棋子类型为黑棋
DownChess = true;//设置本地的棋子类型为黑棋
label2.Text = "黑棋";//显示本地为黑棋
}
else
{
ChessStyle = false;//设置本地的棋子类型为白棋
DownChess = false;//本地后下
label2.Text = "白棋";//显示本地为白棋
}
CGrow = ChessStyle;//记录本地的棋子类型
CKind = -1;//记录取胜的棋子种类
panel2.Visible = false;//隐藏最后落子的标记
break;
}
case SendKind.SendChessman://接收发送的棋子
{
int tem_CS = -1;
Image tem_Image;//实例化Image类
if (msg.Grow)//如果为黑棋
{
tem_CS = 1;//记录棋子类型为黑棋
CGrow = true;//记录当前为黑棋
tem_Image = Properties.Resources.黑棋子;//存储黑棋的图片
}
else
{
tem_CS = 0;//记录棋子类型为白棋
CGrow = false;//记录当前为黑棋
tem_Image = Properties.Resources.白棋子;//存储白棋的图片
}
note[msg.ChessX, msg.ChessY] = tem_CS;//在数组中记录当前棋子的位置
Graphics g = panel1.CreateGraphics();
g.DrawImage(tem_Image, msg.ChessX * 35 + 7, msg.ChessY * 35 + 7, 35, 35);//在棋盘中显示对方下的棋子
panel2.Visible = true;//显示最后落子的标记
panel2.Location = new System.Drawing.Point(msg.ChessX * 35 + 20, msg.ChessY * 35 + 20);//将标记显示在棋子上
DownChess = msg.Walk;//记录对方是否下完棋
CGrow = !msg.Grow;//记录本地的棋子类型
Arithmetic(tem_CS, msg.ChessX, msg.ChessY);//计算对方是否获胜
DownChess = true;//对方已下完棋
break;
}
case SendKind.SendCut://断开连接
{
temMsg.sendKind = SendKind.SendCutHit;//设置发送的类型为断开连接
//向远程计算机发送断开消息
udpSocket1.Send(IPAddress.Parse(FrmClass.ServerIP),
Convert.ToInt32(FrmClass.ClientPort), new
ClassSerializers().SerializeBinary(temMsg).ToArray());
button1.Text = "连接";//显当前可重新连接
button1.Tag = 0;//设置连接标识
break;
}
case SendKind.SendCutHit://断开成功
{
udpSocket1.Active = false;//关闭UDP的连接
Application.Exit();//关闭当前工程
break;
}
FrmClass.ServerIP = textBox1.Text;//记录远程计算机的IP地址
udpSocket1.Active = false;//关闭UDP的连接
udpSocket1.LocalPort = 11001;//设置端口号
udpSocket1.Active = true;//打开UDP的连接
temMsg.sendKind = SendKind.SendConn;//设置发送类型为连接
temMsg.ChessStyle = !ChessStyle;//设置对方的棋子类型
五子棋C#源码,网络对战版---转载--待学习的更多相关文章
- RadioStream应用源码完整版(iphone版和ipad版)
RadioStream应用源码完整版(iphone版和ipad版),这个项目是从那个ios教程网分析过了的,也是一个不错的国外音乐应用的,支持iphone版和ipad版. <ignore_js_ ...
- HTML5与CSS3实例教程(第2版) 附源码 中文pdf扫描版
HTML5和CSS3技术是目前整个网页的基础.<HTML5与CSS3实例教程(第2版)>共分3部分,集中讨论了HTML5和CSS3规范及其技术的使用方法.这一版全面讲解了最新的HTML5和 ...
- 使用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包
Redis 是个高性能的键值数据库,现在日常项目开发过程中,目前个人开发项目基本都会用到 Redis,主要是用来做 缓存 和 分布式锁 的底层支持,个人喜欢用 .NET 技术体系,所以一般部署也是用 ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
- Java源码阅读的真实体会(一种学习思路)【转】
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...
- 【源码分享】iOS-OC版五子棋
五子棋是程序猿比较熟悉的一款小游戏,相信很多人大学时期就用多种语言写过五子棋小游戏,笔者工作闲暇之余,试着用OC实现了一下,在这里给大家分享一下.有不足之处,欢迎大家提供建议和指点! GitHub源码 ...
- .NET MVC插件化开发框架源码(插件功能完善版)
离上次第一次上传源码一个多星期了,在工作之余今天终于把插件管理部门的功能全部完善了,已可用于实际开发,管理界面因为没人帮忙设计,所以有点丑,今天这版算是0.1.0.0吧,后面我会发布很多插件来填充这个 ...
- Underscore源码阅读极简版入门
看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: https://github.com/hanzichi/underscore-an ...
- Chromium源码--网络请求流程分析
转载请注明出处:http://www.cnblogs.com/fangkm/p/3784660.html 本文探讨一下chromium中加载URL的流程,具体来说是从地址栏输入URL地址到通过URLR ...
随机推荐
- echart 重新加载
myechart2.clear(); myechart2.setOption(options[1]);
- 计算机二级-C语言-程序修改题-190114记录-对整型变量进行取余操作可以取得各个位上的值。
//给定程序中fun函数的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新的数放在t中.高位仍在高位,低位仍在低位.例如:当s中的数为7654321时,t中的数为7531. //重难点 ...
- python csv 读写操作
import csv def read_csvList(path="./datasets/test.csv")->list: """return ...
- tomcat 开机自启
d /usr/lib/systemd/system touch tomcat.service chmod 777 tomcat.service vi tomcat.service [Unit]Desc ...
- Java入门笔记 03-面向对象(中)
介绍:这部分内容主要是介绍和总结封装.继承和多态. 一. 封装:把该隐藏的隐藏起来,把该暴露的暴露出来 封装是指将信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现 ...
- 运行时Runtime的API
const char * class_getName(Class cls); 返回类的名称. Class class_getSuperclass(Class cls); 返回类的超类. Class c ...
- UIView的API
- (instancetype)initWithFrame:(CGRect)frame; 使用指定的框架矩形初始化并返回新分配的视图对象. - (instancetype)initWithCoder: ...
- 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP
软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...
- 再次立个flag
今天2019.9.18 从上次迷茫到现在,差不多过去快一年了. 准确点是 442 天 我顺便大概看了一下上次迷茫时期的日志,总觉的不可思议.上次是毕业大概几个月,到目前其实也没多久,但是我变了.. ...
- C++ STL之unordered_map和unordered_set的使⽤
写在最前面,本文摘录于柳神笔记: unordered_map 在头⽂件 #include <unordered_map> 中, unordered_set 在头⽂件 #include &l ...