C语言课程设计报告 扫雷_第1页
C语言课程设计报告 扫雷_第2页
C语言课程设计报告 扫雷_第3页
C语言课程设计报告 扫雷_第4页
C语言课程设计报告 扫雷_第5页
已阅读5页,还剩30页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE2程序课程设计基础课程设计扫雷游戏院系:计算机科学技术学院计算机科学与技术(师范)班级:师计09-1设计者:徐群杨松徐春辉杨雷刘安然学号:3224312504指导教师:黄绍义2009年12月目录1.概述 31.1.研究的背景及意义 31.2.设计的任务和需要的知识点 31.3.具体完成的设计内容 42.需求分析 52.1.功能需求 52.2.操作方法 53.总体设计 63.1.模块设计 63.2.总体数据结构设计 64.详细设计 74.1.主控模块Main函数 74.2.游戏具体过程流程图 85.程序的调试与测试 95.1.动画与音乐的同步播放 95.2.扫雷的运行 95.3.终止程序 96.总结 107.结束语 118.程序清单 129.参考文献 341.概述本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以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.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.扫雷的运行扫雷的运行是一种比较简单的一种方式,当你不幸没过时,游戏界面出现youaredead当你过关时,游戏界面出现了,youaregood5.3.终止程序程序的终止有两种方法,第一种方法是直接关闭窗口,第二种方法是直接是游戏的下拉菜单中单击退出。6.总结通过两周的课程设计,在我们开发小组五人的共同努力下,终于与完成了五子棋游戏程序的开发任务。该游戏程序实现了用鼠标控制棋子,难度等级,再来一局,结束时处理等功能。该游戏程序具有良好的界面,操作方便,控制准确,容错能力强等功能。我们设计的五子棋游戏还存在一些缺陷予以改进:在进行游戏时无法播放音乐。应在主函数中再次添加音乐函数。系统智能化水平偏低,游戏偏易。增加控制电脑落子程序复杂程度。7.结束语通过扫雷的编程练习思考数据结构的使用,比如定义雷的坐标来控制它出现的位置,用draw()函数来画雷,,用drawmouse()函数画鼠标,使我们更加熟练的应用各种函数,。对于我们初学者来说,学习编写扫雷的游戏,对我们掌握了解C语言的知识有很大的帮助。我们通过编写实践,还能拓展思路,让我们去寻找需要拿下函数的调用,怎样提高程序的质量等。在编程时我们碰到了很多的困难,这就需要我们多与别人交流。三人行必有吾师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致,这些都是提高我们编程的注意点。现在自己也能写游戏了,却没想到的是写游戏并没有想象的那么轻松。在这个程序中我们用了接过化程序设计的思想,一些处理方法基本是编程理论,用到了图形、声音、文件等知识。我们查阅了大量的硬件知识资料,还学了一点汇编,再加上对一些程序细节及一些音乐数据的产生,也让我们忙了好一阵。当一切都完成以后,除了这个游戏,我们也学到了许多别的东西。首先,我们学会了合作。要以别人的眼光看看问题,也许这样得到的会比各自得到的要多。合作,必然会产生分歧;学会去解决分歧,留下的是更多的友谊。其次,我们学会了分工。分工是为了更好的合作,分工才能提高合作的效率。最后,我们学会了奋斗,我们相信,通过北华大学四年的学习,我们一定能写出更精彩的程序,将来会描绘出更精彩的人生。在这里,我们要感谢指导课程设计的黄绍义老师,给予我们悉心的指导。老师多次询问编程进程,并为我们指点迷津,精心点拨,这让我们收益无穷。在设计中,我们确实感到了团队合作的力量,这使我们顺利地完成了课程设计任务。8.程序清单#include<stdio.h>#include<graphics.h>#include<dos.h>#include<stdlib.h>intm_poly[8]={0,0,5,7,0,9,0,0};/*鼠标*/intm_now_poly[8]={0,0,5,7,0,9,0,0};intre[10][6];/*储存鼠标经过前的像素颜色*/intm_s[93-40+1][52-2+1];intn1=-1,n2=-1;inthard=1;/*0:易1:中2:难*/intcount=40;/*地雷数量*/intmx=16,my=16;/*地图宽高*/charmap[16][30];/*0位存放是否有地雷,1有0无,1位存放是否打开,1打开0没有打开,2位表示是否插旗,1有0无*/intha_x=320-120,ha_y=240-100;/*游戏栏*/intdead=0;/*1:死亡2:生*/intscore=0;voidmenu_window();charsao16S[]={/*以下是'扫'的16点阵宋体字模,32byte*/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,};charlei16S[]={/*以下是'雷'的16点阵宋体字模,32byte*/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,};charyou12S[]={/*以下是'游'的12点阵宋体字模,24byte*/0x91,0x00,0x49,0xE0,0x3E,0x00,0x93,0xE0,0x5C,0x40,0x54,0x80,0x55,0xE0,0x94,0x80,0x94,0x80,0xA4,0x80,0x4D,0x80,0x00,0x00,};charxi12S[]={/*以下是'戏'的12点阵宋体字模,24byte*/0x02,0x80,0xF2,0x40,0x12,0x40,0x13,0xE0,0x9E,0x00,0x52,0x40,0x22,0x80,0x31,0x00,0x49,0x20,0x42,0xA0,0x8C,0x60,0x00,0x00,};charkai12S[]={/*以下是'开'的12点阵宋体字模,24byte*/0x00,0x40,0x7F,0xE0,0x11,0x00,0x11,0x00,0x11,0x00,0xFF,0xE0,0x11,0x00,0x11,0x00,0x11,0x00,0x21,0x00,0xC1,0x00,0x00,0x00,};charju12S[]={/*以下是'局'的12点阵宋体字模,24byte*/0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x20,0x00,0x3F,0xE0,0x20,0x20,0x2F,0x20,0x29,0x20,0x4F,0x20,0x49,0x20,0x80,0xC0,0x00,0x00,};chartui12S[]={/*以下是'退'的12点阵宋体字模,24byte*/0x8F,0xC0,0x48,0x40,0x4F,0xC0,0x08,0x40,0xCF,0xC0,0x48,0x00,0x4B,0x40,0x48,0x80,0x4E,0x40,0xB0,0x00,0x8F,0xE0,0x00,0x00,};charchu12S[]={/*以下是'出'的12点阵宋体字模,24byte*/0x04,0x00,0x44,0x40,0x44,0x40,0x44,0x40,0x7F,0xC0,0x04,0x00,0x44,0x40,0x44,0x40,0x44,0x40,0x44,0x40,0x7F,0xC0,0x00,0x00,};charnan12S[]={/*以下是'难'的12点阵宋体字模,24byte*/0x02,0x80,0x02,0x80,0xF7,0xE0,0x14,0x80,0x9F,0xE0,0x54,0x80,0x24,0x80,0x27,0xE0,0x54,0x80,0x94,0x80,0x07,0xE0,0x00,0x00,};chardu12S[]={/*以下是'度'的12点阵宋体字模,24byte*/0x02,0x00,0x7F,0xE0,0x48,0x80,0x7F,0xE0,0x48,0x80,0x4F,0x80,0x40,0x00,0x5F,0x80,0x45,0x00,0x87,0x00,0xB8,0xE0,0x00,0x00,};charyi12S[]={/*以下是'易'的12点阵宋体字模,24byte*/0x3F,0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x3F,0x80,0x10,0x00,0x3F,0xC0,0xC9,0x40,0x12,0x40,0x64,0x40,0x19,0x80,0x00,0x00,};charzhong12S[]={/*以下是'中'的12点阵宋体字模,24byte*/0x04,0x00,0x04,0x00,0x7F,0xC0,0x44,0x40,0x44,0x40,0x44,0x40,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,};chardash16S[]={/*以下是'-'的16点阵宋体字模,32byte*/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,};charzhi16S[]={/*以下是'制'的16点阵宋体字模,32byte*/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,};charzuo16S[]={/*以下是'作'的16点阵宋体字模,32byte*/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,};charcheng16S[]={/*以下是'成'的16点阵宋体字模,32byte*/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,};charyuan16S[]={/*以下是'员'的16点阵宋体字模,32byte*/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,};charmao16S[]={/*以下是':'的16点阵宋体字模,32byte*/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,};charxu16S[]={/*以下是'徐'的16点阵宋体字模,32byte*/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,};charqun16S[]={/*以下是'群'的16点阵宋体字模,32byte*/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,};charsong16S[]={/*以下是'松'的16点阵宋体字模,32byte*/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,};charchun16S[]={/*以下是'春'的16点阵宋体字模,32byte*/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,};charhui16S[]={/*以下是'辉'的16点阵宋体字模,32byte*/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,};charyang16S[]={/*以下是'杨'的16点阵宋体字模,32byte*/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,};voiddrawmat(char*mat,intmatsize,intx,inty,intcolor){/*点阵字显示函数*/inti,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);}voidgame_over(){intx,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);/*黑色填充*/}}voidwin(){inti,j;intfr[]={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};inttim[]={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};intgdriver=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();}}}voidbox_open(intx,inty,intcontrol){/*方格被打开,control用于判断是否是鼠标点击打开,1表示鼠标点击,0表示自动*/intsum=0;charnum[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,youdie!~~~");/**good!!~~~~****************/setcolor(GREEN);outtextxy(99,320,"Sorry,youdie!~~~");/****************good!!~~~~****************/}{intgdriver=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();{inti,j;inta[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};intb[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);}}voidbox_mark(intx,inty){/*给小方块插旗标记*/intnx=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;/*有旗拔旗*/elsemap[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);}}voidmap_window(){/*地图绘制*/intx,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);}}voidinitmap(){/*地图初始化*/inti=0,x,y;dead=0;score=0;switch(hard){case0:mx=9;my=9;count=10;break;case1:mx=16;my=16;count=40;break;case2: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();}voidm_save(){/*储存menu挡住的部分*/inti,j;for(j=40;j<=93;j++)for(i=2;i<=52;i++)m_s[j-40][i-2]=getpixel(i,j);}voidm_load(){/*恢复menu挡住的部分*/inti,j;for(j=40;j<=93;j++)for(i=2;i<=52;i++)putpixel(i,j,m_s[j-40][i-2]);}voidha_mouse(){inti,j,k,x=-1,y=-1,flag=0,color;inttx1,ty1,tx2,ty2,tbx;intnew_x=ha_x,new_y=ha_y;/*chartgraph[193][303],tg=0;*/unionREGSinregs,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);/*关闭按钮*/elseif(outregs.x.cx>=1&&outregs.x.cx<=32&&outregs.x.dx>=21&&outregs.x.dx<=38){/*主菜单-游戏*/if(n1==-1)m_save();elseif(n1==1)m_load();n1=0;n2=-1;menu_window();}elseif(outregs.x.cx>=33&&outregs.x.cx<=64&&outregs.x.dx>=21&&outregs.x.dx<=38){/*主菜单-难度*/if(n1==-1)m_save();elseif(n1==0)m_load();n1=1;n2=-1;menu_window();}elseif(n1==0&&n2==1)exit(0);/*开局*/elseif((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();}elseif(n1==1&&n2==0){/*易*/dead=0;/*生*/n1=-1;m_load();hard=0;initmap();}elseif(n1==1&&n2==1){/*中*/dead=0;/*生*/n1=-1;m_load();hard=1;initmap();}elseif(n1==1&&n2==2){/*难*/dead=0;/*生*/n1=-1;m_load();hard=2;initmap();}/*elseif(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;}elseif(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;}}voidfull_window(){/*整体部分,包括标题栏的绘制*/setbkcolor(BLACK);setcolor(WHITE);line(0,20,639,20);rectangle(0,0,639,479);setfillstyle(SOLID_FILL,LIGHTGRAY);bar(1,1,638,19);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论