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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

俄罗斯方块程序不要分.docx

1、俄罗斯方块程序不要分俄罗斯方块程序【目录】【题目描述】3【用户文档】3【技术文档】4 【题目描述】设计一个俄罗斯方块的游戏程序,在游戏可运行的情况下,该程序应具有如下功能:(1) 程序开始时有开机logo。(2) 游戏时,方块下落速度可以调节。(3) 方块下落顺序,颜色随机变化。(4) 每次进行方向操作时,都会有喇叭发声。(5) 游戏结束后会有分数统计。(6) 游戏运行当中会显示当前时间。【用户文档】一、 应用程序功能的详细说明该应用程序时有星型开机logo,由快到慢5档速度调节,能用cpu喇叭发声,统计游戏分数的多功能,具有非常强可玩性的一款俄罗斯方块。二、 应用程序运行环境的要求1. 操作

2、系统:Windows 95/98/Me/NT/2000/XP/Vista/72. CPU:最低100MHz3. 内存:最低4MB DDR66/1004. 磁盘空间:400M剩余空间5. 输入设备: 显示器三、 应用程序的安装与启动方法 将ELUOSI.EXE文件复制到任意磁盘目录下,双击文件图标即可运行。四、 程序的界面、交互方式和操作方法1. 游戏开始菜单 程序开始运行后会出现用“*”号组成的花形状logo,按回车之后,会出现选择速度的提示命令“please input the level(1-5)”,速度1为最快,速度5为最慢,输入速度后会进入游戏画面。2. 在游戏运行中 游戏开始运行后,

3、在屏幕左边会出现游戏窗口,右边有游戏名字“Tetris”,和短语“Have Fun!”接下来就会有方块不断下落,你可以用方向键左右调整方块位置,当按左右方向时,cpu喇叭会发出不同频率的声音,还可以用方向键下使方块快速落到最底层,如果需要旋转方块,可以按空格键进行,这就是游戏的基本操作方式。3. 在游戏结束后当玩家的方块堆满后,游戏结束,此时,画面跳出到文字界面,显示“You Lose”, “Your score is.”,“Come back again”,接下来是制作者信息。 至此,游戏演示结束。【技术文档】一、 程序结构以及各模块功能描述1. 程序结构二、 各模块的主要算法(用流程图描述

4、)和数据结构解释一、 Dispatchmessage()函数二、 Collision()函数三、 各模块中名称以及用途:1. main函数这是游戏的主函数,执行时按照主函数里的顺序执行。2. getMessage函数这是判断游戏是否继续进行下去的函数,主要对message变量赋值。3. dispatchmessage函数这是游戏最重要的函数,它包括了游戏的控制环节,消行的控制,方块的旋转。4. falldown函数这是方块下落函数。5. init函数这是绘制游戏界面的函数。6. genbox函数这是制作7种方块的函数。7. linefull函数这是判断条件,决定是否消行函数。8. draw函数

5、这是绘制当方块下落后,界面的变化情况的函数。9. moveright函数这是控制方块右移的函数。10. moveleft函数这是控制方块左移的函数。11. movedown函数这是控制方块下落的函数。12. rotate函数这是控制方块旋转的函数。13. collision函数这是控制判断方块是否跟已有的方块或界面发生碰撞的函数。14. start函数这是开机logo的绘制函数。四、游戏调试测试接下来是游戏的实际运行画面:这是开机logo以及选择难度的画面。这是游戏实际运行画面。这是游戏结束后统计分数,和显示作者信息的画面。五、程序的源代码清单#include #include /*可以加载简

6、单图形*/#include /*需要读取bios时间*/#include #include #define mDRAW 5 #define mLINE 6 #define mADOWN 7 #define mGEN 8 #define mLEFT 75 /*定义上下左右按键用数字*/#define mRIGHT 77 #define mSPACE 57 #define mDOWN 80 #define mESC 1 #define TIMEINT 2 #define MAXX 9 /*最大可见x*/#define MAXY 30 /*最大可见y*/#define BACKCOLOR BLACK

7、 #define WINX 50 #define WINY 470 #define GAP 6 #define AREAX (WINX+GAP) #define AREAY (WINY-GAP) #define BOXW 15 #define A 20.0 #define mid 12 #define pi 3.14159 #define rate 0.55 int oldareaMAXY+1MAXX; int areaMAXY+1MAXX; int actW,actH,actX,actY; int curX,curY,curColor,curW,curH; int newX,newY,new

8、Color,newW,newH; int active; int box44; int FORCOLOR; int MESSAGE;int BOX744= 1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0 , 1,1,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0 , 1,1,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0 , 1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0 , 1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0 , 0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0 ,

9、1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0 ; /*这是绘出几种方块的形状点阵*/static score;static level;void init(); void draw(); int genBox(); int getKey(); void lineFull(); int moveLeft(); int moveRight(); int moveDown(); int rotate(); int getW(); int getH(); void clearOldBox(); void putNewBox(); int collisionRotate(int

10、box4); void getMessage(); void dispatchMessage(); int timeCome(); void fallDown(); int gameOver(); main() int i; score=0; level=0; start(); getch(); printf(please input the level(1-5):); scanf(%d,&level); init(); do getMessage(); dispatchMessage(); while(!gameOver(); closegraph(); printf(nnYou lose.

11、); printf(your score is:%d,score); printf(nnnCome back again.nn Made by YangZhiChao. zhangpeng1480); getch(); closegraph(); void getMessage() if(MESSAGE) return; if(timeCome() MESSAGE=mADOWN; return; if(bioskey(1) MESSAGE=bioskey(0)8; return; void dispatchMessage() switch(MESSAGE) case mLEFT: moveLe

12、ft();break; case mRIGHT: moveRight();break; case mADOWN: moveDown();break; case mSPACE: rotate();break; case mDOWN: fallDown(); break; case mDRAW: draw();break; case mLINE: lineFull();break; case mGEN: genBox();break; case mESC: closegraph(); exit(0); default: MESSAGE=0; void fallDown() /*下落函数*/ whi

13、le(active) moveDown(); draw(); MESSAGE=mLINE; int timeCome() /*下落速度设置*/ static long tm, old; tm=biostime(0,tm)/level; if(tm-oldTIMEINT) return 0; else old=tm; return 1; void init() /*绘界面*/ int i,j,x1,y1,x2,y2; int driver=DETECT, mode=0; struct time t; randomize(); registerbgidriver(EGAVGA_driver); i

14、nitgraph(&driver,&mode,); cleardevice(); setfillstyle(SOLID_FILL,BLUE); /*背景颜色*/ bar(0,0,639,479); x1=AREAX; y1=AREAY-BOXW*MAXY; x2=AREAX+MAXX*BOXW; y2=AREAY; rectangle(-x1,-y1,+x2,+y2); setfillstyle(SOLID_FILL,BLACK); bar(+x1,+y1,-x2,-y2); y1=AREAY-MAXY*BOXW; y2=AREAY; setcolor(DARKGRAY); /*边框颜色*/

15、settextstyle(0,0,5);/*设置为4倍字体*/ outtextxy(210,90,Have Fun!); outtextxy(210,25,Tetris!); for(i=0;iMAXX;i+) x1=AREAX+i*BOXW; line(x1,y1,x1,y2); x1=AREAX; x2=x1+MAXX*BOXW; for(j=0;jMAXY;j+) y1=AREAY-j*BOXW; line(x1,y1,x2,y1); for(j=0;jMAXY;j+) for(i=0;iMAXX;i+) areaji=oldareaji=0; actX=0; actY=0; actW=

16、MAXX-1; actH=MAXY-1; draw(); MESSAGE=mGEN; gettime(&t); setcolor(WHITE); settextstyle(0,0,2); sprintf( 0,%2d:%02d:%02d.%02dn,t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); outtextxy(240,200, 0); int genBox() int i,j,boxidx; boxidx=random(7); FORCOLOR=random(7)+1; for(j=0;j4;j+) for(i=0;i=MAXX)curX=MAXX-

17、1-curW; curY=MAXY-1-curH; newX=curX; newY=curY; actX=curX;actY=curY; actW=newW=curW; actH=newH=curH; active=1; if(collision(box) return 0; putNewBox(); draw(); MESSAGE=0; return 1; void lineFull() /*判断消行函数*/ int row,col, rowEnd,full,i,j; rowEnd=newY+newH; if(rowEnd=MAXY-1) rowEnd=MAXY-2; for(row=new

18、Y; row=rowEnd;) full=1; for(col=0;colMAXX;col+) if(!arearowcol)full=0; break; if(!full)+row; continue; for(j=row; jMAXY-1;j+) for(i=0;iMAXX;i+) areaji=areaj+1i; actX=0;actY=row; actW=MAXX-1; actH=MAXY-1-row; draw(); rowEnd-; score=score+1; MESSAGE=mGEN; void draw() int row,col,x1,y1,x2,y2; for(row=a

19、ctY;row=actY+actH;row+) for(col=actX;col=actX+actW;col+) if(arearowcol!=oldarearowcol) if(arearowcol=0) setfillstyle(SOLID_FILL,BACKCOLOR); else setfillstyle(SOLID_FILL,FORCOLOR); x1=AREAX+col*BOXW; x2=x1+BOXW; y1=AREAY-(row+1)*BOXW; y2=y1+BOXW; bar(+x1,+y1,-x2,-y2); oldarearowcol=arearowcol; MESSAG

20、E=0; int moveLeft() /*方块左移*/ newX=curX-1; clearOldBox(); sound(500); delay(1000); nosound(); if(collision(box) newX=curX; putNewBox(); MESSAGE=0; return 0; putNewBox(); actW=curW+1; actX=curX=newX; MESSAGE=mDRAW; return 1; int moveRight() /*方块右移*/ newX=curX+1; clearOldBox(); sound(600); delay(1000);

21、 nosound(); if(collision(box) newX=curX; putNewBox(); MESSAGE=0; return 0; putNewBox(); actW=curW+1; actX=curX; curX=newX; MESSAGE=mDRAW; return 1; int moveDown() /*方块下落*/ int i,j; newY=curY-1; clearOldBox(); if(collision(box) newY=curY; putNewBox(); active=0; MESSAGE=mLINE; return 0; putNewBox(); a

22、ctH=curH+1; actY=newY; curY=newY; MESSAGE=mDRAW; return 1; int rotate() /*方块旋转*/ int newBox44; int i,j; clearOldBox(); for(j=0;j4;j+) for(i=0;i4;i+) newBoxji=0; for(j=0;j4;j+) for(i=0;i4;i+) newBoxcurW-ij=boxji; newW=curH; newH=curW; if(collisionRotate(newBox) newW=curW; newH=curH; newX=curX; newY=c

23、urY; putNewBox(); MESSAGE=0; return 0; for(j=0;j4;j+) for(i=0;icurH? newH:curH; actW=curX+actH-newX; actX=newX; actY=newY; curX=newX; curY=newY; curW=newW; curH=newH; MESSAGE=mDRAW; return 1; int getW() int i,j; for(i=3;i0;i-) for(j=0;j0;j-) for(i=0;i4;i+) if(boxji) return j; return 0; void clearOld

24、Box() int i,j; for(j=0;j=curH; j+) for(i=0;i=curW; i+) if(boxji) areacurY+jcurX+i=0; void putNewBox() int i,j; for(j=0;j=newH;j+) for(i=0;i=newW;i+) if(boxji) areanewY+jnewX+i=FORCOLOR; int collision(int cbox4) /*碰撞判断*/ int i,j; if(newX=MAXX) return 1; if(newY0) return 1; for(j=0;j=newH;j+) for(i=0;

25、i=MAXX) newX=MAXX-1-newW; if(newY+newH=MAXY) newY=MAXY-1-newH; if(collision(cbox) return 1; for(i=0;i=newW;i+) for(j=0;jMAXY-3)return 1; else return 0; int start() /*开机logo*/ char c2*mid80; double r,alpha,x,y; int i,j,seta; for(i=0;i2*mid;i+) for(j=0;j80;j+) cij= ; for(i=0;i2*mid;i+) ci79=0; for(seta=0;seta45;seta+)

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2