版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第18页共18页程序设计综合实验设计文档惠州学院HUIZHOU课程名称:程序设计综合实验姓名:实验名称:俄罗斯方块学号:任课教师:专业:计算机科学与技术班级:计算机科学与技术1班实验时间:第一周至第十二周实验成绩:批阅教师签字:综合实验项目:俄罗斯方块游戏1、问题需求(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。2、总体设计:(1)用数组存放方块(2)输出地图(3)在地图里面输出方块(4)开始游戏(5)方块的旋转(6)方块是否能下落(7)判断方块是否能下落(8)提示下一个即将下落的方块(9)控制方块的下落速度(10)分成10等级,等级越高方块下落得更快(11)消行处理(12)游戏结束3、详细设计设计说明:本程序运行代码如下:#include<conio.h>#include<stdlib.h>#include<windows.h>#include"colorConsole.h"#defineSQUARE_COLORFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY//方块的颜色#defineup72#definedown80#defineleft75#defineright77#defineesc27#defineMAPW12//地图的宽度#defineMAPH20//地图的高度BOOLisavailable(inta[],intx,inty,intw,inth);//判定是否能放下voidturn(inta[][4],intw,inth,int*x,inty);//转动int*create();//创建方块voidinit(); //初始化工作 voiddrawblocks(inta[],intw,inth,intx,inty,WORDwColors[],intnColors);voidclearcache();//清除键盘缓冲区voidend();voidclearsquare(int*a,intw,inth,intx,inty);voidgameover();voiddeletemap(intm[][MAPW],introw,intw,inth);//消除一行intdx=30,dy=5;//屏幕上的偏移量intscore=0,level=0;intmap[MAPH][MAPW];inta1[4][4]={{1},{1,1,1}};inta2[4][4]={{0,1},{1,1,1}};inta3[4][4]={{1,1},{0,1,1}};inta4[4][4]={{0,0,1},{1,1,1}};inta5[4][4]={{0,1,1},{1,1}};inta6[4][4]={{1,1,1,1}};inta7[4][4]={{1,1},{1,1}};inta[4][4];intmain(){ init(); int*b=NULL; b=create();//预创建方块 intq=0; intsign,blank,x,y; while(1) { for(inti=0;i<4;i++)//复制方块 for(intj=0;j<4;j++) if(a[i][j]=*(b+i*4+j))blank=i; y=1-blank;x=4; clearsquare(&a[0][0],4,4,13,13); b=create(); HANDLEhandle; handle=initiate(); WORDwColors[1]={FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY}; drawblocks(b,4,4,13,13,wColors,1); wColors[0]=SQUARE_COLOR; drawblocks(&a[0][0],4,4,x,y,wColors,1); clearcache(); charstring[5]; wColors[0]=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY; textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10)); textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10)); sign=1; while(sign) { intdelay=0,max_delay=100-10*level;//延迟量 while(delay<max_delay) { if(_kbhit())//用if避免按住键使方块卡住 { intdraw=0; intkey=_getch(); switch(key) { caseup: clearsquare(&a[0][0],4,4,x,y); turn(a,4,4,&x,y); draw=1; break; casedown: delay=max_delay; break; caseleft: if(isavailable(&a[0][0],x-1,y,4,4)) { clearsquare(&a[0][0],4,4,x,y); x--; draw=1; } break; caseright: if(isavailable(&a[0][0],x+1,y,4,4)) { clearsquare(&a[0][0],4,4,x,y); x++; draw=1; } break; caseesc: end(); break; } if(draw) { HANDLEhandle; handle=initiate(); WORDwColors[1]={SQUARE_COLOR}; drawblocks(&a[0][0],4,4,x,y,wColors,1); draw=0; } } _sleep(8);delay++; } if(isavailable(&a[0][0],x,y+1,4,4))//判断是否能下移 { clearsquare(&a[0][0],4,4,x,y); y++; HANDLEhandle; handle=initiate(); WORDwColors[1]={SQUARE_COLOR}; drawblocks(&a[0][0],4,4,x,y,wColors,1); } else { sign=0;//标记,使跳出while(sign)循环,产生新方块 if(y<=1)gameover();//是否结束 for(inti=0;i<4;i++)//放下方块 for(intj=0;j<4;j++) if(a[i][j]&&((i+y)<MAPH-1)&&((j+x)<MAPW-1)) map[i+y][j+x]=a[i][j]; intfull,k=0; for(i=y;i<min(y+4,MAPH-1);i++) { full=1; for(intj=1;j<11;j++) if(!map[i][j])full=0; if(full)//消掉一行 { deletemap(map,i,MAPW,MAPH); k++; q++; score=score+k; level=min(q/30,9); } } } } } returnEXIT_SUCCESS;}BOOLisavailable(inta[],intx,inty,intw,inth){ for(inti=max(y,1);i<y+h;i++) for(intj=x;j<x+w;j++) if(map[i][j]&&a[w*(i-y)+j-x]) return0; return1;}int*create(){ int*a=NULL; intc=rand()%7; switch(c) { case0: a=&a1[0][0];break; case1: a=&a2[0][0];break; case2: a=&a3[0][0];break; case3: a=&a4[0][0];break; case4: a=&a5[0][0];break; case5: a=&a6[0][0];break; case6: a=&a7[0][0];break; } returna;}voidinit() //初始化工作 { for(inti=0;i<20;i++) { map[i][0]=-2; map[i][11]=-2; } for(i=0;i<12;i++) { map[0][i]=-1; map[19][i]=-1; } map[0][0]=-3; map[0][11]=-3; map[19][0]=-3; map[19][11]=-3; HANDLEhandle; handle=initiate(); WORDwColors[1]={FOREGROUND_GREEN|FOREGROUND_INTENSITY}; textout(handle,26+dx,3+dy,wColors,1,"分数"); textout(handle,26+dx,7+dy,wColors,1,"等级"); textout(handle,26+dx,11+dy,wColors,1,"下一个方块提示"); wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY; drawblocks(&map[0][0],12,20,0,0,wColors,1); textout(handle,dx,dy,wColors,1,"
══════════
"); wColors[0]=FOREGROUND_GREEN|FOREGROUND_INTENSITY; textout(handle,dx-16,dy,wColors,1,"按任意键开始"); wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY; textout(handle,dx-15,dy+3,wColors,1,"制作者"); wColors[0]=FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY; textout(handle,dx-15,dy+5,wColors,1,"赵强"); intx=_getch(); srand(x); textout(handle,dx-16,dy,wColors,1,"");}voiddrawblocks(inta[],intw,inth,intx,inty,WORDwColors[],intnColors){ HANDLEhandle; handle=initiate(); inttemp; for(inti=0;i<h;i++) for(intj=0;j<w;j++) if((temp=a[i*w+j])&&y+i>0) { if(temp==-3) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"◆"); elseif(temp==-2) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"║"); elseif(temp==-1) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"═"); elseif(temp==1) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,"■"); }}voidclearcache(){ while(_kbhit()) { _getch(); }}voidend(){ exit(EXIT_SUCCESS);}voidturn(inta[][4],intw,inth,int*x,inty){ intb[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; intsign=0,line=0; for(inti=h-1;i>=0;i--) { for(intj=0;j<w;j++) if(a[i][j]) { b[j][line]=a[i][j]; sign=1; } if(sign) { line++; sign=0; } } for(i=0;i<4;i++) if(isavailable(&b[0][0],*x-i,y,w,h)) { *x-=i; for(intk=0;k<h;k++) for(intj=0;j<w;j++) a[k][j]=b[k][j]; break; }}voidclearsquare(int*a,intw,inth,intx,inty){ HANDLEhandle; handle=initiate(); WORDwColors[1]={SQUARE_COLOR}; for(inti=0;i<h;i++) for(intj=0;j<w;j++) if(a[i*w+j]&&i+y>0) textout(handle,2*(x+j)+dx,y+i+dy,wColors,1,"");}voidgameover(){ HANDLEhandle; handle=initiate(); WORDwColors[1]={FOREGROUND_RED|FOREGROUND_GREEN}; textout(handle,7+dx,10+dy,wColors,1,"游戏结束"); clearcache(); _getch(); exit(EXIT_SUCCESS);}voiddeletemap(intm[][MAPW],introw,intw,inth){ HANDLEhandle; handle=initiate(); WORDwColors[1]={SQUARE_COLOR}; textout(handle,2+dx,row+dy,wColors,1,"﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌"); _sleep(100); for(inti=row;i>1;i--) { clearsquare(&m[i][1],MAPW-2,1,1,i); for(intj=1;j<MAPW-1;j++) m[i][j]=m[i-1][j]; drawblocks(&m[i][1],MAPW-2,1,1,i,wColors,1); } for(i=1;i<MAPW-1;i++) m[1][i]=0;}HANDLEinitiate(){ HANDLEhOutput; hOutput=GetStdHandle(STD_OUTPUT_HANDLE); returnhOutput;}BOOLtextout(HANDLEhOutput,intx,inty,WORDwColors[],intnColors,LPTSTRlpszString){DWORDcWritten;BOOLfSuccess;COORDcoord; coord.X=x;//startatfirstcellcoord.Y=y;//offirstrowfSuccess=WriteConsoleOutputCharacter(hOutput,//screenbufferhandlelpszString,//pointertosourcestringlstrlen(lpszString),//lengthofstringcoord,//firstcelltowriteto&cWritten);//actualnumberwrittenif(!fSuccess)cout<<"error:WriteConsoleOutputCharacter"<<endl; for(;fSuccess&&coord.X<lstrlen(lpszString)+x;coord.X+=nColors){fSuccess=WriteConsoleOu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林大学《领导科学》2021-2022学年第一学期期末试卷
- 吉林大学《机器学习与模式识别课程设计I》2021-2022学年期末试卷
- 2024建筑安装工程设计合同书新
- 环保型环卫保洁服务方案
- 电力工程脚手架搭建方案
- 名班主任工作室教学方法总结
- 在线教育售后服务方案
- 2024-2025学年新教材高中政治第一单元探索世界与把握规律2.2运动的规律性课时作业含解析统编版必修4
- 新标准-实+用综合教程(第三版)1学习通超星期末考试答案章节答案2024年
- 2024年二手私房交易合同模板
- 股权优先优先回购权协议书
- 供应商调查表模板及范文大全
- 浙江省绍兴市诸暨市2023-2024学年七年级上学期期末语文试题
- 一鼓作气成语故事ppt
- 透析中合并心衰护理课件
- 新生儿脐疝与护理课件
- 提升班组学习能力的组织与培训方法
- 慢性病的心理预防及调适护理课件
- 装备训练形势分析报告
- 传感器原理温度传感器资料课件
- 输液港相关护理课件
评论
0/150
提交评论