欢迎来到人人文库网! | 帮助中心 人人文档renrendoc.com美如初恋!
人人文库网
全部分类
  • 图纸下载>
  • 教育资料>
  • 专业文献>
  • 应用文书>
  • 行业资料>
  • 生活休闲>
  • 办公材料>
  • 毕业设计>
  • ImageVerifierCode 换一换
    首页 人人文库网 > 资源分类 > DOC文档下载  

    C程序课程设计报告(扫雷游戏).doc

    • 资源ID:14256052       资源大小:98.18KB        全文页数:17页
    • 资源格式: DOC        下载积分:12积分
    扫码快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
    二维码
    微信扫一扫登录

    手机扫码下载

    请使用微信 或支付宝 扫码支付

    • 扫码支付后即可登录下载文档,同时代表您同意《人人文库网用户协议》

    • 扫码过程中请勿刷新、关闭本页面,否则会导致文档资源下载失败

    • 支付成功后,可再次使用当前微信或支付宝扫码免费下载本资源,无需再次付费

    账号:
    密码:
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源(1积分=1元)下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序课程设计报告(扫雷游戏).doc

    C程序设计 扫雷游戏 一、设计题目:扫雷游戏二、设计目的1使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。2培养学生综合运用所学知识独立完成课题的能力。3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。三、设计要求1汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。2查阅相关资料,自学具体课题中涉及到的新知识。 3采用结构化、模块化程序设计方法,功能要完善,界面要美观。4按要求写出课程设计报告,并于设计结束后1周内提交。 一 概述1) 掌握数组指针的概念及其应用2) 培养团结合作精神2. 课程设计的要求要求我们有扎实的C语言知识,以及良好的编程习惯,能够熟练的应用循环,有毅力,还要求我们有较强的合作精神,善于总结。同时还要求我们自学C语言作图部分知识。在必要时还要上网查相关资料。3. 课程设计的主要设计思想扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。我们还加了鼠标处理函数。如果格子上有雷则调用函FailExitGame(),显示“Fail!”,游戏结束。若所有的雷都标出,且所有的格子都处理过,则调用函数ExitGame(),显示“OK,Good!”,游戏结束。游戏结束后,按任意键出去。二 总体方案设计封面是由图形和动态文字,伴随声音接替出现。程序用了一个10行10列的二维数组表示扫雷界面。在游戏中要随机步雷,游戏开始前要统计好每个格子周围的雷数,游戏开始后可以点击鼠标玩游戏,游戏结束后,按任意键结束跳出游戏界面。整体框图主函数封面随机布雷函数扫雷算法函数取鼠标函数图形和声音函数判断是否胜利三 详细设计程序流程以下是主函数中的一些主要的。1. 主函数2. 主要定义常用到的常量,全局变量,有关的函数原形说明。然后随机布雷,统计好每个格子周围的雷数,画扫雷游戏界面,游戏接受鼠标操作,按任意键结束游戏,关闭图形系统,程序结束。BYTE MouseState() /*等待接受鼠标命令函数*/ union REGS regs; regs.x.ax = 3; int86(MOUSE, &regs, &regs); /*鼠标端口*/ return(regs.x.bx); void MouseShow() /*鼠标显示函数*/ union REGS regs; regs.x.ax = 1; int86(MOUSE, &regs, &regs);void MouseHide() /*鼠标隐藏函数*/ union REGS regs; regs.x.ax = 2; int86(MOUSE, &regs, &regs);BOOL InitMouse() /*取鼠标端口函数*/ union REGS regs; regs.x.ax = 0; int86(MOUSE, &regs, &regs); return (regs.x.ax);void WaitMouse() int xx,yy; while (MouseState() GetXY(&xx,&yy); 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) /*返回雷区地址入口*/ return peekb(0xb800,y*160+x*2);void CursorHide() /*光标隐藏*/ _AH=3; geninterrupt(0x10); CursorMode=_CX; _AH=1; _CH=32; geninterrupt(0x10);void CursorShow() /*光标显示*/ _AH=1; _CX=CursorMode; geninterrupt(0x10);四、源程序如下:# include <dos.h> # include <time.h> # include <conio.h># include <stdio.h># include <stdlib.h># include <graphics.h> # define BYTE unsigned char# define BOOL BYTE# define WORD unsigned int# define DWORD unsigned long# define TRUE 1# define FALSE !TRUE# define MOUSE 0x33 # define LBUTTON 1# define RBUTTON 2# define SX 35# define SY 7# define MINE 9 /*在有雷的地方定义为MINE*/BOOL InitMouse(); /*初始化鼠标*/BYTE Scr(int,int); /*屏幕显示坐标函数*/BYTE MouseState(); /*等待接受鼠标命令*/void Edge(int,int); void TurnBack(int,int);void MouseShow(); /*鼠标显示函数*/void MouseHide(); /*鼠标隐藏函数*/void CursorShow(); /*光标显示函数*/void CursorHide(); /*光标隐藏函数*/void SetRange(int,int,int,int); void GetXY(int*,int*);void SetXY(int,int);void WaitMouse(); void WaitKey();void Prt(int,int,BYTE,BYTE); /*雷区的图形和颜色*/void Locate(BYTE,BYTE); void FailExitGame(); /*游戏失败*/void ExitGame(); /*游戏胜利*/ struct Snow int x;int y;int speed; snow100;int snownum=0;int size;int change=10;void *save1,*save2;void Copy();void DrawSnow();void Pr();void load();void welcome1();void welcome2();void welcome3();void control();void star();BOOL Turn1010;BYTE Mine1010;BYTE Mark102;WORD CursorMode;int x,y;void main() int i; int Total=0; BYTE Button; BOOL QUIT=FALSE; time_t lt; /*定义时间变量*/ star(); /*调用游戏前景动画函数*/ if (!InitMouse() printf("Mouse not installed!"); /*对鼠标端口进行判断*/ getch(); clrscr(); /*清屏*/ CursorHide(); randomize(); /*定义取随机数*/ Locate(36,20); /*定义屏幕坐标*/ printf("Mines:%d ",0); /* Mines表示做标记的次数*/ lt = time(NULL); Locate(15,4); /*定义屏幕坐标*/ printf("The Calendar Time now is %sn", ctime(& lt); for (y=0;y<10;y+) for (x=0;x<10;x+) Mineyx=NULL; Turnyx=FALSE; for (i=0;i<10;i+) /*随机产生地雷坐标*/ x=random(10); y=random(10); while (Mineyx) x=random(10); y=random(10); Mineyx=MINE; /*定义在有了雷的地方坐标值为MINE*/ for (y=0;y<10;y+) for (x=0;x<10;x+) i=0; /*判断每个格子周围的雷数*/ if (Mineyx!=MINE) if (Mineyx-1=MINE)&&(x-1)>=0) i+; if (Mineyx+1=MINE)&&(x+1)<10) i+; if (Miney-1x=MINE)&&(y-1)>=0) i+; if (Miney+1x=MINE)&&(y+1)<10) i+; if (Miney-1x-1=MINE)&&(x-1)>=0)&&(y-1)>=0) i+; if (Miney-1x+1=MINE)&&(x+1)<10)&&(y-1)>=0) i+; if (Miney+1x+1=MINE)&&(x+1)<10)&&(y+1)<10) i+; if (Miney+1x-1=MINE)&&(x-1)>=0)&&(y+1)<10) i+; Mineyx=i; Prt(x+SX,y+SY,1,15); /*雷区的图形和颜色*/ MouseShow(); while(!QUIT) if (kbhit() if (getch()=27) QUIT=TRUE; Button=MouseState()&3; if (Button) GetXY(&x,&y); WaitMouse(); x>>=3; y>>=3; x-=SX; y-=SY; if (x>=0&&x<10&&y>=0&&y<10) if (Button&LBUTTON) if (Mineyx=MINE) FailExitGame(); if (Mineyx=NULL) Edge(x,y); else TurnBack(x,y); if (Button&RBUTTON) if (!(Turnyx&1) switch (Turnyx) case 0: Turnyx=2; MouseHide(); Prt(x+SX,y+SY,'*',15); Locate(36,20); printf("Mines:%d ",+Total); MouseShow(); MarkTotal0=x; MarkTotal1=y; if (Total=10) ExitGame(); break; case 2: Turnyx=0; MouseHide(); Prt(x+SX,y+SY,5,8); Locate(36,20); printf("Mines:%d ",-Total); MouseShow(); break; WaitKey(); MouseHide(); CursorShow();BYTE MouseState() /*等待接受鼠标命令*/ union REGS regs; regs.x.ax = 3; int86(MOUSE, &regs, &regs); /*鼠标端口*/ return(regs.x.bx); void MouseShow() /*鼠标显示*/ union REGS regs; regs.x.ax = 1; int86(MOUSE, &regs, &regs);void MouseHide() /*鼠标隐藏*/ union REGS regs; regs.x.ax = 2; int86(MOUSE, &regs, &regs);BOOL InitMouse() /*取鼠标端口*/ union REGS regs; regs.x.ax = 0; int86(MOUSE, &regs, &regs); return (regs.x.ax);void SetRange(int start_x,int start_y,int end_x,int end_y) union REGS r; r.x.ax=7; r.x.cx=start_x; r.x.dx=end_x; int86(0x33,&r,&r); r.x.ax=8; r.x.cx=start_y; r.x.dx=end_y; int86(MOUSE,&r,&r);void GetXY(int *x,int *y) union REGS ireg,oreg; ireg.x.ax=3; int86(MOUSE,&ireg,&oreg); *x=oreg.x.cx; *y=oreg.x.dx;void SetXY(int x,int y) union REGS ireg; ireg.x.ax=4; ireg.x.cx=x; ireg.x.dx=y; int86(MOUSE,&ireg,&ireg);void WaitMouse() int xx,yy; while (MouseState() GetXY(&xx,&yy); 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) /*返回雷区地址入口*/ return peekb(0xb800,y*160+x*2);void CursorHide() /*光标隐藏*/ _AH=3; geninterrupt(0x10); CursorMode=_CX; _AH=1; _CH=32; geninterrupt(0x10);void CursorShow() /*光标显示*/ _AH=1; _CX=CursorMode; geninterrupt(0x10);void WaitKey() _AH=0; geninterrupt(0x16);void Edge(int xx,int yy) if (xx<0|xx>9|yy<0|yy>9|Turnyyxx) return; TurnBack(xx,yy); if (Mineyyxx=NULL) Edge(xx+1,yy); Edge(xx-1,yy); Edge(xx,yy+1); Edge(xx,yy-1); void TurnBack(int xx,int yy) if (!Turnyyxx) MouseHide(); Prt(xx+SX,yy+SY,Mineyyxx+48,12); MouseShow(); Turnyyxx=Turnyyxx|1; void Locate(BYTE Col,BYTE Line) pokeb(0x0,0x450,Col); pokeb(0x0,0x451,Line);void FailExitGame() /*显示游戏失败*/ sound(1000); delay(500); nosound(); for (y=0;y<10;y+) for (x=0;x<10;x+) if (Mineyx=MINE) Prt(x+SX,y+SY,'*',14+128); MouseHide(); CursorShow(); printf("nFail!n"); getch(); exit(0);void ExitGame() /*显示游戏胜利*/ int i,m=0; for (i=0;i<10;i+) if (MineMarki1Marki0) m+; if (m<9) FailExitGame(); MouseHide(); CursorShow(); printf("nOK,Good!n"); getch(); exit(0); /* / 开机 / */ void star()int gd=DETECT,gm;initgraph(&gd,&gm,"c:turboc2");Copy();DrawSnow();welcome1();welcome2();welcome3();control();closegraph(); /*关闭图形函数*/void Copy()setcolor(0); /*涂色*/setfillstyle(SOLID_FILL,15); fillellipse(200,200,1,1); /*画椭圆*/size=imagesize(196,196,204,204);save1=malloc(size);save2=malloc(size);getimage(196,196,204,204,save1);getimage(96,96,104,104,save2);void Pr()int s=392,262,262,262,330,392,392,392,392,392,330,330,294,294,330,294,262,440,392, 392,262,262,262,330,392,392,392,392,392,330,330,294,294,330,294,262,440,392; /*定义声音函数数组*/setcolor(change); /*字体颜色变换*/settextstyle(0,0,4); /*字体大小*/outtextxy(150,200,"Welcome to"); /*在屏幕上打印字符*/outtextxy(200,240,"C Game!");sound(schange/10); /*释放声音*/void DrawSnow()int i;int sx62;randomize();for(i=0;i<62;i+)sxi=(i+2)*10;cleardevice(); /*清屏*/while(!kbhit()Pr();if(snownum!=100) snowsnownum.speed=2+random(5); i=random(62); snowsnownum.x=sxi; snowsnownum.y=10-random(100);for(i=0;i<snownum;i+)putimage(snowi.x,snowi.y,save2,COPY_PUT);Pr(); if(snownum!=100)snownum+;else if(snownum>15) break;delay(300);setfillstyle(SOLID_FILL,15);for(i=0;i<snownum;i+)snowi.y+=snowi.speed;putimage(snowi.x,snowi.y,save1,COPY_PUT);if(snowi.y>500)snowi.y=10-random(200);change+;if(change=140)change=10;nosound();void welcome1() int a;for(a=0;a<450;a+)textbackground(16);setcolor(15);circle(315,240,a);delay(100);setcolor(16);circle(315,240,a-10);void welcome2()float b;int c;for(b=0;b<320;b=b+0.5)setcolor(11);rectangle(0,240,b,240);rectangle(630,240,640-b,240);for(c=0;c<240;c+)rectangle(0,240,640,240-c);rectangle(0,240,640,240+c);void welcome3() int x,y=100,i,j;for(x=60;x<65;x+)setcolor(4); /*定义要打印字体的颜色*/setbkcolor(1); /*定义背景色*/settextstyle(0,0,6); /*定义要打印字体的大小*/outtextxy(x,y,"扫"); /*在x,y位置打印汉字*/delay(6000); /*延时*/ for(x=190;x<195;x+)setcolor(4);setbkcolor(1);settextstyle(0,0,6);outtextxy(x,y,"雷");delay(6000);for(x=320;x<325;x+)setcolor(4);setbkcolor(1);settextstyle(0,0,6);outtextxy(x,y,"游");delay(6000);for(x=480;x<485;x+)setcolor(4);setbkcolor(1);settextstyle(0,0,6);outtextxy(x,y,"戏");delay(6000);sleep(0.5);setcolor(4);settextstyle(0,0,2);outtextxy(130,205,"制作组人员:范金龙 闫佳佳");outtextxy(230,250,"倾");for(i=0;i<10;i=i+1)for(j=0;j<i/2;j=j+1) setcolor(4); setbkcolor(14); circle(282-j,256-j,i); /*画圆*/ circle(286+j,256-j,i); delay(20); outtextxy(315,250,"打"); outtextxy(350,250,"造"); outtextxy(200,280,"1 . star the game"); outtextxy(200,310,"2 . exit pattern"); outtextxy(550,450,"V1.90");void control() /*从键盘接受命令函数*/int key;key=getch();switch(key) /*等待接受命令*/case '1':load();break; case '2':exit(0); default:exit(0); void load()float k; setcolor(4); rectangle(205,365,392,381); outtextxy(220,350,"loading.");for(k=0;k<187;k=k+0.2)rectangle(205,365,205+k,381); /*画矩形*/delay(1000);

    注意事项

    本文(C程序课程设计报告(扫雷游戏).doc)为本站会员(re****8)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    网站客服QQ:2881952447     

    copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

    备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!