中国象棋游戏开发实战(C#)【二】

rufengit 2017-08-02 06:45:26
【PS:插个广告】 下面的链接是本系列帖子在CSDN学院的视频课程,有兴趣的同学可以移步观看:
http://edu.csdn.net/course/detail/5351

要让你从零实现中国象棋游戏,你会有哪些实现思路呢?
有人会说,网上中国象棋程序一抓一大把,干嘛还要自己从零实现呢?好吧,你要这样说,我表示无语;还有人会说,网上有很多现成的游戏引擎,拿过来直接用就行了,只能说你很懂得拿来主义。我们的这个“麻雀系列”项目的目的,就是希望朋友们能够从零实现一些小而精的项目,锻炼自己的动手能力和设计思想,通过提高自己的抽象能力,来锤炼自身的总体架构能力。
好了,回到本项目中来。用什么方法来把棋盘、棋子绘制到电脑屏幕上呢?有人会提到DirectX、WPF、Unity3D等等高大上的技术,还是那句话,我们会忽略掉任何会是我们分心走神的枝节,在本项目中,我们还是采用最最简单、最古老的GDI+绘图技术。有人肯定会表示不屑了,不可否认,DirectX、WPF、Unity3D等确实可以做到更炫的效果、更高的开发及运行效率,但别忘了我们的项目是“麻雀系列”,我们只关注于我们关心的部分。
既然我们采用的面向对象的程序设计思想,我们就用对象的抽象思维来构建我们的程序世界。大家想想,实现中国象棋,大致需要哪些对象来相互协作呢?中国象棋由一张棋盘、32个棋子组成,很简单吧,我们只需要一个棋盘类,一个棋子类。怎么?难以置信?一个程序只有两个类?对的,你没有看错,我们这个项目在业务逻辑上只有这两个类。也许有人在说,你在忽悠我们吧?一个采用面向对象思想开发的项目,只有两个类,开玩笑呢吧!大家别急,待我慢慢道来。
先让大家看一下本项目的基本类图(图3),大家可以看到,程序整体上只有棋盘类(ChessBoard)和棋子类(ChessPiece)两个类,只不过棋子类又有7个子类,从图3中的英文名称可以看出,这7个子类其实就是中国象棋中的7类棋子,即:车、马、象、士、帅、炮、卒。图3的下部还有几个零散的小类,我们在这里先行略过。

本项目基本构架的大致思路是这样的:
棋盘类负责绘制棋盘、初始化棋子等基本操作,并提供交换红黑双方位置、悔棋、维护玩家走棋顺序、索引坐标和像素坐标的转换、根据坐标查询棋子、检测将军及明将、分析下步可走招法、保存历史走棋记录等功能。
棋子类负责绘制自身到棋盘、移动到目标位置、吃子、删除自身、悔棋等职责,同时提供绘制自己下一步可走位置、判断鼠标是否在自己范围内、维护自己的历史移动轨迹、保存自己吃掉的对方棋子的集合等功能。
程序界面采用传统的WinForm,他的职责很简单,就是负责GDI+绘图,以及鼠标、键盘事件的处理。在这里又会有人表示对WinForm不服,说WinForm十分古老、传统、死板,不如WPF等其他更为先进的界面框架。其实,只要我们想,我们可以轻易的把界面框架改为WPF或其他。还是那句话,我们不会被这些枝节所困扰,我们需要的是专注。
经过上面的分析梳理,整个程序的结构是不是很清晰了?好的架构是好的程序的一大部分,如果你的程序架构没有设计好,在以后的具体编码过程中便会遇到各种逻辑陷阱和代码Bug的纠缠,软件将变得难以维护、难以扩展,一旦需求有变动,那你更是会受到非人的折磨。好了,程序的大概骨架已经搭建完毕,接下来我们就可以着手具体实现了。

...全文
202 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
基于Unity3D多平台网络斗地主的设计与实现毕业设计 目录 前言 1 第1章 概述 2 1.1 系统开发背景 2 1.2 设计的目的 3 1.3 设计的意义 3 第2章 开发环境及相关技术介绍 4 2.1 开发环境介绍 4 2.1.1 Unity3D简介 4 2.1.2 Visual Stdio2010和MonoDevelop 5 2.1.3 Xcode简介 5 2.2 C#语言和Javascript脚本 6 2.2.1 C#语言 6 2.2.2 Javascript语言 6 2.3 IOCP框架简介 7 2.3.1 IOCP内部工作队列图 7 2.3.2 程序实现IOCP模型的基本步骤 8 2.3.3 使用IOCP模型和不使用IOCP模型通讯的对比 8 2.4 本章小结 10 第3章 系统需求分析 10 3.1 用户功能需求分析 10 3.2 系统性能要求 10 3.3 可行性分析 10 第4章 总体方案设计 11 4.1 纸牌设计 11 4.1.1 牌型设计 11 4.1.2 出牌类型(游戏规则)设计 12 4.2 C/S模式 12 4.2.1 基于C/S模式的服务器端设计流程图 12 4.2.2 基于C/S模式的客户端设计流程图 12 4.3 游戏逻辑程序结构 13 4.3.1 数据层 13 4.3.2 控制层 13 4.3.3 显示层 14 4.4 游戏设计流程图 14 4.5 数学建模 15 第5章 详细设计与系统实现 16 5.1 斗地主洗牌算法 16 5.2 斗地主之"排序"算法 16 5.3 基于IOCP的Socket通讯 18 5.4 User对象的设计 19 5.4.1 玩家状态设计 19 5.4.2 玩家的属性以及手牌的操作方法 20 5.5 Table对象的设计 21 5.5.1 桌子状态设计 21 5.5.2 Table的属性及方法 21 5.6 粘包问题 23 5.6.1 TCP和UDP的介绍以及区别 23 5.6.2 粘包介绍及处理 23 第6章 发布和测试 25 6.1 服务器端性能检测 25 6.2 打包发布Android应用 27 6.2.1 导出Android设置 27 6.2.2 真机效果图 28 6.3 打包发布IOS应用 29 6.3.1导出IOS设置 29 6.3.2真机效果图 31 6.4 打包发布Web应用 32 6.4.1 关于UnityWebPlayer的SandBox Security(安全沙盒机制) 32 6.4.2 导出Web设置 32 6.4.3 运行结果 33 6.5 打包发布PC/Linux应用 34 6.6 整体测试效果 34 结束语 40 致谢 42 参考文献 43 附录A 网络斗地主的游戏规则 44 附录B 部分程序代码 47 前言 近年来,随着科技和互联网的飞速发展、智能手机的迅速普以及性能的不断提升,游 戏行业也突飞猛进,游戏已经逐渐成为人们公认的第九种艺术。现在各个平台上的游戏 逐渐涌现,从最初的红白机,到PC机再到XBox平台发展到如今的手机移动平台,从端游 到页游再到手游甚至是体感游戏等表现形式也逐渐丰富,当然成功的也数不胜数。比较 大型的游戏有:反恐精英、星际争霸、使命召唤,生化危机等。当然也涌现了诸多经典 的网络小游戏,比如麻将、拖拉机、中国象棋等。此外手机游戏,如愤怒的小鸟、保卫 萝卜、FlappyBird、切水果、捕鱼达人等也赢得许多人的青睐。这些各种各样形式的游 戏给如今生活在网络时代的人们带来了无限的生活乐趣。 斗地主是一款相当经典的游戏,当然前人也做了不少版本,有移动端,pc端甚至是W eb端的。可能他们在设计的过程中只是正对某一平台然后使用特性的开发技术来开发, 这样的话如果想要实现多平台的设计就需要极大的时间成本和劳力成本。而Unity3D引擎 的问世,最大的解决了这一问题,它能够实现一次开发多平台发布的特点,这也是为什 么Unity3D引擎在短暂的时间里能够发展的如此迅速的原因。将斗地主游戏从单机版到网 络化,使得现实中的多个玩家能够在同一个虚拟房间里面进行对局,并且能够实时的聊 天,同时还不会受到平台的限制,你可以选择pc,web或者是移动端,从而能更好的体验 游戏,娱乐生活。 第1章 概述 1.1 系统开发背景 随着Unity3D引擎的横空出世,游戏开发技术也变得越来越成熟,这款引擎也逐渐改 变了整个游戏圈的开发格局,之前火遍了全球的神庙逃亡就是基于Unity引擎开发的一款 比较成功的手游大作,这也更很好的证明了Unity作为一款游戏引擎还是值得开发者的信 赖。Unity相比较之前大家都熟悉的Unreal虚幻引擎,我认为Unity做的更好,它最值得 人称赞的就是它的跨平台性是其他游戏引擎无法匹敌的,Unity能够做到一次

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧