欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

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

    • 资源ID:3290722       资源大小:111.52KB        全文页数:17页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    程序设计基础课程设计俄罗斯方块游戏院 系:计算机科学技术学院 班 级:师 计 09-2 班 组 长: 组 员:指导教师: 2009年12月23日一、实践的目的和要求加深对C语言课程所学知识的理解,进一步巩固C语言语法规则。学会编制结构清晰、风格良好、数据结构适当的语言程序,从而具备解决综合性实际问题的能力。二、实践内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。三、 实践任务1欢迎画面2. 附加声音界面3俄罗斯方块课程设计系统(自己设计界面)四、设计流程编程 五、相关程序#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<time.h>#include<dos.h>#include<bios.h>#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 structint 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,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,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,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,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();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(TIMER,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()setcolor(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,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;i<62;i+)sxi=(i+2)*10;cleardevice();while(!kbhit()Pr();if (snownum!=100) snowsnownum.speed=2+random(5); i=random(62); snowsnownum.x=sxi; snowsnownum.y=10-random(100);for(i=0;i<snownum;i+) putimage(snowi.x,snowi.y,save2,COPY_PUT); Pr();if(snownum!=100) snownum+;/*delay(300);*/setfillstyle(SOLID_FILL,15);for(i=0;i<snownum;i+) snowi.y+=snowi.speed; putimage(snowi.x,snowi.y,save1,COPY_PUT); if(snowi.y>500) snowi.y=10-random(200); change1+;if(change1=140)change1=10;nosound();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);rectangle(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(SHAPE shapes,int i) int m,n;for(m=0;m<4;m+) for(n=0;n<4;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=0;m<4;m+) if(annalm0!=k) if(formannalm0annalm1-1) return(0); k=annalm0; return(1);int Rightmobile()int m,k=-1;for(m=3;m>=0;m-) if(annalm0!=k) if(formannalm0annalm1+1) return(0); k=annalm0; return(1);int Downmobile()int m;for(m=0;m<4;m+) formannalm0annalm1=2; /*将方块此时的位置设置成2以方便后面的判断*/for(m=0;m<4;m+) if(formannalm0+1annalm1=1) /*如果等于1说明此处已经有方块*/ for(m=0;m<4;m+)/*将原本数值还原*/ formannalm0annalm1=1; return(0); for(m=0;m<4;m+) /*将原本数值还原*/ formannalm0annalm1=1;return(1);void LeftRedraw()int m;y-;for(m=0;m<4;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;m<4;m+) formannalm0annalm1=0;for(m=0;m<4;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 RightRedraw()int m;y+;for(m=0;m<4;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;m<4;m+) formannalm0annalm1=0;for(m=0;m<4;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;m<4;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;m<4;m+) formannalm0annalm1=0;for(m=0;m<4;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;/*k=此方块下一个方块的编号*/for(m=0;m<4;m+) formannalm0annalm1=2; for(m=0;m<4;m+) for(n=0;n<4;n+) if(formx+my+n=1&&shapesk.boxmn) for(m=0;m<4;m+) formannalm0annalm1=1;/*将2还原为1*/ return(0); for(m=0;m<4;m+) formannalm0annalm1=1; return(1);void change()int m,n,k,i=0;k=Boxnumber=shapesBoxnumber.next;/*等于要转变的方块编号*/for(m=0;m<4;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;m<4;m+) /*将原方块位置改为0*/ formannalm0annalm1=0;for(m=0;m<4;m+) /*重新记录新的形状坐标*/ for(n=0;n<4;n+) if(shapesk.boxmn) annali0=x+m; /*annal更新新的坐标*/ annali1=y+n; i+; for(m=0;m<4;m+) /*将新坐标设置为1并绘图*/ 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 FulllineJudge()void *p1;int m,n,i,k,p,q;char *ch;if(!(p1=malloc(imagesize(200,30,350,255) printf("开辟空间失败n"); getch(); exit(1);i=0;for(m=14;m>=0;m-) /*逐行判断是否有满行情况*/ for(n=1;n<=10;n+) if(!formmn) /*如果有一个为0那么退出本行的循环*/ break; else if(n=10) /*1-10全为1*/ i+; /*用来记录所消行数*/ for(p=m;p>=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,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(unsigned)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;m<4;m+) for(n=0;n<4;n+) if(shapesnewbox.boxmn) /*将新方块在俄罗斯方块界面的坐标记录在annal中*/ annali0=0+m; /*记录坐标*/ annali1=4+n; if(form0+m4+n) setfillstyle(1,BLACK); bar(240,130,310,150); setcolor(RED); outtextxy(275,140,"GAME OVER"); getch(); o=0; form0+m4+n=1; setfillstyle(1,shapesnewbox.color); bar(200+n*15+1+45,30+m*15+1,200+n*15+15-1+45,30+m*15+15-1);/*将对应的位画上颜色*/ setcolor(LIGHTGRAY); rectangle(200+n*15+45,30+m*15,200+n*15+15+45,30+m*15+15); i+; k=0; if(bioskey(1) /*读取键盘*/ KEY=bioskey(0); else KEY=0; switch(KEY) case LEFT:/*左*/ if(Leftmobile() LeftRedraw();break; case RIGHT:/*右*/ if(Rightmobile() RightRedraw();break; case DOWN:/*下*/ if(Downmobile() DownRedraw(); else FulllineJudge();k=1;break; case UP:/*变形*/ if(UPmobile() change();break; case ESC:o=0;break; if(TimerCounter>(36-level*2) /*TimerCounter每秒钟增加18*/ TimerCounter=0; if(Downmobile() /*作下降处理*/ DownRedraw(); else FulllineJudge();k=1; KillTimer();六 心得体会通过此次C语言程序设计实践,本组实在是获益不浅!C语言是上个学期开的课程,当要开始设计的时候,还真不知从哪下手!可本组成员仍然有着十足的干劲与信心,在组长高正阳的带领下全组分工明确,班海燕与李晓惠主要负责程序的排版及修改,高正阳与陈东负责界面与声音的配置,全组互相帮助,积极上网查阅相关知识,经过这次的实践,使我们获得了很大的成效,更在全组的努力下成功的完成了本次课程设计,这次设计,让我们重新掌握了C语言,认识到了C语言的重要性与广泛性,而且还得到了用C语言解决实际问题的宝贵经验! 七 参考文献<<C/C+程序设计教程>><<C程序设计>><<C程序设计题解与上机指导>>指导教师签字:教研室主任签字:审核时间 年 月 日

    注意事项

    本文(程序设计基础课程设计-俄罗斯方块游戏.doc)为本站会员(椰子壳)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开