1、Harbin Institute of Technology课程设计报告课程设计报告课程名称: 数据结构与算法课程设计设计题目: 扫雷游戏 院 系: 计算机科学与技术学院 班 级: 10503105 设 计 者: 黄林峰 学 号: 1050310521 指导教师: 李秀坤 设计时间: 2007 年 9 月 8 日 哈尔滨工业大学哈尔滨工业大学课程设计任务书姓 名:黄林峰 院 (系): 计算机科学与技术专 业:计算机科学与技术 班 号: 10503105任务起至日期: 2007 年 8 月 27 日 至 2007 年 9 月 9 日 课程设计题目: 扫雷游戏课程设计要求:1、做一个 N x M
2、的扫雷游戏(如下图) ,每个方格包 含两种状态:关闭(closed)和打开(opened) ,初始化时每个方格都是关闭的,一个打开的方格也会 包含两种状态:一个数字( clue)和一个雷(bomb) 。你可以打开(open)一个方格,如果你打开的是一个 bomb,那么就失败;否则就会打开一个数字,该数字是位于0,8的一个整数,该数字表示其所有邻居方格(neighboring squares)所包含的雷数,应用该信息可以帮助你扫雷。2、能够给出游戏结果(输、赢、剩余的雷数、用掉的时间按秒计)3、游戏界面最好图形化,否则一定要清楚的字符界面。4、合理分配各个操作的按键,以及各方格各种状态如何合理显
3、示。设计任务总述:1、利用二维数组建立一个 N x M 的区间,初始化每个方格关闭。2、用户能够打开一个方格,一个已打开的方格不能再关闭。3、能够标记一个方格,标记方格的含义是对该方格有雷的预测(并不表示真的一定有雷) ,当一个方格标记后该方格不能被打开,只能执行取消 标记的操作,只能在取消后才能打开一个方格。4、对打开的方格进行判断,如果打开的是一个 bomb,则 game over;反之,显示某一数字,即所有邻居方格所包含的雷数5、在游戏界面上,显示输、赢、剩余的雷数以及用掉的时间。工作计划及安排:1、8 月 28 日8 月 31 日对 VC 图形化界面的使用进行学习,初步准备在TC3.0
4、编译环境下,利用 TC 自带的绘图函数做出图形界面。在此期间,参看有关讲解 TC 函数的书籍,对所需函数灵活运用。2、9 月 1 日开始进行编程,绘出图形,写出鼠标控制函数。3、中期检查之前要把主要的图形以及各鼠标控制做出,9 月 3 日之后开始编写完整的程序,调试。4、9 月 8 日之前完成报告的撰写以及答辩 PPT。指导教师签字_年 月 日 数据结构与算法课程设计中期检查结果学号: 10503105 姓名: 黄林峰 指导老师: 李秀坤课程设计题目 扫雷游戏系统总任务描述:本题目做一个 N x M 的扫雷游戏,每个方格包含两种状态:关闭(closed)和打开(opened ),初始化时每个方
5、格都是关闭的,一个打开的方格也会 包含两种状态:一个数字(clue)和一个雷(bomb)。你可以打开( open)一个方格,如果你打开的是一个 bomb,那么就失败;否则就会打开一个数字,该数字是位于0 ,8的一个整数,该数字表示其所有邻居方格(neighboring squares)所包含的雷数。能够打开一个方格,一个已打开的方格不能再关闭。能够标记一个方格,标记方格的含义是 对该方格有雷的预测(并不表示真的一定有雷),当一个方格标记后该方格不能被打开,只能执行取消 标记的操作,只能在取消后才能打开一个方格。能够给出游戏结果。游戏界面图形化。已完成工作描述:1.确定在 Turbo C/C+
6、3.0 的平台上,利用 DOS 系统调用函数和 graphics.h 进行图形化处理。2.查阅相关资料,完成如下模块:InitMouse,Scr,MouseState,Edge,TurnBack,InitArrow,InitCursor,MouseShow,MouseHide,CursorShow,CursorHide,SetRange,GetXY,SetXY,WaitMouse,WaitKey,Prt,Locate。3.程序上,已经完成了利用 random(随机数产生函数)在区域里布雷,若重复布雷,则进行一次判断,再随机一次(用 while 循环实现) ,code 如下:for (i=0;i
7、=0) i+;if (Mineyx+1=MINE)if (Miney+1x=MINE)if (Miney-1x+1=MINE)if (Miney+1x+1=MINE)if (Mineyx+1=MINE)if (Miney+1x=MINE)if (Miney-1x+1=MINE)if (Miney+1x+1=MINE)Mineyx=i;四、标记雷块建立一个二维数组 Turnyx,专门记录用户右键的情况,当用户第一次按右键的时候,修改 Turnyx的值,使之为 2,并把该模块标记为“*” ,同时 Total 的值自加 1;当用户在该模块上第二次点右键的时候,修改 Turnyx的值为 0,并把该模块
8、重新标记为初始的“?” ,同时 Total 的值自减 1。五、游戏结束游戏有四种结束方式:1. 用户按 Esc 键强行退出;2. 用户点击雷块,游戏失败退出 FailExitGame():for (y=0;y10;y+)for (x=0;x10;x+)if (Mineyx=MINE) Prt(x+SX,y+SY,*,14+128);MouseHide();CursorShow();printf(“n Fail!n“);delay(4000);exit(0);3. 用户标注完 10 个雷块,但其中有误标注,游戏失败退出 FailExitGame():for (i=0;i10;i+)if (Min
9、eMarki1Marki0) m+;if (m9) FailExitGame();4. 用户找出所有的 10 个雷块,游戏胜利退出 ExitGame():for (i=0;i10;i+)if (MineMarki1Marki0) m+;if (m9) FailExitGame();MouseHide();CursorShow(); printf(“n OK,Good!n“);delay(4000);exit(1);六、运行结果开始界面:图 3 开始界面用户点击雷块,游戏失败:图 4 点击雷块游戏失败用户标注完 10 个雷块,但其中有误标注,游戏失败:图 5 标注完毕但有错误找出所有的 10 个
10、雷块,游戏胜利:图 6 游戏胜利七、结果分析从最后的执行文件可以看出,本课程设计最终设计的扫雷小游戏基本可以完成了预定目标,有一个遗憾,就是没有记录用户所耗时间的功能。 在TC3.0的环境下,利用窗口图形实现了鼠标控制的要求。在程序判断上没有明显的问题,能够满足初级用户的要求。八、结论本次课程设计完成了扫雷游戏的模拟,并给出了相应的图形化界面。 通过本次课程设计,训练了对二维数组,中断函数等C语言基础知识的应用和掌握,并对图形界面的程序设计有了一定的锻炼。九、参考文献 1.冯博琴,刘路放,精讲多练 C 语言,西安交通大学出版社,1997。2.杨路明,C 语言程序设计教程,北京邮电大学出版社,2003。3.罗伟坚,Visual C+经典游戏程序设计,人民邮电出版社,2004。