1、 C 程序设计 扫雷游戏 一、一、设计题目:设计题目:扫雷游戏扫雷游戏 二、设计目的二、设计目的 1使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和 方法。 2培养学生综合运用所学知识独立完成课题的能力。 3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理 论,全方位考虑问题等科学技术人员应具有的素质。 4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基 本素质。 5培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经 验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课
2、程 设计能力、书面及口头表达能力进行考核。 三三、设计要求、设计要求 1汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有 自己相对独立的模块,同时要了解其他组员完成的内容。 2查阅相关资料,自学具体课题中涉及到的新知识。 3采用结构化、模块化程序设计方法,功能要完善,界面要美观。 4按要求写出课程设计报告,并于设计结束后 1 周内提交。 一一 概述概述 1) 掌握数组指针的概念及其应用掌握数组指针的概念及其应用 2) 培养团结合作精神培养团结合作精神 2. 课程设计的要求课程设计的要求 要求我们有扎实的 C 语言知识,以及良好的编程习惯,能够熟练的应用循 环,有毅力,还要求我们有
3、较强的合作精神,善于总结。同时还要求我们自学 C 语言作图部分知识。在必要时还要上网查相关资料。 3. 课程设计的主要设计思想课程设计的主要设计思想 扫雷游戏主要用了一个 10 行 10 列的二维数组, 刚开始利用 random 随机布 雷。 每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格 子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围 8 个格子有雷 则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围 3 个格子, 其它边缘的格子显示周围 5 个的状态) ,我们在主函数中用两个 for 语句来判断 周围雷数。我们还加了鼠标处理函数。 如果格子上有雷则调用
4、函 FailExitGame(),显示“Fail!” ,游戏结束。若所 有的雷都标出,且所有的格子都处理过,则调用函数 ExitGame(),显示 “OK,Good!” ,游戏结束。游戏结束后,按任意键出去。 二二 总体方案设计总体方案设计 封面是由图形和动态文字,伴随声音接替出现。程序用了一个 10 行 10 列 的二维数组表示扫雷界面。在游戏中要随机步雷,游戏开始前要统计好每个格 子周围的雷数,游戏开始后可以点击鼠标玩游戏,游戏结束后,按任意键结束 跳出游戏界面。 整体框图 三三 详细设计详细设计 程序流程 主函数 封面 随机布雷 函数 扫雷算法 函数 取鼠标函数 图形和声音函 数 判断是
5、否 胜利 以下是主函数中的一些主要的。 1. 主函数 2. 主要定义常用到的常量,全局变量,有关的函数原形说明。然后随机布雷,统计好 每个格子周围的雷数,画扫雷游戏界面,游戏接受鼠标操作,按任意键结束游戏, 关闭图形系统,程序结束。 BYTE MouseState() /*等待接受鼠标命令函数*/ union REGS regs; regs.x.ax = 3; int86(MOUSE, /*鼠标端口*/ return(regs.x.bx); void MouseShow() /*鼠标显示函数*/ union REGS regs; regs.x.ax = 1; int86(MOUSE, void
6、 MouseHide() /*鼠标隐藏函数*/ union REGS regs; regs.x.ax = 2; int86(MOUSE, BOOL InitMouse() /*取鼠标端口函数*/ union REGS regs; regs.x.ax = 0; int86(MOUSE, return (regs.x.ax); void WaitMouse() int xx,yy; while (MouseState() GetXY( if (xx!=x|yy!=y) SetXY(x,y); void Prt(int x,int y,BYTE ch,BYTE color) /*定义雷区地址入口*/ pokeb(0xb800,y*160+x*2,ch); pokeb(0xb800,y*160+x*2+1,color); BYTE Scr(int x,int y)