程序设计基础课程设计俄罗斯方块游戏_第1页
程序设计基础课程设计俄罗斯方块游戏_第2页
程序设计基础课程设计俄罗斯方块游戏_第3页
程序设计基础课程设计俄罗斯方块游戏_第4页
程序设计基础课程设计俄罗斯方块游戏_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础课程设计俄罗斯方块游戏院 系:计算机科学技术学院 班 级:师 计 09-2 班 组 长: 组 员:指导教师: 2009年12月23日一、实践的目的和要求加深对c语言课程所学知识的理解,进一步巩固c语言语法规则。学会编制结构清晰、风格良好、数据结构适当的语言程序,从而具备解决综合性实际问题的能力。二、实践内容在熟练掌握c语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文

2、件的读写操作等。三、 实践任务1欢迎画面2. 附加声音界面3俄罗斯方块课程设计系统(自己设计界面)四、设计流程五、相关程序#include#include#include#include#include#include#define left 0x4b00 /*键盘码*/#define right 0x4d00#define down 0x5000#define up 0x4800#define esc 0x011b#define timer 0x1c /* 时钟中断的中断号 */struct snowint x;int y;int speed;snow100;typedef structin

3、t box44;int color;int next;shape;int x=0,y=4,form1612= /*x,y是用作记录每个方块的最左上角的编号*/1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0

4、,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,; /*俄罗斯方块初始化界面*/shape shapes19=1,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0,cyan,1,1,1,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0,cyan,2,1,1,0,0, 0,1,0,0, 0,1,

5、0,0, 0,0,0,0,cyan,3,0,0,0,0, 0,0,1,0, 1,1,1,0, 0,0,0,0,cyan,0,0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0,magenta,5,1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0,magenta,6,1,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0,magenta,7,1,1,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0,magenta,4,1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0,yellow,9,0,1,1,0, 1,1,0

6、,0, 0,0,0,0, 0,0,0,0,yellow,8,0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0,brown,11,1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0,brown,10,0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0,white,13,1,0,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0,white,14,1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0,white,15,0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0,white,12,1,0,0,

7、0, 1,0,0,0, 1,0,0,0, 1,0,0,0,red,17,1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0,red,16,1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0,blue,18; int timercounter=0;int snownum=0;int size;int change1=10;int annal42,score=0,level=0,color,boxnumber;void plot();void operation();void *save1,*save2;void copy();void drawsnow();v

8、oid pr();void interrupt ( *oldhandler)();void interrupt newhandler( )timercounter+; timercounter=36;oldhandler();void settimer(void interrupt (*intproc)()oldhandler=getvect(timer);disable(); /* 设置新的时钟中断处理过程时,禁止所有中断 */setvect(timer,intproc);enable(); /* 开启中断 */void killtimer() disable();setvect(timer

9、,oldhandler);enable();void main()int gdriver=detect,gmode;settimer(newhandler); /* 修改时钟中断 */registerbgidriver(egavga_driver);initgraph(&gdriver,&gmode,c:turboc2);copy();drawsnow();closegraph();initgraph(&gdriver,&gmode,e:tc20hincludegraphics.h); /*初始化图形*/plot();operation();getch(); void copy()setcol

10、or(0);setfillstyle(solid_fill,15);fillellipse(200,200,4,4);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 fr=392,392,440,294,262,262,220,294,392,392, 440,532,440,392,262,262,220,294,392,294, 262,247,220

11、,196,392,294,330,294,262,262, 220,294,330,294,262,294,22,247,220,196;setcolor(change1/10);settextstyle(0,0,3);outtextxy(100,200,welcome to our game!”);sound(frchange1/10);void drawsnow()int i;int sx62;randomize();for(i=0;i62;i+)sxi=(i+2)*10;cleardevice();while(!kbhit()pr();if (snownum!=100) snowsnow

12、num.speed=2+random(5); i=random(62); snowsnownum.x=sxi; snowsnownum.y=10-random(100);for(i=0;isnownum;i+) putimage(snowi.x,snowi.y,save2,copy_put); pr();if(snownum!=100) snownum+;/*delay(300);*/setfillstyle(solid_fill,15);for(i=0;i500) snowi.y=10-random(200); change1+;if(change1=140)change1=10;nosou

13、nd();void plot()int i,j;char ch1=24,-,r,o,l,l,0, ch2=25,-,d,o,w,n,w,a,r,d,s,0, ch3=26,-,t,u,r,n, ,l,e,f,t,0, ch4=27,-,t,u,r,n, ,r,i,g,h,t,0;setcolor(lightgray);rectangle(200,30,350,255);i=0;while(i+)10) line(200+i*15,30,200+i*15,255);i=0;while(i+)15) line(200,30+i*15,350,30+i*15);setcolor(white);rec

14、tangle(170,270,390,330);outtextxy(190,280,ch1);outtextxy(270,280,ch2);outtextxy(190,300,ch3);outtextxy(290,300,ch4);outtextxy(190,320,esc-exit);settextjustify(1,1);outtextxy(390,50,score);outtextxy(390,100,lexel);outtextxy(390,150,next box);outtextxy(390,65,0);outtextxy(390,115,0);void nextboxfun(sh

15、ape shapes,int i) int m,n;for(m=0;m4;m+) for(n=0;n4;n+) if(shapesi.boxmn) setfillstyle(1,shapesi.color); bar(370+n*15+1,180+m*15+1,370+n*15+15-1,180+m*15+15-1); setcolor(lightgray); rectangle(370+n*15,180+m*15,370+n*15+15,180+m*15+15); int leftmobile()int m,k=-1; /*暂时存放annal中的坐标数据,用来判断左移是否成立*/for(m=

16、0;m=0;m-) if(annalm0!=k) if(formannalm0annalm1+1) return(0); k=annalm0; return(1);int downmobile()int m;for(m=0;m4;m+) formannalm0annalm1=2; /*将方块此时的位置设置成2以方便后面的判断*/for(m=0;m4;m+) if(formannalm0+1annalm1=1) /*如果等于1说明此处已经有方块*/ for(m=0;m4;m+)/*将原本数值还原*/ formannalm0annalm1=1; return(0); for(m=0;m4;m+)

17、/*将原本数值还原*/ formannalm0annalm1=1;return(1);void leftredraw()int m;y-;for(m=0;m4;m+) setfillstyle(1,black);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*将原图像位置设置为黑色框*/for(m=0;m4;m+) formannalm0annalm1=0;for(m=0;m4;m+) annalm1-; formannalm0annalm1=1; setfillst

18、yle(1,color);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*在新的位置重绘图像*/void rightredraw()int m;y+;for(m=0;m4;m+) setfillstyle(1,black);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*将原图像位置设置为黑色框*/for(m=0;m4;m+) formann

19、alm0annalm1=0;for(m=0;m4;m+) annalm1+; formannalm0annalm1=1; setfillstyle(1,color);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*在新的位置重绘图像*/void downredraw()int m,n;x+;for(m=0;m4;m+) setfillstyle(1,black);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1

20、-1)*15+15-1,30+annalm0*15+15-1); /*将原图像位置设置为黑色框*/for(m=0;m4;m+) formannalm0annalm1=0;for(m=0;m4;m+) annalm0+; formannalm0annalm1=1; setfillstyle(1,color); bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*在新的位置重绘图像*/int upmobile()int m,n,k;k=shapesboxnumber.next

21、;/*k=此方块下一个方块的编号*/for(m=0;m4;m+) formannalm0annalm1=2; for(m=0;m4;m+) for(n=0;n4;n+) if(formx+my+n=1&shapesk.boxmn) for(m=0;m4;m+) formannalm0annalm1=1;/*将2还原为1*/ return(0); for(m=0;m4;m+) formannalm0annalm1=1; return(1);void change()int m,n,k,i=0;k=boxnumber=shapesboxnumber.next;/*等于要转变的方块编号*/for(m

22、=0;m4;m+) setfillstyle(1,black);bar(200+(annalm1-1)*15+1,30+annalm0*15+1,200+(annalm1-1)*15+15-1,30+annalm0*15+15-1); /*将原图像位置设置为黑色框*/for(m=0;m4;m+) /*将原方块位置改为0*/ formannalm0annalm1=0;for(m=0;m4;m+) /*重新记录新的形状坐标*/ for(n=0;n4;n+) if(shapesk.boxmn) annali0=x+m; /*annal更新新的坐标*/ annali1=y+n; i+; for(m=0

23、;m=0;m-) /*逐行判断是否有满行情况*/ for(n=1;n=1;p-) for(q=1;q=10;q+) /*所有行数信息下降1行*/ formpq=formp-1q; for(p=1;p=10;p+) /*最顶行清零*/ form0p=0; getimage(200,30,350,30+m*15,p1); putimage(200,45,p1,0); m+; if(i=4) /*如果已经消掉4行则不用再进行判断*/ break;if(i=1) /*一次所消行数进行不同分数奖励*/ score+=10;if(i=2) score+=30;if(i=3) score+=60;if(i=4) score+=100;setcolor(white); /*绘图部分*/sprintf(ch,%d,score);setfillstyle(1,black);bar(380,60,400,80);outtextxy(390,65,ch);level=score/500;setfillstyle(1,black);bar(380,110,400,

温馨提示

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

评论

0/150

提交评论