程序设计基础课程设计-俄罗斯方块游戏.doc

上传人:椰子壳 文档编号:3290722 上传时间:2019-08-08 格式:DOC 页数:17 大小:111.52KB
返回 下载 相关 举报
程序设计基础课程设计-俄罗斯方块游戏.doc_第1页
第1页 / 共17页
程序设计基础课程设计-俄罗斯方块游戏.doc_第2页
第2页 / 共17页
程序设计基础课程设计-俄罗斯方块游戏.doc_第3页
第3页 / 共17页
程序设计基础课程设计-俄罗斯方块游戏.doc_第4页
第4页 / 共17页
程序设计基础课程设计-俄罗斯方块游戏.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《程序设计基础课程设计-俄罗斯方块游戏.doc》由会员分享,可在线阅读,更多相关《程序设计基础课程设计-俄罗斯方块游戏.doc(17页珍藏版)》请在三一文库上搜索。

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 struct

3、int 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

4、,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,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,

5、1,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

6、,0,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,

7、0,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()

8、;void 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(TIM

9、ER,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()setc

10、olor(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,2

11、20,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) snowsn

12、ownum.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;nos

13、ound();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);r

14、ectangle(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(

15、SHAPE 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(

16、m=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; setfill

18、style(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+) forma

19、nnalm0annalm1=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+(annal

20、m1-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.ne

21、xt;/*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

22、(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+) /*将原方块位置改为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

23、=0;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(

24、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,130);sprintf(ch,%d,level);outtextxy(390,115,ch);free(p1);void operation()int newbox,nextbox,m,n,k=1,i,KEY,l,o;o=1;srand(un

25、signed)time(NULL);nextbox=rand()%19;while(o) if(k) /*产生新方块*/ x=0,y=4; /*还原x,y*/ Boxnumber=newbox=nextbox; nextbox=rand()%19; setfillstyle(1,BLACK); bar(360,160,430,250); nextboxfun(shapes,nextbox); i=0; color=shapesnewbox.color; for(m=0;m4;m+) for(n=0;n(36-level*2) /*TimerCounter每秒钟增加18*/ TimerCount

26、er=0; if(Downmobile() /*作下降处理*/ DownRedraw(); else FulllineJudge();k=1; KillTimer();六 心得体会通过此次C语言程序设计实践,本组实在是获益不浅!C语言是上个学期开的课程,当要开始设计的时候,还真不知从哪下手!可本组成员仍然有着十足的干劲与信心,在组长高正阳的带领下全组分工明确,班海燕与李晓惠主要负责程序的排版及修改,高正阳与陈东负责界面与声音的配置,全组互相帮助,积极上网查阅相关知识,经过这次的实践,使我们获得了很大的成效,更在全组的努力下成功的完成了本次课程设计,这次设计,让我们重新掌握了C语言,认识到了C语言的重要性与广泛性,而且还得到了用C语言解决实际问题的宝贵经验! 七 参考文献指导教师签字:教研室主任签字:审核时间 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1