版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档供参考,可复制、编制,期待您的好评与关注! #include #include #include #include #include #include colorConsole.h /老师的文件void begin(); /开始游戏void frame(); /边框设定int * getblocks(); /方块产生void move(int line); /移动void drawblocks(int line); /方块显示void clearsquare(int line); /方块擦出void turn(int line); /方块旋转bool isavailable(int lin
2、e); /判断是否能下落void remember(int line); /记忆方块位置void deleteline(int line); /方块满一行消除bool ifgameover(); /判断是否游戏结束void end(); /游戏结束 #define up 72#define down 80#define left 75#define right 77#define esc 27HANDLE handle;int a144=1,1,1,1; /七种方块的二维数组int a244=0,1,1,1,1;int a344=1,1,0,1,1;int a444=0,0,1,1,1,1;i
3、nt a544=0,1,1,1,1;int a644=1,1,1,1;int a744=1,1,1,1;int row=0; /列数int score=0;int level=0;int * block1=NULL; int * block2=NULL;int * block3=NULL;int coordinate1218=0; /坐标数组,边框12*18(最后一行,两边边框计算在内)int judge=0;int scorex=0;int temp44=0;void main() /主函数 int t=1;handle = initiate();while(t)t=0; begin();
4、sndPlaySound(music.wav,SND_LOOP|SND_ASYNC); frame(); WORD wColors1; wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY; for(int k=1;k=999999;k+)if(ifgameover() /判断是否结束 textout(handle,34,10,wColors,1,Game Over); Sleep(800); end(); else if(k=1)block2=getblocks();block3=block2; /block2指向将出现的
5、方块地址block2=getblocks(); /获取下一个新的方块block1=block3; row=52; clearsquare(16); /擦除next的方块block1=block2;drawblocks(15); /在next显示下一块方块图形row=34;block1=block3;for(int i=4;i=7;i+) /所构建的方块图形最多只有占有两排,所以只用4-7即可对应 if(*(block1+i)textout(handle,26+i*2,4,wColors,1,); /方块先露出下面部分Sleep(500-50*level);for(int line=4;line
6、=22;line+) /方块自主下落,方块从第四排开始出现if(isavailable(line) /检验刚产生的方块是否碰壁,碰到已落方块clearsquare(line); /消除方块先露初的下面分drawblocks(line); /产生完整的下落方块move(line);elseremember(line); /落定后将这些位置对应的all数组中元素置1deleteline(line); /消行以及加分if(line=4)judge=1;break;void begin()int i=1;WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUN
7、D_INTENSITY;WORD wColors12;wColors10=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY; wColors11=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,18,4,wColors,1, );textout(handle,18,5,wColors,1, );textout(handle,18,6,wColors,1,);textout(handle,18,7,wColors,1,);textout(handle,18,8,wColors,1, );
8、textout(handle,18,9,wColors,1,);textout(handle,18,10,wColors,1,);textout(handle,18,11,wColors,1,);textout(handle,18,12,wColors,1,);textout(handle,18,13,wColors,1,);textout(handle,18,14,wColors,1,);textout(handle,18,15,wColors,1, );textout(handle,18,16,wColors,1, 简单 中等);textout(handle,18,17,wColors,1
9、,请按1 请按2);textout(handle,18,18,wColors,1, );textout(handle,18,19,wColors,1, );textout(handle,18,20,wColors,1, 困难 请按 3); textout(handle,54,22,wColors,1,MADE BY );while(i)textout(handle,30,8,wColors1,2,俄罗斯方块);Sleep(800);textout(handle,30,8,wColors1,2, ); Sleep(800); if (_kbhit() /输入等级switch(_getch()ca
10、se 1: level=1;i=0; /跳出循环break;case 2: level=4;i=0;break;case 3: level=7;i=0;break;system(cls); /清屏void frame() /边框的设定WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY;WORD wColors11;wColors10=FOREGROUND_RED|FOREGROUND_INTENSITY;for(int i=0;i=11;i+)coordinatei17=1; /底排边框定义为
11、1for(int j=0;j=17;j+)coordinate0j=1; /两边边框定义为1coordinate11j=1;char string5;textout(handle,59,5,wColors,1,itoa(level,string,10); textout(handle,52,5,wColors,1,level: );textout(handle,52,9,wColors,1,score: 0);textout(handle,52,13,wColors,1,next:);textout(handle,10,6,wColors1,1,暂停 SPACE);textout(handle
12、,10,7,wColors1,1,退出 ESC);textout(handle,10,8,wColors1,1,翻转 );textout(handle,10,9,wColors1,1,向右 );textout(handle,10,10,wColors1,1,向左 );textout(handle,10,11,wColors1,1,加速 );textout(handle,33,2,wColors,1,来战个痛);for(int m=13;m=24;m+)textout(handle,2*m,3,wColors,1,); /上边框for(int n=4;n=21;n+)textout(handle
13、,26,n,wColors,1,); /左边框for(int k=4;k=21;k+)textout(handle,48,k,wColors,1,); /右边框for(int l=13;l=23;l+)textout(handle,2*l,21,wColors,1,); /下边框textout(handle,26,3,wColors,1,);textout(handle,48,3,wColors,1,);textout(handle,26,21,wColors,1,);textout(handle,48,21,wColors,1,);int * getblocks() /随机方块生成int *
14、 m=NULL;srand(time(NULL); int n=rand()%7; switch(n)case 0:m=&a100;break;case 1:m=&a200;break;case 2:m=&a300;break;case 3:m=&a400;break;case 4:m=&a500;break;case 5:m=&a600;break;case 6:m=&a700;break;return m;void drawblocks(int line) /出现方块WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGRO
15、UND_INTENSITY;for(int j=0;j=15;j+) int temp;temp=j/4;if(*(block1+j)textout(handle,row+j*2-temp*8,line+temp,wColors,1,);void clearsquare(int line) /方块消失WORD wColors1;wColors0=FOREGROUND_BLUE|FOREGROUND_INTENSITY;if(line=4) /针对消除刚产生的下排textout(handle,34,4,wColors,1, );textout(handle,36,4,wColors,1, );t
16、extout(handle,38,4,wColors,1, );textout(handle,40,4,wColors,1, );elsefor(int m=0;m=15;m+) int temp;temp=m/4; /得0-3对应方块数组1-4行if(*(block1+m)textout(handle,row+m*2-temp*8,line-1+temp,wColors,1, );void move(int line) /方块的左右移动,加速下落,翻转等int mid=0,speed=100-10*level;while(midspeed)if (_kbhit()switch(_getch(
17、)case 72: /翻转turn(line);break;case 75: /左移row=row-2; /纵坐标减2if(isavailable(line) /判断是否能移动row=row+2;clearsquare(line+1); /消除原来图案,line+1是避免line=4程序出错row=row-2;drawblocks(line); /出现新图案elserow=row+2; /若不能移动则纵坐标不变break;case 77: /右移row=row+2;if(isavailable(line)row=row-2;clearsquare(line+1);row=row+2;drawb
18、locks(line);elserow=row-2;break;case 80: /加速下落,即直接跳除循环mid=speed;break;case 27: /终止游戏end();break; case 32: /暂停int flag=1;while(flag)if (_kbhit()if(_getch()=32)flag=0;break;elseSleep(10);default:break;Sleep(8); /使方块延迟mid+;void turn(int line)clearsquare(line+1); /消除原来的图案int b44=0; /保存旋转前的方块int num=0,l=
19、0;for(int m=0;m=3;m+)for(int n=0;n=0;i-) /按行从下向上扫描for(int j=0;j4;j+) /按列从左向右扫描if(bij) /如果为有效点,则进行90度旋转 tempjl=bij; num=1;if(num)l+;num=0;block1=&temp00;if(isavailable(line)drawblocks(line);elsefor(int p=0;p=3;p+)for(int q=0;q=3;q+)temppq=bpq;block1=&temp00;drawblocks(line);bool isavailable(int line)
20、 /检验,即看方块即将存在位置是否已经有1int x,y;for(int m=0;m=15;m+) int temp;temp=m/4;x=row/2-13-4*temp+m; /边框左边已有13个位置y=line-4+temp; /上面已有4个位置if(*(block1+m)&coordinatexy) /相与为1则返回0,否则跳出并循环继续return 0;void remember(int line) /记忆int x,y;for(int m=0;m=15;m+) int temp;temp=m/4;x=row/2-13-temp*4+m;y=line-4+temp;if(*(block1+m) /如果当前位置为1,则返回原位置,并设置为1coordinatexy-1=1;void deleteline(int l) /消行WORD wColors1;wColors0=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY;int snum=0,b=0;for(int m=0;m=16;m+) /从上向下消去方块 if(coordinate1m=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上半年贵州事业单位联考黔西南州招聘1085人备考题库含答案详解(典型题)
- 2026四川自贡市第一人民医院招聘医疗辅助岗人员18人备考题库附答案详解(黄金题型)
- 2026广西崇左凭祥市退役军人服务中心见习人员招聘1人备考题库附参考答案详解(夺分金卷)
- 2026年安徽省合肥市庐江县沿湖治理建设管理中心公开选调工作人员1名备考题库附参考答案详解(b卷)
- 2026广东东莞市横沥镇中心幼儿园教职工招聘2人备考题库附答案详解(培优b卷)
- 2026广东江门市台山市应急救援和保障中心招聘7人备考题库带答案详解(能力提升)
- 2026广东佛山市顺德区龙潭小学招聘语文、心理临聘教师3人备考题库附参考答案详解(基础题)
- 2026广东深圳大学艺术学部赵璐特聘教授团队博士后招聘1人备考题库含答案详解(巩固)
- 2026上海交通大学医学院招聘91人备考题库完整参考答案详解
- 2026广东深圳医学科学院感染免疫课题组招聘备考题库完整答案详解
- 2026年哈尔滨五常市广源农林综合开发有限公司招聘工作人员5人笔试备考题库及答案解析
- 2025年农村人居环境五年评估报告
- 《开学第一课:龙马精神·梦想起航》课件 2025-2026学年统编版语文七年级下册
- 2026年洪湖市事业单位人才引进100人参考考试题库及答案解析
- 2026年中好建造(安徽)科技有限公司第一次社会招聘42人笔试参考题库及答案解析
- 北京市海淀区2025一2026学年度第一学期期末统一检测历史(含答案)
- 2026年科研仪器预约使用平台服务协议
- 2026年成都锦江人才发展有限责任公司公开招聘成都市锦江区编外人员的备考题库及参考答案详解1套
- GB/T 19831.1-2025石油天然气工业套管扶正器第1部分:弓形弹簧套管扶正器
- 浙江省杭州市拱墅区2024-2025学年四年级上册期末考试数学试卷(含答案)
- 新《增值税法实施条例》逐条解读课件
评论
0/150
提交评论