ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:1.27MB ,
资源ID:24378477      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24378477.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(扫雷程序设计.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

扫雷程序设计.docx

1、扫雷程序设计程序设计报告( 2014 / 2015 学年 第 一 学期)题 目:利用C#开发的扫雷程序专 业 理工科强化班 组员 学号姓名 栗森安 Q13010423 胡涛 Q13010421 指 导 教 师 俞琼 指 导 单 位 南京邮电大学 日 期 2014 年 10 月 24 日 成员分工组员(胡涛)负责编写程序核心代码调试程序组员(栗森安)负责扫雷程序各个界面的设计;编写调用各资源的代码以及界面按钮操作;共同检验核心代码正确性;负责查错,调试程序;评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设

2、计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语 教师签名: 年 月 日评分等级胡涛 Q13010421栗森安 Q13010423备注评分等级共五种:优秀、良好、中等、及格、不及格利用C#开发的扫雷程序一、 实验内容和要求(1)定义一个矩阵,随机产生地雷的分布并由此产生提供给游戏者的数字信息。(2)定义成绩排行榜,记录前五名的用户名及时间。(3)提供菜单功能,定义不同等级的地雷地图供选择。(4)游戏者通过坐标(如1(1,2)、0(3,4)判定第一行第二列位置为地雷,第3行第四列不是地雷)判定是否为地雷,标记地雷位置正确,则正确位置显示符号,如触碰地雷,游戏结束,没有触碰地雷

3、,显示该坐标位置周边地雷分布情况,如果周边有地雷不显示。(5)成绩排行榜以文件形式保存。 (6)鼓励采用Turbo C/C+、MFC等开发工具,实现彩色或图形操作界面。二、 实验目的1掌握窗体设计步骤、窗体调用2学习Form窗体中控件的灵活使用,能基本理解所学代码的基本含义3会使用button、panel、label、textbox、menustrip等按钮,并会使用二维数组的定义与使用二维数组定义雷区,通过enable按钮控制器可使用性4. 能通过Location、size等控制界面的合理大方5. 能使用picturebox、timer等控件的加入,并能通过属性按钮来完成所需要的结果三、 实

4、验任务(1)随机产生地雷的分布并由此产生提供给游戏者的数字信息;(2)定义成绩排行榜,记录用户名和时间;(3)提供菜单功能,定义不同等级的地雷地图供选择;(4)可通过鼠标操作(右键插旗,左键点击格子);(5)成绩排行榜保存为.txt文件;四、 实验内容1. 完成扫雷游戏主界面、自定义界面、游戏成功后登记界面,扫雷排名界面的创建;添加各界面的控件(menustrip、button、label、panel等)2. 对各个button和menustrip插入代码New Gameprivate void nesToolStripMenuItem_Click(object sender, EventAr

5、gs e) button1.Image = Image.FromFile(face.bmp); DelAllMines(); RestMine = MineNum; CostTime = 0; label1.Text = CostTime.ToString(); GamesBegin(); GameInit(); timer1.Enabled = true; Beginnerprivate void beginnerToolStripMenuItem_Click(object sender, EventArgs e) button1.Image = Image.FromFile(face.bm

6、p); beginnerToolStripMenuItem.Checked = true; intermediateToolStripMenuItem.Checked = false; expertToolStripMenuItem.Checked = false; customToolStripMenuItem.Checked = false; DelAllMines(); XNum = 9; YNum = 9; MineNum = 10; RestMine = MineNum; label1.Text = CostTime.ToString(); GamesBegin(); GameIni

7、t(); timer1.Enabled = true; detform(); Intermediateprivate void intermediateToolStripMenuItem_Click(object sender, EventArgs e) button1.Image = Image.FromFile(face.bmp); beginnerToolStripMenuItem.Checked = false; intermediateToolStripMenuItem.Checked = true; expertToolStripMenuItem.Checked = false;

8、customToolStripMenuItem.Checked = false; DelAllMines(); XNum = 16; YNum = 16; MineNum = 40; RestMine = MineNum; label1.Text = CostTime.ToString(); GamesBegin(); GameInit(); timer1.Enabled = true; detform(); Expertprivate void expertToolStripMenuItem_Click(object sender, EventArgs e) button1.Image =

9、Image.FromFile(face.bmp); beginnerToolStripMenuItem.Checked = false; intermediateToolStripMenuItem.Checked = false; expertToolStripMenuItem.Checked = true; customToolStripMenuItem.Checked = false; DelAllMines(); XNum = 30; YNum = 16; MineNum = 99; RestMine = MineNum; label1.Text = CostTime.ToString(

10、); GamesBegin(); GameInit(); timer1.Enabled = true; detform(); Customprivate void customToolStripMenuItem_Click(object sender, EventArgs e) button1.Image = Image.FromFile(face.bmp); beginnerToolStripMenuItem.Checked = false; intermediateToolStripMenuItem.Checked = false; expertToolStripMenuItem.Chec

11、ked = false; customToolStripMenuItem.Checked = true; Form zdy = new Form2(); zdy.ShowDialog(); if (zdy.DialogResult = DialogResult.OK) zdyGames(); 核心代码初始定义private Button, Mines; /定义二维动态数组 用于显示雷区 private int XNum = 9; /初始化累的列数(即为:初级时的行列数) private int YNum = 9; /初始化雷的行数 public static int zdyXNum; /用于自

12、定义中的列数 public static int zdyYNum; /用于自定义中的行数 private int MineNum = 10; /初始化雷的总数 public static int zdyMineNum; /用于记录自定义中的雷数 private int, Turn; /用二维数组赋值:-1 表示这个位置已经翻开;0 表示这个位置没有翻开;1 表示这个位置插上红旗; public static int CostTime = 0; /计量所用的时间 private int StartTime = 0; /初始化时间 private int RestMine = 10; /用于改变等

13、级时载入剩余雷数 private int MineWidth = 20; / 控制雷块的大小删除雷区private void DelAllMines() for (int i = 0; i XNum; i+) for (int j = 0; j YNum; j+) Button n = new Button(); n = (Button)Minesi, j; this.Controls.Remove(Minesi, j); 游戏开始private void GamesBegin() /用于开始游戏,主要是定义雷区 Turn = new intXNum, YNum; /定义新的二维数组 Mine

14、s = new ButtonXNum, YNum; /定义按钮 for (int x = 0; x XNum; x+) for (int y = 0; y YNum; y+) /通过二维数组,逐个定义初始化button按钮 Minesx, y = new Button(); this.Controls.Add(Minesx, y); /增加新按钮 Minesx, y.Left = 20 + MineWidth * x; /定义雷区开始在Form窗体中的左边界 Minesx, y.Top = 72 + MineWidth * y; /定义雷区开始在Form窗体中的上边界 Minesx, y.Wi

15、dth = MineWidth; /定义雷块的宽度 Minesx, y.Height = MineWidth; /定义雷块的高度 Minesx, y.Font = new Font(宋体, 10.5F, FontStyle.Bold, GraphicsUnit.Point, (byte)(134); /定义字体 Minesx, y.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; /定义backgroundimageLayout Minesx, y.Name = Mines + (x + y * XNum).To

16、String(); /定义雷区的名字 Minesx, y.MouseUp += new MouseEventHandler(bt_MouseUp); /定义单击事件 Minesx, y.Visible = true; /控制Mines按钮的可见 detform(); 游戏初始化private void GameInit() RestMine = MineNum; label1.Text = RestMine.ToString(); for (int x = 0; x XNum; x+) for (int y = 0; y YNum; y+) Minesx, y.Text = ; Minesx,

17、 y.Visible = true; Minesx, y.Enabled = true; Minesx, y.Tag = null; Minesx, y.BackgroundImage = null; Turnx, y = 0; 随机布雷private void LayMines() int x, y; Random s = new Random(); for (int i = 0; i MineNum; ) x = s.Next(XNum); y = s.Next(YNum); if (Convert.ToInt16(Minesx, y.Tag) != 1) Minesx, y.Tag =

18、1; i+; label1.Text = MineNum.ToString(); CostTime = 0; label2.Text = StartTime.ToString(); 获取方块周围雷数private void detpicture(int n, int i, int j) /用于调用不同的图片显示所单击按钮周围所剩的雷数 switch (n) case 1: Minesi, j.BackgroundImage = Image.FromFile(1.PNG); break; case 2: Minesi, j.BackgroundImage = Image.FromFile(2.P

19、NG); break; case 3: Minesi, j.BackgroundImage = Image.FromFile(3.PNG); break; case 4: Minesi, j.BackgroundImage = Image.FromFile(4.PNG); break; case 5: Minesi, j.BackgroundImage = Image.FromFile(5.PNG); break; case 6: Minesi, j.BackgroundImage = Image.FromFile(6.PNG); break; case 7: Minesi, j.Backgr

20、oundImage = Image.FromFile(7.PNG); break; case 8: Minesi, j.BackgroundImage = Image.FromFile(8.PNG); break; 载入private void Form1_Load_1(object sender, EventArgs e) string path; path = System.Windows.Forms.Application.StartupPath; if (!File.Exists(path + Beginner.txt) File.Create(path + Beginner.txt)

21、; if (!File.Exists(path + Intermediate.txt) File.Create(path + Intermediate.txt); if (!File.Exists(path + Expert.txt) File.Create(path + Expert.txt); beginnerToolStripMenuItem.Checked = true; Load_Mine(); GameInit(); timer1.Enabled = true; 自定义设置private void zdyGames() /自定义游戏 DelAllMines(); /删除残余雷片 X

22、Num = zdyXNum; /定义雷区的列数 YNum = zdyYNum; /定义雷区的行数 MineNum = zdyMineNum; /定义总雷数 label1.Text = CostTime.ToString(); /用于在开始界面显示所用的时间 GamesBegin(); /开始游戏 GameInit();/游戏初始化 timer1.Enabled = true; /触发计时器 胜利条件private bool Victory() / 检测是否胜利 for (int i = 0; i XNum; i+) for (int j = 0; j YNum; j+) /没翻开且未标示,则未

23、成功 if (Minesi, j.Enabled = true & Turni, j != 1) return false; /不是雷却误标示为雷,则也未成功 if (Convert.ToInt16(Minesi, j.Tag) != 1 & Turni, j = 1) return false; return true; 五、 测试游戏1.游戏打开界面2.排行榜3.自定义界面输入查错3. 游戏胜利界面输入成绩界面六、 测试中发现的问题1. 保存成绩的文本文档需要手动选择,不能在选择游戏难度时自动选择2. 扫雷中的控件不随界面的大小变化而变化 3. 扫雷排行榜可以在外部对保存文件进行修改。(最

24、好保存为.dat格式) 七、 程序设计总结 一个星期的程序设计,虽然很短暂但在小伙伴的帮助下我们还是完成了任务,还记得当初刚拿到题目的时候感觉题目要求都很简单,所以决定用上学期自学的C#窗体弄出一个扫雷的图形化界面(显得高大上一些),可真正到做界面、码代码的时候发现一些事情根本没有想象中那么简单。(1) 首先窗体设计看似分分钟的事情,结果却花了我接近一天的时间,因为界面大小不是一定的,要随玩家选择不同难度而改变大小,所以里面的一些Button、label等控件的位置是一个跟雷区的宽和高有关的函数。(2) 其次是后台函数的书写,这个我不得不说函数个数和难度 远远超出我的想象。特别是Expandm

25、ines()这个函数,根本不知道怎么写,最后还是上网查的,那个递归方法虽然我知道存在但在我还处于婴儿阶段的年龄里至今还未用过这么方法。所以还是那句话,理论不能应用于实际都是浮云。(3) 最后就是调试阶段了,我觉得让这个我有生以来写得最长的代码不报错已经差不多了,后来调试过程中的问题更是让我崩溃。程序跑起来的时候发现数字与周围雷的个数不匹配,于是我仔细看那个GetAroundNum(int R,int C)函数,看了三四遍才发现少了一个“=”号,想想我也是醉了。多简单的一个错误花了我那么长时间。所以码代码不仅需要智慧还需要耐心和细心,那些你不经意间留下的错误有可能毁了你前面所有的努力。All i

26、n all,虽然走了很多弯路但结果还是完美的,程序设计中不仅提高了自己编程的能力而且教会了我很多其它方面的能力,加强了我的查阅资料和与人合作的能力,在团体中也要发挥团体的合作的精神,互相帮助方能共同进步栗森安。最后,还要感谢俞琼老师在这一周的指导,你的信任更是给我们凌晨码代码提供动力和精神。 胡涛 Q13010421一个星期的程序设计,虽然短暂但是收获了很多surprise。刚开始只是准备“抱大腿”。但一周后证明自己不是打酱油的,完全能胜任所负责的部分。一周前,扫雷的程序本来只是脑中早已想到的黑白界面,一周的努力将它变为“亲民”和“绚烂”的视窗界面。所以需要有敢于尝试的决心。当然也要感谢胡涛同

27、学的灵感,否则也想不到设计窗体。作为程序的优化人员,我的职责就是负责窗体各项属性的调整,使它看起来比较舒服。听起来很简单,实际操作却遇到了很多麻烦。例如扫雷排行榜界面曾出现过这样的问题:后台的代码没有问题,但是实际只需要把textbox回拉一下。这样的问题还有不少。 当整个程序主体完工后,我和胡涛的创造(恶搞)精神让我们将整个程序提升了一个境界。扫雷的音效,排行榜分级排名(仍然存在一定的问题,见 六),cheat mod;再一次感受到到程序可以改变世界。这些虽然和程序设计的核心内容不太沾边,但是一个好的程序也是离不开这些的;在这个方面所投入的精力不亚于核心代码。 作为胡同学的队友,纠错也是我的工作,胡同学经常陷入此类困境,这个时候就由略冷静的我来发现一些小错误,= () ;堪称好队友。(上面心得的格式要不要帮他改呢?)。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1