摘 要
此次设计的一款扫雷游戏,其功能类似于Windows操作系统自带的扫雷游戏。首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为重要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“递归”这个概念而使其简单化。
本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待完善。
关键词:扫雷、事件、递归
目 录
1引言.... 1
1.1课题背景... 1
1.2本文的主要工作... 1
2 需求分析及开发环境.... 1
2.1系统目标... 1
2.2系统应具备的基本功能... 1
2.3开发环境及工具... 2
3系统总体设计.... 2
3.1基本简介... 2
3.2功能模块设计... 3
4 系统流程与实现.... 5
4.1系统流程... 5
4.2游戏界面介绍... 6
总结.... 9
参考文献.... 9
1引言
1.1课题背景
扫雷是一个相对来说较为简单的小游戏。而且由于自身能力有限的问题,所以对于首次尝试制作小游戏的我是一个比较不错的选题。由于从未制作过任何的软件,为了将自己的所学知识加以运用,制作过程很大上的程度借鉴了别人的思想。但是我希望通过此次制作和学习过程,可以了解软件设计的方法。
1.2本文的主要工作
本文主要工作时相对较为详细的阐述此个小游戏,也就是扫雷的制作过程,遇到的问题,还有解决办法。所采用的工具软件和使用的方法。
2 需求分析及开发环境
2.1系统目标
游戏开始时,系统会在雷区的某些小方块中随机布下若干个地雷。安放好地雷的小方块称之为雷方块,其他的称之为非雷方块。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中有多少雷方块。玩家可以根据这些信息去判断是否可以打开某些方块,并把认为是地雷的方块打上标识。如果某个数字方块周围的地雷全都标记完,可以指向该方块并同时点击鼠标左右键,将其周围剩下的方块挖开。如果编号方块周围地雷没有全部标记,在同时点击鼠标左右键时,其他隐藏或未标记的方块将被按下一次(即闪烁一下)。当玩家将所有地雷找出后,其余的非雷方块区域都已打开,此时游戏胜利。在游戏过程中,一旦错误地打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数超过程序设定,虽然打开了全部其余方块,游戏仍然不会结束。
2.2系统应具备的基本功能
1、从外观上分析:
菜单
方块
地雷数目显示
计时器
有雷标识
无雷标识
红叉显示
胜利画面
失败画面
2、从操作上分析
鼠标事件:
点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止,并显示雷的数目。
点击鼠标右键于未知区域,则显示小红叉,将其置为有雷。在该位置再次点击右键则视为取消设置,红叉消失。
菜单设置:
点击菜单可以选择重置现在的雷区,选择设置可以设置雷区的大小和雷得数目
2.3开发环境及工具
Windos XP系统、Ecliipse 6以上
3系统总体设计
3.1基本简介
(1) 扫雷游戏可以自己设置扫雷区域的大小、地雷的数目。
(2) 设置好后将出现相应的扫雷区域,这时用户可以开始点击雷区。
(3) 用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。
(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。
(5) 扫雷失败后。用户可以选择继续。
3.2功能模块设计
布雷
鼠标事件
鼠标左击事件流程图
(1)点击未知区域。
(2)是地雷,游戏结束。
(3)不是地雷,判断周围地雷数目是否为0,为0则显示空白格子,并拓展周围格子,不为0则显示地雷数
空白格子拓展
4 系统流程与实现
4.1系统流程
4.2游戏界面介绍
布雷方法
privatevoid SetBomb(int count) {
int counter = 0;
int tempint;
while(counter != count) {
tempint = (int) (Math.random()*(this.myRows * this.myColumns));
if(!this.myButton[tempint].GetStatus()) {
this.myButton[tempint].SetStatus(true);
counter++;
}
}
}
监听点击扫雷方法
privatevoid CheckButton(ExtendButton TempButton) {
if(TempButton.GetStatus()) {
this.timer.stop();
JOptionPane.showMessageDialog(null, "You Failed!", "Game",JOptionPane.INFORMATION_MESSAGE);
this.ShowBomb();
int i = JOptionPane.showConfirmDialog(null, "是否要继续?", "消息", JOptionPane.YES_NO_OPTION);
if(JOptionPane.YES_OPTION == i) {
SetExtendButton();
} else {
this.dispose();
}
return;
}
int[] CircleNum = newint[8];
int temp = 0;
if(!TempButton.GetVisited()) {
CircleNum[0] = TempButton.GetPostion() - this.myColumns - 1;
CircleNum[0] = (CircleNum[0] < 0 || (CircleNum[0] + 1) % this.myColumns == 0) ? -1 : CircleNum[0];
CircleNum[1] = TempButton.GetPostion() - this.myColumns;
CircleNum[1] = (CircleNum[1] < 0) ? -1 : CircleNum[1];
CircleNum[2] = TempButton.GetPostion() - this.myColumns + 1;
CircleNum[2] = (CircleNum[2] < 0 ||CircleNum[2] % this.myColumns == 0) ? -1 : CircleNum[2];
CircleNum[3] = TempButton.GetPostion() - 1;
CircleNum[3] = ((CircleNum[3] + 1) % this.myColumns == 0) ? -1 : CircleNum[3];
CircleNum[4] = TempButton.GetPostion() + 1;
CircleNum[4] = (CircleNum[4] % this.myColumns == 0) ? -1 : CircleNum[4];
CircleNum[5] = TempButton.GetPostion() + this.myColumns -1;
CircleNum[5] = (CircleNum[5] > (this.myRows * this.myColumns - 1) || (CircleNum[5] + 1) % this.myColumns == 0) ? -1 : CircleNum[5];
CircleNum[6] = TempButton.GetPostion() + this.myColumns;
CircleNum[6] = (CircleNum[6] > (this.myRows * this.myColumns - 1)) ? -1 : CircleNum[6];
CircleNum[7] = TempButton.GetPostion() + this.myColumns +1;
CircleNum[7] = (CircleNum[7] > (this.myRows * this.myColumns - 1) || CircleNum[7] % this.myColumns == 0) ? -1 : CircleNum[7];
for (int i = 0; i < 8; i++) {
if(CircleNum[i] != -1) {
if(myButton[CircleNum[i]].GetStatus() && !myButton[CircleNum[i]].GetVisited()) {
temp++;
}
}
}
总结
在程序代码基本完成后,经过不断的调试和修改,最后测试本次所设计的扫雷游戏能够正常运行,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如在游戏中可以假如一些声音的提示,在游戏完成和失败的时候弹出一些小的Flash动画,还有就是可以完善一下扫雷英雄榜等等。总的来说本次设计在功能上已经基本达到要求,在其他细节方面有待以后完善。
通过这次比较完整的一个程序的设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基本知识,解决实际问题的能力,同事也提高我查阅文献资料、对程序整体的把握等其他能力水平,并且通过对整体的掌控,对局部的取舍,以及对细节的处理,都使我的能力得到了锻炼,经验得到了丰富。
各种组件的运用,各种算法的应用,各种控件的利用我都是随着设计的不断深入而不断的熟悉并逐步掌握的。和老师以及同学的沟通更使我对程序整体的规划与设计有了新的认识,也对自己提出了新的要求。
提高是有限的但提高也是全面的,正是这一次设计让我积累了许多实际经验,也必然会让我在未来的工作学习中表现出更高的应变能力和理解力。
参考文献
陆迟.Java语言程序设计(第2版).北京:电子工业出版社,2008.12
叶核亚,陈立.Java2程序设计实用教程.北京:电子工业出版社,2003.5
焦玲,王兴玲.Java程序设计.北京:中国铁道出版社,2006.3
贾素玲,王强.Java编程基础.北京:高等教育出版社,2005.4
聂哲,袁梅冷,杨淑萍.Java面向对象程序设计.北京:高等教育出版社,2005.6
第二篇:C语言课程设计报告 扫雷
程序课程设计基础课程设计
扫雷游戏
院系: 计算机科学技术学院计算机科学与技术(师范)
班级:师计09-1
设计者:徐群 杨松 徐春辉杨雷 刘安然
学号:32 24 31 25 04
指导教师:黄绍义
20##年12月25日
目录
1.概 述... 3
1.1.研究的背景及意义... 3
1.2.设计的任务和需要的知识点... 3
1.3.具体完成的设计内容... 4
2.需求分析... 5
2.1.功能需求... 5
2.2.操作方法... 5
3.总体设计... 6
3.1.模块设计... 6
3.2.总体数据结构设计... 6
4.详细设计... 7
4.1.主控模块Main函数... 7
4.2.游戏具体过程流程图... 8
5.程序的调试与测试... 9
5.1.动画与音乐的同步播放... 9
5.2.扫雷的运行... 9
5.3.终止程序... 9
6.总结... 10
7.结束语... 11
8.程序清单... 12
9.参考文献... 34
1.概 述
本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用WIN-TC为主要开发工具,对扫雷游戏进行了需求分析,总体设计,详细设计,最终完成了系统的实现与测试。
1.1.研究的背景及意义
扫雷,是一种集脑力和速度与一体的一种游戏!到能够把扫雷做到能够从简,我们选择这个软件进行开发,虽然结果不尽如人意,但开发此软件能够使我们真正认识到程序的设计绝不仅仅是一个人的情,我们获得不仅仅是一种经历,更是一种对同伴的信任,成功与否是关系到团体,而不是个人,此款软件追求的是智慧的开发和脑力的提升,是一款适合老少都适合玩的游戏!能够广大的占有市场,同时通过设计这款游戏能够深入C语言的开发,和对C语言设计的广泛兴趣,对今后的学习有着指导作用。
同时对C语言的地位有一定的了解。 C语言是国际上广泛流行的,很有发展前途的计算机高级语言。它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件。
C语言是一种面向过程的高级语言,对于计算机专业和相关学科的学生来说,“课程设计基础”是一门非常重要的专业基础课程,对其学习的好坏直接关系到后续课程的学习效果。
1.2.设计的任务和需要的知识点
*课程设计主要完成的任务:
(1)通过编写扫雷游戏程序,掌握结构化,模块化程序设计的思想,培养解决实际问题的能力。
(2)设计好数组元素与地雷的关系。
(3)随机1 ,2 ,3和地雷。
(4)有同步播放的动画,声音效果
*需要掌握和运用的知识点:
(1)数组的应用
(2)按键处理
(3)结构体的应用
(4)图形,音乐和动画的有关知识。
(5)随机函数的使用。
(6)文件的基本操作。
(7)结构化,模块化的设计方法。
1.3.具体完成的设计内容
本次课程设计中,我们主要完成的任务:命令,宏定函数声明,主控模块,动画音乐播放模块,画出游戏开始界面模块,具体游戏过程模块,游戏结束处理模块。
2.需求分析
扫雷一个简单的可以开发智力让人放松的游戏,让游戏者的身心得到娱乐,从而更好的投入到学习和工作中。现代人面临较大的压力,而这样一款游戏能让我们随时随地的享受,起作用是不可估量的!扫雷就像人生之路只,有人真的走好每一步,否则一着不慎满盘皆输。只有这样人们才能实现自己的宏伟蓝图!
虽然现在市面上存在各种各样的游戏版本,可是像扫雷这类的小游戏其市场还是相当大的。因为它能够吸引人更深入,爱不释手,挑战性极强。它的优势在于它的简单易行,无论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人不可能花费大量的时间在娱乐上,大型游戏是行不通的,这样的小游戏刚好迎合了他们的需求。
2.1.功能需求
程序运行后,显示动画,进入游戏界面后,选择难度,易,中,难,三个等级,开始游戏。如果不想玩这一局,单击开局开始新游戏。如果想退出,直接单击游戏当中的下拉菜单“退出”来结束游戏。
2.2.操作方法
(1)进入游戏 单击游戏当中的开局。
(2)游戏界面 游戏界面的左面,难度,开始,退出,中间是开局
(3)游戏操作 在游戏中,游戏者可以用鼠标单击按钮。
(4)游戏结束 显示分数。
3.总体设计
3.1.模块设计
3.2.总体数据结构设计
设计思路:。如何使地雷和数字能够随机出现并且符合扫雷的游戏规则是难点。针对有如下的随机程序来解决这个问题。
for(;i<count;){/*随机埋雷*/
y=rand()%my;
x=rand()%mx;
if(map[y][x]==0){
map[y][x]++;
i++;
4.详细设计
4.1.主控模块Main函数
4.2.游戏具体过程流程图
5.程序的调试与测试
5.1.动画与音乐的同步播放
预期效果:①片头在显示动画的同时播放音乐②按任意键后进入游戏主界面③动画音乐停
实际运行效果:满足①②;③不满足,进入游戏主界面后音乐继续
错误分析:未使用setvect(0x1c,handler);
nosound();语句
修改:在动画播放完后加一条setvect(0x1c,handler);nosound();语句,问题得到解决。
5.2.扫雷的运行
扫雷的运行是一种比较简单的一种方式,当你不幸没过时,游戏界面出现you are dead
当你过关时,游戏界面出现了,you are good
5.3.终止程序
程序的终止有两种方法,第一种方法是直接关闭窗口,第二种方法是直接是游戏的下拉菜单中单击退出。
6.总结
通过两周的课程设计,在我们开发小组五人的共同努力下,终于与完成了五子棋游戏程序的开发任务。该游戏程序实现了用鼠标控制棋子,难度等级,再来一局,结束时处理等功能。该游戏程序具有良好的界面,操作方便,控制准确,容错能力强等功能。
我们设计的五子棋游戏还存在一些缺陷予以改进:
① 在进行游戏时无法播放音乐。应在主函数中再次添加音乐函数。
② 系统智能化水平偏低,游戏偏易。增加控制电脑落子程序复杂程度。
7.结束语
通过扫雷的编程练习思考数据结构的使用,比如定义雷的坐标来控制它出现的位置,用draw()函数来画雷,,用drawmouse()函数画鼠标,使我们更加熟练的应用各种函数,。
对于我们初学者来说,学习编写扫雷的游戏,对我们掌握了解C语言的知识有很大的帮助。我们通过编写实践,还能拓展思路,让我们去寻找需要拿下函数的调用,怎样提高程序的质量等。
在编程时我们碰到了很多的困难,这就需要我们多与别人交流。三人行必有吾师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致,这些都是提高我们编程的注意点。
现在自己也能写游戏了,却没想到的是写游戏并没有想象的那么轻松。在这个程序中我们用了接过化程序设计的思想,一些处理方法基本是编程理论,用到了图形、声音、文件等知识。我们查阅了大量的硬件知识资料,还学了一点汇编,再加上对一些程序细节及一些音乐数据的产生,也让我们忙了好一阵。
当一切都完成以后,除了这个游戏,我们也学到了许多别的东西。首先,我们学会了合作。要以别人的眼光看看问题,也许这样得到的会比各自得到的要多。合作,必然会产生分歧;学会去解决分歧,留下的是更多的友谊。其次,我们学会了分工。分工是为了更好的合作,分工才能提高合作的效率。最后,我们学会了奋斗,我们相信,通过北华大学四年的学习,我们一定能写出更精彩的程序,将来会描绘出更精彩的人生。
在这里,我们要感谢指导课程设计的黄绍义老师,给予我们悉心的指导。老师多次询问编程进程,并为我们指点迷津,精心点拨,这让我们收益无穷。在设计中,我们确实感到了团队合作的力量,这使我们顺利地完成了课程设计任务。
8.程序清单
#include<stdio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
int m_poly[8]={0,0,5,7,0,9,0,0};/*鼠标*/
int m_now_poly[8]={0,0,5,7,0,9,0,0};
int re[10][6];/*储存鼠标经过前的像素颜色*/
int m_s[93-40+1][52-2+1];
int n1=-1,n2=-1;
int hard=1;/*0:易 1:中 2: 难*/
int count=40;/*地雷数量*/
int mx=16,my=16;/*地图宽高*/
char map[16][30];/*0位存放是否有地雷,1有0无,1位存放是否打开,1打开0没有打开,2位表示是否插旗,1有0无*/
int ha_x=320-120,ha_y=240-100;/*游戏栏*/
int dead=0;/*1:死亡 2:生*/
int score=0;
void menu_window();
char sao16S[]={
/* 以下是 '扫' 的 16点阵宋体 字模,32 byte */
0x10,0x00,0x10,0x00,0x11,0xFC,0x10,0x04,
0xFE,0x04,0x10,0x04,0x14,0x04,0x18,0xFC,
0x30,0x04,0xD0,0x04,0x10,0x04,0x10,0x04,
0x11,0xFC,0x50,0x00,0x20,0x00,0x00,0x00,
};
char lei16S[]={
/* 以下是 '雷' 的 16点阵宋体 字模,32 byte */
0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,
0x1D,0x70,0x01,0x00,0x1D,0x70,0x01,0x00,
0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,
};
char you12S[]={
/* 以下是 '游' 的 12点阵宋体 字模,24 byte */
0x91,0x00,0x49,0xE0,0x3E,0x00,0x93,0xE0,
0x5C,0x40,0x54,0x80,0x55,0xE0,0x94,0x80,
0x94,0x80,0xA4,0x80,0x4D,0x80,0x00,0x00,
};
char xi12S[]={
/* 以下是 '戏' 的 12点阵宋体 字模,24 byte */
0x02,0x80,0xF2,0x40,0x12,0x40,0x13,0xE0,
0x9E,0x00,0x52,0x40,0x22,0x80,0x31,0x00,
0x49,0x20,0x42,0xA0,0x8C,0x60,0x00,0x00,
};
char kai12S[]={
/* 以下是 '开' 的 12点阵宋体 字模,24 byte */
0x00,0x40,0x7F,0xE0,0x11,0x00,0x11,0x00,
0x11,0x00,0xFF,0xE0,0x11,0x00,0x11,0x00,
0x11,0x00,0x21,0x00,0xC1,0x00,0x00,0x00,
};
char ju12S[]={
/* 以下是 '局' 的 12点阵宋体 字模,24 byte */
0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x20,0x00,
0x3F,0xE0,0x20,0x20,0x2F,0x20,0x29,0x20,
0x4F,0x20,0x49,0x20,0x80,0xC0,0x00,0x00,
};
char tui12S[]={
/* 以下是 '退' 的 12点阵宋体 字模,24 byte */
0x8F,0xC0,0x48,0x40,0x4F,0xC0,0x08,0x40,
0xCF,0xC0,0x48,0x00,0x4B,0x40,0x48,0x80,
0x4E,0x40,0xB0,0x00,0x8F,0xE0,0x00,0x00,
};
char chu12S[]={
/* 以下是 '出' 的 12点阵宋体 字模,24 byte */
0x04,0x00,0x44,0x40,0x44,0x40,0x44,0x40,
0x7F,0xC0,0x04,0x00,0x44,0x40,0x44,0x40,
0x44,0x40,0x44,0x40,0x7F,0xC0,0x00,0x00,
};
char nan12S[]={
/* 以下是 '难' 的 12点阵宋体 字模,24 byte */
0x02,0x80,0x02,0x80,0xF7,0xE0,0x14,0x80,
0x9F,0xE0,0x54,0x80,0x24,0x80,0x27,0xE0,
0x54,0x80,0x94,0x80,0x07,0xE0,0x00,0x00,
};
char du12S[]={
/* 以下是 '度' 的 12点阵宋体 字模,24 byte */
0x02,0x00,0x7F,0xE0,0x48,0x80,0x7F,0xE0,
0x48,0x80,0x4F,0x80,0x40,0x00,0x5F,0x80,
0x45,0x00,0x87,0x00,0xB8,0xE0,0x00,0x00,
};
char yi12S[]={
/* 以下是 '易' 的 12点阵宋体 字模,24 byte */
0x3F,0x80,0x20,0x80,0x3F,0x80,0x20,0x80,
0x3F,0x80,0x10,0x00,0x3F,0xC0,0xC9,0x40,
0x12,0x40,0x64,0x40,0x19,0x80,0x00,0x00,
};
char zhong12S[]={
/* 以下是 '中' 的 12点阵宋体 字模,24 byte */
0x04,0x00,0x04,0x00,0x7F,0xC0,0x44,0x40,
0x44,0x40,0x44,0x40,0x7F,0xC0,0x04,0x00,
0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,
};
char dash16S[]={
/* 以下是 '-' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char zhi16S[]={
/* 以下是 '制' 的 16点阵宋体 字模,32 byte */
0x24,0x04,0x34,0x04,0x24,0x24,0x3F,0xA4,
0x44,0x24,0x04,0x24,0x7F,0xA4,0x04,0x24,
0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,
0x24,0x84,0x27,0x84,0x05,0x14,0x04,0x08,
};
char zuo16S[]={
/* 以下是 '作' 的 16点阵宋体 字模,32 byte */
0x08,0x80,0x0C,0x80,0x09,0x00,0x13,0xFE,
0x12,0x80,0x34,0x88,0x50,0xFC,0x90,0x80,
0x10,0x80,0x10,0x84,0x10,0xFE,0x10,0x80,
0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,
};
char cheng16S[]={
/* 以下是 '成' 的 16点阵宋体 字模,32 byte */
0x00,0xA0,0x00,0x90,0x00,0x80,0x3F,0xFE,
0x20,0x80,0x20,0x80,0x3E,0x88,0x22,0x8C,
0x22,0x48,0x22,0x50,0x22,0x20,0x2A,0x60,
0x44,0x92,0x41,0x0A,0x86,0x06,0x00,0x02,
};
char yuan16S[]={
/* 以下是 '员' 的 16点阵宋体 字模,32 byte */
0x0F,0xF0,0x08,0x10,0x08,0x10,0x0F,0xF0,
0x00,0x00,0x1F,0xF8,0x10,0x08,0x11,0x08,
0x11,0x08,0x11,0x08,0x11,0x08,0x12,0x88,
0x02,0x40,0x04,0x30,0x08,0x18,0x30,0x10,
};
char mao16S[]={
/* 以下是 ':' 的 16点阵宋体 字模,32 byte */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,
0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
};
char xu16S[]={
/* 以下是 '徐' 的 16点阵宋体 字模,32 byte */
0x10,0x40,0x18,0x40,0x20,0xA0,0x41,0x18,
0x92,0x0E,0x1D,0xF4,0x30,0x40,0x60,0x40,
0xA7,0xFC,0x20,0x40,0x22,0x50,0x23,0x4C,
0x24,0x46,0x28,0x44,0x21,0x40,0x20,0x80,
};
char qun16S[]={
/* 以下是 '群' 的 16点阵宋体 字模,32 byte */
0x00,0x84,0x7E,0x46,0x12,0x28,0xFE,0xFE,
0x12,0x10,0x12,0x10,0x7E,0x7C,0x10,0x10,
0x20,0x10,0x3E,0x10,0x62,0xFE,0xA2,0x10,
0x22,0x10,0x3E,0x10,0x22,0x10,0x00,0x10,
};
char song16S[]={
/* 以下是 '松' 的 16点阵宋体 字模,32 byte */
0x10,0x10,0x10,0x90,0x10,0xD0,0xFE,0x90,
0x10,0x88,0x11,0x08,0x39,0x04,0x36,0x46,
0x54,0x64,0x50,0xC0,0x90,0x80,0x11,0x08,
0x12,0x04,0x17,0xFE,0x10,0x04,0x10,0x00,
0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,
};
char chun16S[]={
/* 以下是 '春' 的 16点阵宋体 字模,32 byte */
0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,
0x1F,0xF8,0x02,0x00,0xFF,0xFE,0x04,0x20,
0x08,0x18,0x3F,0xEE,0xC8,0x24,0x0F,0xE0,
0x08,0x20,0x08,0x20,0x0F,0xE0,0x00,0x00,
};
char hui16S[]={
/* 以下是 '辉' 的 16点阵宋体 字模,32 byte */
0x10,0x00,0x13,0xFE,0x96,0x44,0x58,0x40,
0x51,0xFC,0xFE,0x40,0x28,0xA0,0x28,0xA0,
0x29,0xFC,0x28,0x20,0x28,0x20,0x2B,0xFE,
0x4C,0x20,0x48,0x20,0x80,0x20,0x00,0x20,
};
char yang16S[]={
/* 以下是 '杨' 的 16点阵宋体 字模,32 byte */
0x10,0x00,0x13,0xF8,0x10,0x10,0xFE,0x20,
0x10,0x40,0x10,0x80,0x39,0xFC,0x34,0x54,
0x54,0x94,0x50,0xA4,0x91,0x24,0x12,0x44,
0x10,0x84,0x11,0x04,0x10,0x14,0x10,0x08,
};
void drawmat(char *mat,int matsize,int x,int y,int color){/*点阵字显示函数*/
int i,j,k,n;
n=(matsize-1)/8+1;/*有几个字符位*/
for(j=0;j<matsize;j++)/*行*/
for(i=0;i<n;i++)
for(k=0;k<8;k++)
if(mat[j*n+i]&0x80>>k)
putpixel(x+i*8+k,y+j,color);
}
void game_over(){
int x,y;
setcolor(BLACK);
for(y=0;y<my;y++)
for(x=0;x<mx;x++)
if(map[y][x]&1){
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(ha_x+2+x*10,ha_y+2+y*10,ha_x+2+x*10+8,ha_y+2+y*10+8);
circle(ha_x+2+x*10+4,ha_y+2+y*10+4,3);/*地雷图*/
setfillstyle(SOLID_FILL,BLACK);
floodfill(ha_x+2+x*10+4,ha_y+2+y*10+4,BLACK);/*黑色填充*/
}
}
void win()
{int i,j;
int fr[]={659,659,659,659,659,659,784,523,587,659,698,698,698,659,659,659,659,587,587,523,587,784,659,659,659,659,659,659,659,784,523,587,659,698,698,698,698,659,659,659,659,784,784,698,587,523,784,330,294,262,247,196,330,294,262,196,196,330,294,220,220.349,330,294,392,392,392,392,440,392,349,294,262};
int tim[]={4,4,2,4,2,4,2,4,4,4,2,8,2,2,2,4,2,4,2,4,4,2,4,2,4,4,2,4,2,4};
int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver);
setviewport(0,0,639,479,0);
settextstyle(0,0,3);
setcolor(WHITE);
outtextxy(150,320,"good!!~~~~");/****************good!!~~~~****************/
setcolor(GREEN);
outtextxy(149,320,"good!!~~~~");/****************good!!~~~~****************/
setbkcolor(BLACK);
setcolor(YELLOW);
ellipse(200,400,0,360,30,30);
setfillstyle(SOLID_FILL,YELLOW);
floodfill(200,400,YELLOW);
setcolor(BLACK);
line(177,395,185,385);
setcolor(BLACK);
line(185,385,193,395);
setcolor(BLACK);
line(207,395,215,385);
setcolor(BLACK);
line(215,385,223,395);
setcolor(BLACK);
arc(200,415,0,360,7);
setcolor(YELLOW);
arc(200,415,0,180,7);
getch();
{
for(i=0;i<=40;i++)
{sound(fr[i]);
delay(tim[i]*12000000000);
nosound();}
}
}
void box_open(int x,int y,int control){/*方格被打开,control用于判断是否是鼠标点击打开,1表示鼠标点击,0表示自动*/
int sum=0;
char num[2];
if(map[y][x]>>2&1 && control)return;/*标记过,点击无效*/
if(map[y][x]>>1&1)return;/*检查是否被打开过*/
map[y][x]+=1<<1;
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(ha_x+2+x*10,ha_y+2+y*10,ha_x+2+x*10+8,ha_y+2+y*10+8);
if(map[y][x]&1==1){/*踩到地雷,游戏失败*/
game_over();
dead=1;/*死亡*/
{
setviewport(0,0,639,479,0);
settextstyle(0,0,3);
setcolor(WHITE);
outtextxy(100,320,"Sorry,you die!~~~");/**good!!~~~~****************/
setcolor(GREEN);
outtextxy(99,320,"Sorry,you die!~~~");/****************good!!~~~~****************/
}
{ int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver);
setbkcolor(BLACK);
setcolor(YELLOW);
ellipse(200,400,0,360,30,30);
setfillstyle(SOLID_FILL,YELLOW);
floodfill(200,400,YELLOW);
setcolor(BLACK);
line(177,395,185,385);
setcolor(BLACK);
line(185,385,193,395);
setcolor(BLACK);
line(207,395,215,385);
setcolor(BLACK);
line(215,385,223,395);
setcolor(BLACK);
arc(200,415,0,180,7);
getch();
{int i,j;
int a[40]={262,294,330,262,262.294,330,262,0,330,349,
392,0,330,349,392,0,392,440,392,349,330,262,0,392,440,
392,440,392,349,330,262,0,294,196,262,0,294,196,262};
int b[45]={250,250,250,250,250,250,250,250,100,250,250,250,500,
125,250,250,500,100,125,125,125,125,250,250,0,125,125,125,
125,250,250,100,250,250,500,100,250,250,500};
for(i=0;i<=40;i++)
{sound(a[i]);
delay(b[i]*1000);
nosound();}
}}
return; }
score++;/*加分*/
if(score==mx*my-count){
win();
dead=1;
return;
}
if(x!=0)sum+=map[y][x-1]&1;
if(x!=mx-1)sum+=map[y][x+1]&1;
if(y!=0)sum+=map[y-1][x]&1;
if(y!=my-1)sum+=map[y+1][x]&1;
if(x!=0 && y!=0)sum+=map[y-1][x-1]&1;
if(x!=mx-1 && y!=0)sum+=map[y-1][x+1]&1;
if(x!=mx-1 && y!=my-1)sum+=map[y+1][x+1]&1;
if(x!=0 && y!=my-1)sum+=map[y+1][x-1]&1;
settextstyle(0,0,1);
if(sum!=0){
sprintf(num,"%d",sum);
setcolor(sum%6);/*确定颜色*/
outtextxy(ha_x+2+x*10+1,ha_y+2+y*10+1,num);/*显示周围雷数*/
}
else{
if(x!=0 && !map[y][x-1]&1)box_open(x-1,y,0);/*0表示自动打开*/
if(x!=mx-1 && !map[y][x+1]&1)box_open(x+1,y,0);
if(y!=0 && !map[y-1][x]&1)box_open(x,y-1,0);
if(y!=my-1 && !map[y+1][x]&1)box_open(x,y+1,0);
if(x!=0 && y!=0 && !map[y-1][x-1]&1)box_open(x-1,y-1,0);
if(x!=mx-1 && y!=0 && !map[y-1][x+1]&1)box_open(x+1,y-1,0);
if(x!=mx-1 && y!=my-1 && !map[y+1][x+1])box_open(x+1,y+1,0);
if(x!=0 && y!=my-1 && !map[y+1][x-1])box_open(x-1,y+1,0);
}
}
void box_mark(int x,int y){/*给小方块插旗标记*/
int nx=ha_x+2+x*10,ny=ha_y+2+y*10;
if(map[y][x]>>1&1)return;/*已经打开*/
if(map[y][x]>>2&1)map[y][x]-=1<<2;/*有旗拔旗*/
else map[y][x]+=1<<2;/*插旗*/
setfillstyle(SOLID_FILL,LIGHTGRAY);
setcolor(WHITE);
line(ha_x+2+x*10,ha_y+2+y*10,ha_x+2+x*10+8,ha_y+2+y*10);/*一横,使之有立体感*/
line(ha_x+2+x*10,ha_y+2+y*10+1,ha_x+2+x*10,ha_y+2+y*10+8);/*一竖*/
bar(ha_x+2+x*10+1,ha_y+2+y*10+1,ha_x+2+x*10+8,ha_y+2+y*10+8);
if(map[y][x]>>2&1){
setcolor(RED); /*绘制小旗帜*/
line(nx+3,ny+2,nx+7,ny+4);
line(nx+3,ny+4,nx+7,ny+4);
setcolor(BLACK);
line(nx+3,ny+2,nx+3,ny+7);
line(nx+2,ny+7,nx+4,ny+7);
}
}
void map_window(){/*地图绘制*/
int x,y;
setfillstyle(LINE_FILL,BLUE);/*清除屏幕*/
bar(1,40,638,478);/*清除屏幕*/
setcolor(WHITE);
rectangle(ha_x,ha_y,ha_x+1+mx*10+1,ha_y+1+my*10+1);
setfillstyle(SOLID_FILL,DARKGRAY);
bar(ha_x+1,ha_y+1,ha_x+1+mx*10,ha_y+1+my*10);/*扫雷部分背景*/
rectangle(ha_x,ha_y-30,ha_x+1+mx*10+1,ha_y);/*扫雷上部分*/
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(ha_x+1,ha_y-29,ha_x+1+mx*10,ha_y-1);/*扫雷上部分*/
setfillstyle(SOLID_FILL,LIGHTGRAY);/*绘制开局框--*/
setcolor(WHITE);
line((ha_x+ha_x+2+mx*10)/2-16,(ha_y+ha_y-30)/2-9,(ha_x+ha_x+2+mx*10)/2-16,(ha_y+ha_y-30)/2+8);/*竖*/
line((ha_x+ha_x+2+mx*10)/2-15,(ha_y+ha_y-30)/2-9,(ha_x+ha_x+2+mx*10)/2+15,(ha_y+ha_y-30)/2-9);/*横*/
setcolor(DARKGRAY);
line((ha_x+ha_x+2+mx*10)/2+16,(ha_y+ha_y-30)/2-9,(ha_x+ha_x+2+mx*10)/2+16,(ha_y+ha_y-30)/2+9);/*竖*/
line((ha_x+ha_x+2+mx*10)/2-15,(ha_y+ha_y-30)/2+9,(ha_x+ha_x+2+mx*10)/2+15,(ha_y+ha_y-30)/2+9);/*横*/
bar((ha_x+ha_x+2+mx*10)/2-15,(ha_y+ha_y-30)/2-8,(ha_x+ha_x+2+mx*10)/2+15,(ha_y+ha_y-30)/2+8);/*--绘制开局框*/
drawmat(kai12S,12,(ha_x+ha_x+2+mx*10)/2-13,(ha_y+ha_y-30)/2-6,BLACK);
drawmat(ju12S,12,(ha_x+ha_x+2+mx*10)/2+1,(ha_y+ha_y-30)/2-6,BLACK);
setfillstyle(SOLID_FILL,LIGHTGRAY);
for(y=0;y<my;y++)/*显示小方格*/
for(x=0;x<mx;x++){
setcolor(WHITE);
line(ha_x+2+x*10,ha_y+2+y*10,ha_x+2+x*10+8,ha_y+2+y*10);/*一横,使之有立体感*/
line(ha_x+2+x*10,ha_y+2+y*10+1,ha_x+2+x*10,ha_y+2+y*10+8);/*一竖*/
/*setcolor(DARKGRAY);
line(ha_x+2+x*10,ha_y+2+y*10+8,ha_x+2+x*10+8,ha_y+2+y*10+8); 一横
line(ha_x+2+x*10+8,ha_y+2+y*10+1,ha_x+2+x*10+8,ha_y+2+y*10+8); 一竖
bar(ha_x+2+x*10+1,ha_y+2+y*10+1,ha_x+2+x*10+7,ha_y+2+y*10+7);
*/
bar(ha_x+2+x*10+1,ha_y+2+y*10+1,ha_x+2+x*10+8,ha_y+2+y*10+8);
}
}
void initmap(){/*地图初始化*/
int i=0,x,y;
dead=0;
score=0;
switch(hard){
case 0:
mx=9;
my=9;
count=10;
break;
case 1:
mx=16;
my=16;
count=40;
break;
case 2:
mx=30;
my=16;
count=99;
break;
}
for(y=0;y<my;y++)/*地图数组设为0*/
for(x=0;x<mx;x++)
map[y][x]=0;
for(;i<count;){/*随机埋雷*/
y=rand()%my;
x=rand()%mx;
if(map[y][x]==0){
map[y][x]++;
i++;
}
}
map_window();
}
void m_save(){/*储存menu挡住的部分*/
int i,j;
for(j=40;j<=93;j++)
for(i=2;i<=52;i++)
m_s[j-40][i-2]=getpixel(i,j);
}
void m_load(){/*恢复menu挡住的部分*/
int i,j;
for(j=40;j<=93;j++)
for(i=2;i<=52;i++)
putpixel(i,j,m_s[j-40][i-2]);
}
void ha_mouse(){
int i,j,k,x = -1,y = -1,flag = 0,color;
int tx1,ty1,tx2,ty2,tbx;
int new_x = ha_x,new_y = ha_y;
/*char tgraph[193][303],tg=0;*/
union REGS inregs,outregs,regs2;
inregs.x.ax = 0x03;
while (!bioskey(1)){
int86(0x33,&inregs,&outregs);/*调用鼠标中断*/
regs2.x.ax = 0x06;
regs2.x.bx = 0x00;
int86(0x33,®s2,®s2);/*CX=水平位置(最后释放时),DX=垂直位置(最后释放时)*/
tx2 = regs2.x.cx;
ty2 = regs2.x.dx;
if (x != outregs.x.cx || y != outregs.x.dx || tbx != outregs.x.bx){
/*printf("%d",outregs.x.bx);*/
if (flag){
for (j = 0; j < 10; j++)/*恢复上次鼠标一定范围内的像素颜色*/
for(i = 0; i < 6; i++)
putpixel(x+i,y+j,re[j][i]);
}
flag=1;
/*====================================================================================================================扩充功能部分*/
if(outregs.x.bx & 0x01){/*鼠标左键按下------------------------鼠标点击判断*/
if(outregs.x.cx>=639-19 && outregs.x.cx<=638 && outregs.x.dx>=1 && outregs.x.dx<=18)exit(0);/*关闭按钮*/
else if(outregs.x.cx>=1 && outregs.x.cx<=32 && outregs.x.dx>=21 && outregs.x.dx<=38){/*主菜单-游戏*/
if(n1==-1)m_save();
else if(n1==1)m_load();
n1=0;
n2=-1;
menu_window();
}
else if(outregs.x.cx>=33 && outregs.x.cx<=64 && outregs.x.dx>=21 && outregs.x.dx<=38){/*主菜单-难度*/
if(n1==-1)m_save();
else if(n1==0)m_load();
n1=1;
n2=-1;
menu_window();
}
else if(n1==0 && n2==1)exit(0);
/*开局*/
else if((n1==0 && n2==0) || (outregs.x.cx>=(ha_x+ha_x+2+mx*10)/2-16 && outregs.x.cx<=(ha_x+ha_x+2+mx*10)/2+16 && outregs.x.dx>=(ha_y+ha_y-30)/2-9 && outregs.x.dx<=(ha_y+ha_y-30)/2+8)){/*开局*/
dead=0;/*生*/
n1=-1;
m_load();
initmap();
}
else if(n1==1 && n2==0){/*易*/
dead=0;/*生*/
n1=-1;
m_load();
hard=0;
initmap();
}
else if(n1==1 && n2==1){/*中*/
dead=0;/*生*/
n1=-1;
m_load();
hard=1;
initmap();
}
else if(n1==1 && n2==2){/*难*/
dead=0;/*生*/
n1=-1;
m_load();
hard=2;
initmap();
}
/*
else if(outregs.x.cx>=new_x && outregs.x.cx<=new_x+1+mx*10+1 && outregs.x.dx>+new_y-30 && outregs.x.dx<=new_y){ 拖动扫雷图标扫雷
if(tg==0){ 扫雷部分存储
tg++;
for(j=0;j<=1+my*10+1+30;j++)
for(i=0;i<=mx*10+2;i++)
tgraph[j][i]=getpixel(ha_x+i,ha_y+j-30);
}
if(tbx&1 && x>=new_x && x<=new_x+1+mx*10+1 && y>=new_y-30 && y<=new_y){
setcolor(YELLOW);
rectangle(new_x,new_y-29,new_x+1+mx*10,new_y+1+my*10);
rectangle(new_x,new_y-30,new_x+1+mx*10+1,new_y+1+my*10+1);
new_x+=outregs.x.cx-x;
new_y+=outregs.x.dx-y;
tg=2;
}
else if(tg=2 && x>=new_x && x<=new_x+1+mx*10+1 && y>=new_y-30 && y<=new_y){
tg=0;
ha_x=new_x;
ha_y=new_y;
for(j=0;j<=1+my*10+1+30;j++)
for(i=0;i<=mx*10+2;i++)
putpixel(ha_x+i,ha_y+j-30,tgraph[j][i]);
}
}
*/
else{/*没有点击到按钮*/
if(n1!=-1)m_load();
n1=n2=-1;
menu_window();
}
}
if(n1==0 && outregs.x.cx>=2 && outregs.x.cx<=31 && outregs.x.dx>=40 && outregs.x.dx<=75){/*游戏下级菜单操作*/
n2=(outregs.x.dx-40)/18;
menu_window();
}
if(n1==1 && outregs.x.cx>=34 && outregs.x.cx<=52 && outregs.x.dx>=40 && outregs.x.dx<=93){/*难度下级菜单操作*/
n2=(outregs.x.dx-40)/18;
menu_window();
}
/*-----------------------------左键点击控制部分*/
if(tx2-ha_x-2>=0 && ty2-ha_y-2>=0 && (tx2-ha_x-2)/10>=0 && (tx2-ha_x-2)/10<=mx-1 && (ty2-ha_y-2)/10>=0 && (ty2-ha_y-2)/10<=my-1 && dead==0 && (tx1!=tx2 || ty1!=ty2)){
box_open((tx2-ha_x-2)/10,(ty2-ha_y-2)/10,1);
}
if(outregs.x.bx>>1 & 0x01 && dead==0){/*鼠标右键按下------------------------鼠标点击判断*/
if((outregs.x.cx-ha_x-2)/10>=0 && (outregs.x.cx-ha_x-2)/10<=mx-1 && (outregs.x.dx-ha_y-2)/10>=0 && (outregs.x.dx-ha_y-2)/10<=my-1){
box_mark((outregs.x.cx-ha_x-2)/10,(outregs.x.dx-ha_y-2)/10);/*插旗标记*/
}
}
/*================================================================================================================================*/
for(j=0;j<10;j++)/*储存鼠标一定范围内的像素颜色*/
for(i=0;i<6;i++)
re[j][i]=getpixel(outregs.x.cx+i,outregs.x.dx+j);
for(i=0;i<8;i++){/*确定鼠标各顶点位置*/
m_now_poly[i]=m_poly[i]+outregs.x.cx;
i++;
m_now_poly[i]=m_poly[i]+outregs.x.dx;
}
setcolor(GREEN);
drawpoly(4,m_now_poly);/*显示鼠标框架*/
setfillstyle(SOLID_FILL,WHITE);/*填充鼠标,注意以白色填充,当遇到白色背景时会不能完全填充*/
floodfill(m_now_poly[0]+1,m_now_poly[1]+5,GREEN); /*绿色*/
setcolor(LIGHTRED);
drawpoly(4,m_now_poly);/*显示鼠标框架*/
}
x=outregs.x.cx;/*存鼠标坐标,供恢复使用*/
y=outregs.x.dx;
tbx=outregs.x.bx;
tx1=tx2;/*暂存鼠标释放的位置*/
ty1=ty2;
}
}
void full_window(){/*整体部分,包括标题栏的绘制*/
setbkcolor(BLACK);
setcolor(WHITE);
line(0,20,639,20);
rectangle(0,0,639,479);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(1,1,638,19);
drawmat(sao16S,16,7,4,BLACK);/*标题部分-汉字*/
drawmat(lei16S,16,23,4,BLACK);
drawmat(dash16S,16,42,4,RED);
drawmat(zhi16S,16,60,4,MAGENTA);
drawmat(zuo16S,16,75,4,MAGENTA);
drawmat(cheng16S,16,90,4,MAGENTA);
drawmat(yuan16S,16,105,4,MAGENTA);
drawmat(mao16S,16,120,4,MAGENTA);
drawmat(xu16S,16,135,4,BLUE);
drawmat(chun16S,16,150,4,BLUE);
drawmat(hui16S,16,165,4,BLUE);
drawmat(xu16S,16,190,4,BLUE);
drawmat(qun16S,16,205,4,BLUE);
drawmat(yang16S,16,230,4,BLUE);
drawmat(lei16S,16,245,4,BLUE);
drawmat(yang16S,16,270,4,BLUE);
drawmat(song16S,16,285,4,BLUE);
setfillstyle(SOLID_FILL,RED);/*显示关闭图标*/
bar(639-19,1,638,18);
setcolor(WHITE);
setlinestyle(0,0,3);/*X*/
line(639-19+2,1+2,638-2,18-2);
line(639-19+2,18-2,638-2,1+2);
setlinestyle(0,0,1);
}
void menu_window(){/*------------------------------------------菜单栏*/
int i;
setcolor(BLACK);
for(i=0;i<2;i++){/*主菜单*/
if(i==n1)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(32*i+1,21,32*(i+1),38);
}
drawmat(you12S,12,4,21+3,BLACK);/*游戏*/
drawmat(xi12S,12,4+12+2,21+3,BLACK);
drawmat(nan12S,12,32+4,21+3,BLACK);/*难度*/
drawmat(du12S,12,32+4+12+2,21+3,BLACK);
if(n1==0){/*------------------包括菜单----------------游戏菜单*/
for(i=0;i<2;i++){
if(i==n2)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(2,39+(i*(12+6))+1,2+2+12*2+3,39+((i+1)*(12+6)));
}
drawmat(kai12S,12,4,39+3,GREEN);/*开局*/
drawmat(ju12S,12,4+12+2,39+3,GREEN);
drawmat(tui12S,12,4,39+6+3+12,RED);/*退出*/
drawmat(chu12S,12,4+12+2,39+6+3+12,RED);
}
else if(n1==1){/*-------------------------------------难度菜单*/
for(i=0;i<3;i++){
if(i==n2)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(2+32,39+(i*(12+6))+1,2+32+12+6,39+((i+1)*(12+6)));
}
drawmat(yi12S,12,2+32+4,39+3,YELLOW);/*易中难*/
drawmat(zhong12S,12,2+32+4,39+18+3,YELLOW);
drawmat(nan12S,12,2+32+4,39+36+3,YELLOW);
}
}
ha_graph(){/*图形模式初始化*/
int gd=DETECT,gm,errorcode;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
errorcode = graphresult();
if (errorcode != grOk){
printf("Graphics error: %s",grapherrormsg(errorcode));
printf("Author:JYL");
getch();
exit(1);
}
}
int main(){
int i;
srand((unsigned)time(NULL));/*使每次执行程序得到的结果不一样*/
ha_graph();
full_window();
menu_window(-1,-1);/*菜单*/
initmap();/*地图初始化*/
ha_mouse();/*鼠标*/
}
9.参考文献
[1] 谭浩强 著.C程序设计
[2]实验与课程设计指导
[3]计算机文化