ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:23.72KB ,
资源ID:23001573      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23001573.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(打地鼠.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

打地鼠.docx

1、打地鼠 C语言大型程序设计之打地鼠游戏设计实验报告1、游戏设计目的32、游戏设计内容33、游戏设计背景知识44、功能分析45、设计结果分析56、程序代码6一、游戏设计目的1、熟悉C语言运行环境Turbo C 2.02、会简单的程序调试3、熟悉C语言各种类型数据的输入输出,以及各种函数的 使用方法4、掌握顺序结构程序设计二、游戏设计内容按照经典打地鼠游戏制作方案,用C语言编写程序,主要包括以下几个部分:1、游戏开始界面 1.1 初始化游戏 1.2 欢迎界面 1.3 等级选择 1.4 操纵方式选择2、游戏过程界面 2.1 画方格 2.2 计时 2.3 地鼠和锤子画面设计 2.4 鼠标操控 2.5

2、键盘操纵 2.6 记录打中的个数3、游戏结束界面 3.1 判断成功与失败 3.2 判断是否重新开始三、游戏设计背景知识打地鼠作为娱乐性质的游戏项目,可以锻炼玩家的反应能力,其次,本游戏可通过敲击键盘来控制锤子打地鼠,还能锻炼玩家对键盘的熟悉程度。打地鼠游戏设计牵涉到图像处理函数、声音处理函数、动画处理函数以及鼠标控制等各方面知识,许多函数的使用方法可借鉴扫雷游戏的处理方法,通过对现有打地鼠游戏的改造,形成特有的TC下的打地鼠游戏。四、功能分析总体游戏过程分析:1、在游戏开始时,先显示一个欢迎界面,简单说明游戏规则,点击任意键开始;2、选择游戏等级(等级一:3行3列;等级二:4行4列;等级三:5

3、行5列),选择使用键盘或鼠标操作;3、游戏开始时,每场游戏时有时间限制,键盘玩的时间比鼠标玩的时间稍长,背景界面出现后按任意键计时自动开始,屏幕中央位置会显示一个游戏区,方格表示地鼠显示区域,若用键盘操纵,在每个方格中还会显示不同的字母,地鼠在不同方格中闪现,用鼠标表示铁锤;4、若玩家选择键盘操作,则通过键盘输入各方块中的字母来控制打地鼠;5、若玩家选择鼠标操作,则通过鼠标的运动来击打地鼠;6、游戏开始后,按空格键表示暂停,按ESC键跳出游戏,且按下ESC键表示退出游戏后只能手动重新开始;7、地鼠被打中时,会响起一声提示音,表示准确打中,屏幕上也会显示此时打中地鼠的积累数;8、时间截止时,若打

4、中地鼠总数达到五十,则判断胜利,否则为失败;9、选择是否继续游戏,选择是,则回到选择等级界面,选择否,则退出游戏。五、设计结果分析 预期要求基本达到,图像绘制较为美丽,功能都已经实现,时间控制方面因电脑随机处理方面产生一些无法计算的因素使得游戏时间控制精确度不够,鼠标图形闪烁较为严重。六、程序代码/*-main.c文件-*/#include#include#include#include#include#include#includepicture.c#includekey.cint grade;/*等级*/int operation;/*操作方式*/int kick=0;/*击中地鼠个数*/

5、long count=0;/*控制游戏时间*/int mouseflag=0;/*标记鼠标分辨频率*/int changeflag=0;/*标记地鼠频率*/int keyboardflag=0;/*标记地鼠频率*/void interrupt Timer()/*控制时间*/ count+; if(count%600=0) changeflag=1; if(count%1000=0) keyboardflag=1; if(count%500=0) mouseflag=1; outportb(0x20,0x20);void InstallTime()/*调用电脑时间中断*/ disable();/

6、*修改定时器分频值,使定时器中断时间变为0.5ms每次,安装计时函数*/ outportb(0x43,0x36); outportb(0x40,596&0x00ff); outportb(0x40,(596&0xff00)8); setvect(0x1c,Timer); enable();void initgr()/*界面初始化*/ int graphdriver=VGA,graphmode=VGAHI; int errorcode; initgraph(&graphdriver,&graphmode,f:tc);void getmouse(int *x,int *y,int *key)/*获

7、取鼠标函数*/ union REGS inregs,outregs; inregs.x.ax=3; /*获取鼠标位置和状态也可以用3*/ int86(0x33,&inregs,&outregs); /*中断调用*/ *x=outregs.x.cx; /*cx寄存器中存的是横坐标*/ *y=outregs.x.dx; /*dx寄存器中存的是列坐标*/ *key=outregs.x.bx; /*bx寄存器是按键状态*/void visbilemouse()/*初始化鼠标函数*/ union REGS inregs,outregs; inregs.x.ax=0x01; /*显示鼠标*/ int86(

8、0x33,&inregs,&outregs);void mouse(int *x,int *y,int *z)/*画鼠标函数*/ int a=0,b=0,c=0,a_old=0,b_old=0; int *b_ball;/*存储背景图片*/ int *m_ball; b_ball=malloc(imagesize(a,b,a+18,b+18); m_ball=malloc(imagesize(0,0,18,18); getimage(a,b,a+18,b+18,b_ball); /*第一次将一个空矩形存入到内存中*/ getimage(36,0,54,18,m_ball); getmouse(

9、&a,&b,&c); /*a,为横坐标,b,为列坐标,c为按键状态*/ if(a120) a=120; /*保证鼠标不出界*/ if(bgetmaxx()-155) a=getmaxx()-155; if(bgetmaxy()-27) b=getmaxy()-27; if(a!=a_old | b!=b_old) getimage(a,b,a+18,b+18,b_ball); putimage(a,b,m_ball,0); a_old=a;b_old=b; *x=a;*y=b;*z=c; /*返回按键后鼠标的位置*/ putimage(a,b,b_ball,0); /*将鼠标擦掉*/ free

10、(m_ball); free(b_ball);main() int row=0,col=0;/*行、列*/ int mx,my,mz;/*存储鼠标位置*/ int *s_hole;/*存储地鼠洞图像*/ int *s_ball;/*存储地鼠图像*/ int *k4;/*存储击中个数*/ int *tim;/*显示剩余时间*/ int t=71;/*控制时间显示*/ int b;/*是否重来*/ initgr();/*界面初始化*/ InstallTime();/*时间控制*/ cleardevice(); setbkcolor(BLACK); Welcome(); Game_Rules();

11、again: grade=Choose_Grade(); operation=Choose_Operation(); Hole_Draw(grade,operation); s_hole=malloc(imagesize(0,0,51,80); s_ball=malloc(imagesize(0,0,50,60); tim=malloc(imagesize(0,0,8,8); getimage(320-grade*38+1,320-grade*48+2,320-grade*38+52,320-grade*48-78,s_hole); getimage(530,50,538,58,tim);/*

12、存入黑色方块*/ grade+=2; setcolor(RED);/*表示剩余时间*/ rectangle(530,70,540,450); setfillstyle(SOLID_FILL,LIGHTRED); floodfill(535,180,RED); susliks(15,270);/*画地鼠*/ mouse_draw(36,0);/*画鼠标图形*/ mouse_draw(36,450); getimage(15,270,65,210,s_ball); setcolor(GREEN); settextstyle(SMALL_FONT,0,5); sprintf(k,%d,kick);

13、outtextxy(36,250,k); while(count=100000) break; while(1); if(operation=2)/*鼠标操作*/ row=320-grade*38+78*(rand()%grade); col=320-grade*48+98*(rand()%grade); putimage(row,col-60,s_ball,COPY_PUT); visbilemouse();/*鼠标显示*/ do if(bioskey(1) getkey(0,0,kick); mouse(&mx,&my,&mz); if(mz=1 & rowmx & mxrow+50 &

14、col-60my & my=80000) break; while(1); if(kick=50) win();/*判断输赢*/ if(kick50) lose(); b=back(); free(s_ball); free(s_hole); free(tim); if(b=1) /*是否重来*/ kick=0; count=0; t=71; goto again; else closegraph(); exit(0);/*-main.c文件-*/*-key.c文件-*/#include#define A 0x1e61#define B 0x3062#define C 0x2e63#defin

15、e D 0x2064#define E 0x1265#define F 0x2166#define G 0x2267#define H 0x2368#define I 0x1769#define J 0x246a#define K 0x256b#define L 0x266c#define M 0x326d#define N 0x316e#define O 0x186f#define P 0x1970#define Q 0x1071#define R 0x1372#define S 0x1f73#define T 0x1474#define U 0x1675#define V 0x2f76#d

16、efine W 0x1177#define X 0x2d78#define Y 0x1579#define ONE 0x231#define TWO 0x332#define THREE 0x433#define BLANK 0x3920#define ESC 0x011bint getkey(int row,int col,int kick) /*获取按键信息,返回有效的操作值*/ int key=bioskey(0); switch(key) case A: if(row=206&col=176 | row=168&col=128 | row=130&col=80) kick+; kick

17、_music(); break; case B: if(row=206&col=274 | row=168&col=226 | row=130&col=178) kick+; kick_music(); break; case C: if(row=206&col=372 | row=168&col=324 | row=130&col=276) kick+; kick_music(); break; case D: if(row=284&col=176 | row=168&col=422 | row=130&col=374) kick+; kick_music(); break; case E:

18、 if(row=284&col=274 | row=246&col=128 | row=130&col=472) kick+; kick_music(); break; case F: if(row=284&col=372 | row=246&col=266 | row=208&col=80) kick+; kick_music(); break; case G: if(row=362&col=176 | row=246&col=324 | row=208&col=178) kick+; kick_music(); break; case H: if(row=362&col=274 | row

19、=246&col=422 | row=208&col=276) kick+; kick_music(); break; case I: if(row=362&col=372 | row=324&col=128 | row=208&col=374) kick+; kick_music(); break; case J: if(row=324&col=266 | row=208&col=472) kick+; kick_music(); break; case K: if(row=324&col=324 | row=286&col=80) kick+; kick_music(); break; c

20、ase L: if(row=324&col=422 | row=286&col=178) kick+; kick_music(); break; case M: if(row=402&col=128 | row=286&col=276) kick+; kick_music(); break; case N: if(row=402&col=266 | row=286&col=374) kick+; kick_music(); break; case O: if(row=402&col=324 | row=286&col=472) kick+; kick_music(); break; case

21、P: if(row=402&col=422 | row=364&col=80) kick+; kick_music(); break; case Q: if(row=364&col=178) kick+; kick_music(); break; case R: if(row=364&col=276) kick+; kick_music(); break; case S: if(row=364&col=374) kick+; kick_music(); break; case T: if(row=364&col=472) kick+; kick_music(); break; case U:

22、if(row=442&col=80) kick+; kick_music(); break; case V: if(row=442&col=178) kick+; kick_music(); break; case W: if(row=442&col=276) kick+; kick_music(); break; case X: if(row=442&col=374) kick+; kick_music(); break; case Y: if(row=442&col=472) kick+; kick_music(); break; case ONE: return 1; case TWO:

23、 return 2; case THREE: return 3; case BLANK: getch(); break; case ESC: outtextxy(10,20,EXIT); getch(); exit(0); break; return kick;/*-key.c文件-*/*-picture.c文件-*/void Welcome()/*开机界面*/ int i,j,k; /*(i,j)在图像正中心定位*/ int im; int fr=440,1,440,1,440,1,392,392,1,392,392,1,330,330,330,1,330,330,330,1,262,262,262,262,262,262,1, /*设置背景音乐*/ 296,296,296,296,296,330,330,330,330,296,296,296,296,262,262,262,262,262,220,220,220,220,262,262,1,220,220,220,220,220,1; int tim=1,6,1,6,1,6,1,1,6,1,1,6,1,1,2,1,1,1,2,1,1,1,1,1,1,1,6, 1,1,1,1,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1