您的当前位置:首页正文

俄罗斯方块游戏的设计与实现总结

2022-07-27 来源:汇智旅游网
俄罗斯方块游戏的设计与实现总结

1游戏设计人员及具体分工

游戏参与人员:

刘丹:负责整个游戏的数据结构设计与文档起草与修改及部分编码。

葛瑞:负责俄罗斯方块游戏的界面绘制,并参与部分文档的编写和代码编写。

王书林:负责游戏的设计,代码的整合,部分游戏的实现以及一些文档的编写。

李震:负责整个游戏的测试工作以及测试计划和文档的编写。

郑舒:负责信息收集,游戏中的界面设计,部分需求文档编写。

2游戏中已实现的功能

整个游戏基本的游戏更能已经实现,并且再后期游戏的开发中又添加了附

加游戏—贪吃蛇游戏。具体功能如下: 俄罗斯方块:

1:方块的翻转 2:方块的变形 3:加速下落

4:主界面采用位图显示

5:通过不同的选择进入不同的游戏 6:自动计分功能及显示 7:背景音乐播放 8:中途退出游戏 9:显示预出现方块 贪吃蛇:

1:食物的自动出现 2:蛇移动方向的改变 3:自动计分功能 4:中途退出功能 5:背景音乐的播放

3 游戏中尚未完成的功能及其原因

在整个游戏中由于种种原因使得一些原定的共能没有实现,具体未完成的功能如下:

1:游戏的积分榜显示

虽然在游戏中进行了有效的计分功能,但由于一直把它定位整个游戏的最后完成部分,但由于中途要对整个的游戏从单机版改成网络版而出现了一些开发计划改变,而当初我们选择的开发环境由于是比较早的TURBO C开发环境导致实现网络部分的两个重要头文件没有能更找到,所以时间上的浪费让我们少做了很多东西,但我们已经对该功能的实现接口进行了设计,只是具体没有进行编码。 2:游戏的对战实现

由于在前期的游戏开发中没有考虑进行对战,所以前期的开发环境选择了turbo c 而在后期的改变时无法进行利用socket 进行通信因为缺少两个头文件,而在网上没有找到这两个头文件,所以一直没有没能实现对战功能。并且影响了很多后期的开发。 3:进行等级设置

在进行游戏开发是为了方便进行调试,直接定义了一个全局变量进行时间延迟设置,而不知道什么原因时间设置后导致运行时不稳定,经过很多次时间修改后得到了一个相对稳定的时间延迟,前期设计是准备利用一个函数接口进行该值的设定,待后来由于没有能够调试处一个比较很好的时间延迟,所以就没有进行对该接口的实现。

4 游戏中部分的代码实现

1:初始界面的绘制

void unit() {

int i,j;

int gd=DETECT,gm; delayTime=2; for(i=0;i<17;i++) for(j=0;j<10;j++) { box[i][j]=0; box_color[i][j]=0; }

initgraph(&gd,&gm,\"D:\\\c\\\\bgi\"); setcolor(6);

rectangle(40,0,600,455); rectangle(39,1,601,456);

setcolor(7);

for(i=0;i<17;i++) for(j=0;j<10;j++)

rectangle(55+25*j,15+25*i,80+25*j,40+25*i); for(i=0;i<4;i++) for(j=0;j<4;j++)

rectangle(405+25*j,50+25*i,430+25*j,75+25*i); setcolor(7);

outtextxy(435,25,\"NEXT\"); outtextxy(370,180,\"SCORE\"); rectangle(440,170,505,195); outtextxy(440,210,\"HELP\");

outtextxy(430,220,\"LEFT:MOVE LEFT\"); outtextxy(430,240,\"RIGHT:MOVE RIGHT\"); outtextxy(430,260,\"DOWN:MOVE DOWN\"); outtextxy(430,280,\"UP:CHANGE\"); getch(); }

2:产生下一个方块 void generate() {

int ra;

randomize(); ra=random (7); nowblock1=ra; state=0; switch(ra) {

case 0: /*biao shi fang kuai*/ a1=4; b1=5; c1=14; d1=15; color=4; break;

case 1: /*biao shi shu tiao*/ a1=4; b1=14; c1=24; d1=34; color=1; break;

case 2: /*biao shi L*/

a1=5; b1=15; c1=25; d1=26; color=14; break;

case 3: /*biao shi fan L*/ a1=5; b1=15; c1=25; d1=24; color=12; break;

case 4: /*biao shi Z*/ a1=4; b1=5; c1=15; d1=16; color=15; break; case 5: /*biao shi fan Z*/ a1=5; b1=6; c1=15; d1=14; color=5; break; case 6: /*biao shi fan T*/ a1=4; b1=13; c1=14; d1=15; color=3; break;

}

draw_next(ra); }

3:方块的消去 { direction=0; if(CanMove(direction)) goto A;

else {

box[a/10][a%10]=1; box[b/10][b%10]=1; box[c/10][c%10]=1; box[d/10][d%10]=1; box_color[a/10][a%10]=nowcolor; box_color[b/10][b%10]=nowcolor; box_color[c/10][c%10]=nowcolor; box_color[d/10][d%10]=nowcolor; /*generate();*/ goon=1; a=a1; b=b1; c=c1; d=d1; nowBlock=nowblock1; nowcolor=color;

if(box[a/10][a%10]==1||box[b/10][b%10]==1||box[c/10][c1%10]==1||box[d/10][d%10]==1) { flag=1; Repaint(); break; } else Repaint(); for(i=16;i>=0;i--) { for(j=9;j>=0;j--) { if(box[i][j]==0) break; } if(j==-1) { score+=10; for(m=i;m>0;m--) for(n=0;n<10;n++) { box[m][n]=box[m-1][n]; box_color[m][n]=box_color[m-1][n]; }

for(m=0;m<10;m++) { box[0][m]=0; box_color[0][m]=0; } i++; Repaint(); sprintf(s,\"%d\ outtextxy(450,180,s); } } } } 4:位图显示:

void ShowBMP(char c[]) {

int i,j;

unsigned int bfType; unsigned int biBitCount;

unsigned long biCompression; unsigned int index=0; char rgb[4]; char *p; FILE *fp;

if((fp=fopen(c,\"rb\")) == NULL) {

printf(\"Can't open this file!\"); getch(); exit(0); }

fseek(fp,54,SEEK_SET); for(i=0;i<256; i++) {

rgb[B]=fgetc(fp);; /*read blue;*/ rgb[G]=fgetc(fp);; /*read green */ rgb[R]=fgetc(fp); /*read red */ fgetc(fp);

outp(0x3c6,0xff); outp(0x3c8,i);

outp(0x3c9,rgb[R]>>2); /*写入调色板*/ outp(0x3c9,rgb[G]>>2); outp(0x3c9,rgb[B]>>2); }

p=(char *)malloc(1); if(p==NULL) {

printf(\"\"); exit(0); }

for(i=SCREEN_HEIGHT-1;i>=0;i--) /*直接写屏*/ {

fseek(fp,1078+(long)(i)*SCREEN_WIDTH,SEEK_SET);

/* fread(&video_buf[i*SCREEN_WIDTH],SCREEN_WIDTH,1,fp); */ for(j=0;jfread(p,1,1,fp);

video_buf[index] = *p; index++; } }

free(p); fclose(fp); }

4:艺术清屏:

void JalousieScreen(char c[]) /*百叶窗显示图片*/ {

int i,j,k;

unsigned int index=0; unsigned char *p; FILE *fp;

if((fp=fopen(c,\"rb\")) == NULL) {

printf(\"Can't this file!\"); getch(); exit(0); }

p=(char *)malloc(1); if(p==NULL) {

printf(\"\"); exit(0);

}

for(k=SCREEN_HEIGHT-1;k>SCREEN_HEIGHT-11; k--) {

index =0;

index += SCREEN_WIDTH*(SCREEN_HEIGHT-k-1); for(i=k;i>=0;i-=10) {

fseek(fp,1078+(long)(i)*SCREEN_WIDTH,SEEK_SET);

for(j=0;jfread(p,1,1,fp);

video_buf[index] = *p; index++; }

delay(1000);

index += SCREEN_WIDTH*9; } }

free(p); fclose(fp); }

5 开发总结

虽然在开发中我们遇到了很多的难题,并且第一次利用turbo C 进行图形界面

开发,所以在游戏的开发过程中前期设计出现了一些问题,但在我们团队的共同努力下还是将基本的内容完成,所以虽然很简单,但毕竟是我们几个人一起做的东西,还是有很多的收获,尽管和我们的预期值有很大的差别,我们希望在以后的时间能够将其完善。

通过这次游戏开发我们也了解了如何进行队员分工,充分利用每一个人的特长去共同完成我们的东西。在一个团队中,团结才是最重要,同时也让自己对C语言的开发有了更进一步的理解。

因篇幅问题不能全部显示,请点此查看更多更全内容