C#拼图游戏编写代码(2)

论坛 期权论坛     
niminba   2021-5-22 16:50   89   0
<p>前言:在<a href="https://www.jb51.net/article/111108.htm" target="_blank">C#拼图游戏编写代码</a>程序设计 之 C#实现《拼图游戏》(上),上传了各模块代码,而在本文中将详细剖析原理,使读者更容易理解并学习,程序有诸多问题,欢迎指出,共同学习成长!</p>
<p style="text-align: center"><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-8d588d282bc86f0f32eeaf9e972aa98b.jpg"></p>
<p><strong>正文:</strong></p>
<p>拼图是一个非常经典的游戏,基本每个人都知道他的玩法,他的开始,运行,结束。那么,当我们想要做拼图的时候如何入手呢?答案是:从现实出发,去描述需求(尽量描述为文档),当我们拥有了全面的需求,就能够提供可靠的策略,从而在代码中实现,最终成为作品!</p>
<p><strong>(一)需求:</strong> (这个需求书写较为潦草,为广大小白定制,按照最最最普通人的思维来,按照参与游戏的流程来)</p>
<p>   1.图片:我们玩拼图 最起码有个图</p>
<p>   2.切割:拼图不是一个图,我们需要把一个整图它切割成N*N的小图</p>
<p>   3.打乱:把这N*N的小图打乱顺序,但是要保证通过游戏规则行走能还原回来</p>
<p>   4.判断:判拼图成功</p>
<p>   5.交互:我们使用哪一种交互方式,这里我选择鼠标点击</p>
<p>  &nbsp;&nbsp;&nbsp; 6.展示原图片完整的缩略图</p>
<p>以上为基本功能,以下为扩展功能</p>
<p>  &nbsp;&nbsp; 7.记录步数:记录完成需要多少步</p>
<p>  &nbsp;&nbsp; 8.更换图片:一个图片玩久了我们是不是可以换一换啊 哈哈</p>
<p>&nbsp;  &nbsp; 9.选择难度:太简单?不要!3*3搞定了有5*5,5*5搞定了有9*9,舍友挑战最高难度 3000多步,心疼我的鼠标TAT</p>
<p><strong>(二)分析:</strong></p>
<p>有了需求,我们就可以分析如何去实现它(把现实需求映射在计算机中),其中包括:</p>
<p>1.开发平台:这里选择C#语言</p>
<p> 1).存储:其中包括我们要存什么?我们用什么结构存?我们反观需求,会发现,有一些需要存储的资源</p>
<p>      图片:使用 Image 对象存储</p>
<p>      单元(原图片切割后的子图像集合):自定义结构体 struct Node ,其中包括Image对象用来存储单元小图片,和用整形存储的编号(切割以后,每个小单元都弄个编号,利于检验游戏是否完成)。</p>
<p>      各单元(原图片切割后的子图像集合):使用二维数组(像拼图,五子棋,消消乐,连连看,俄罗斯方块等平面点阵游戏都可以用他来存储,为什么?因为长得像嘛!)来存储</p>
<p>      难度:使用自定义的枚举类型(简单and普通and困难)存储</p>
<p>      步数:整形变量 int Num存储 </p>
<p>  有了存储,我们就可以去思考模块的划分(<span style="color: #800000">正确的逻辑划分已于扩展,也可以使通信变得更加清晰</span>)并搭建,并实现各模块涉及到的具体算法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先程序的模块分为四个:</p>
<p>  <span style="color: #800000"><strong>逻辑型:</strong></span></p>
<p>    1.拼图类:用于描述拼图</p>
<p>    2.配置类:存储配置变量</p>
<p>  <span style="color: #800000"><strong>交互型:</strong></span></p>
<p>    3.游戏菜单窗口:进行菜单选项</p>
<p>    4.游戏运行窗口:游戏的主要界面</p>
<p style="text-align: center"><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-69d0c342e00896706ac1105011fea778.jpg"></p>
<p>  1.通过游戏菜单可以操纵配置,如难度或图片。</p>
<p>  2.运行窗口可以访问并获得游戏配置,并利用其对应构造拼图对象。</p>
<p>  3.用户通过运行窗口进行交互,间接使拼图对象调用移动方法,获得图案方法</p>
<p>  <span style="color: #800000">看代码的同学,我觉得最有问题的地方,不合理的地方就是把 难度的枚举类型写在了拼图类中,应该写在配置类中,或单独成类,读者们自行更改</span></p>
<div class="blockcode">
<pre class="brush:csharp;">
public enum Diff //游戏难度
{
  simple,//简单
  ordinary,//普通
  difficulty//困难
} </pre>
</div>
<p>我们可以认为,配置类就像数据存储,而拼图类呢作为逻辑处理,菜单和运行窗口作为表现用于交互,我承认这种设计不是很合理,但是在问题规模不够大的时候,过分的考虑设计,会不会使程序变得臃肿?我想一定是有一个度,具体是多少,我不得而知,但我感觉,针对这个程序,实现就好,沉迷设计(套路型),有时得不偿失。(个人不成熟的小观点)</p>
<p><span style="color: #000000"><strong>(三)代码实现:</strong></span></
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP