C实现的俄罗斯方块参考.docx
- 文档编号:10117494
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:14
- 大小:17.89KB
C实现的俄罗斯方块参考.docx
《C实现的俄罗斯方块参考.docx》由会员分享,可在线阅读,更多相关《C实现的俄罗斯方块参考.docx(14页珍藏版)》请在冰点文库上搜索。
C实现的俄罗斯方块参考
#include"Tetris.h"
intmain()
{
tetrister;
ter.RunGame();
return0;
}
#include
#include
#include
#include"Tetris.h"
usingstd:
:
cout;
usingstd:
:
endl;
intsharp[19][9]=//每个一维数组内有8个点,没两个点是一个形状的一个小方格,在4*4的表格中
{
{0,0,0,1,0,2,0,3,FOREGROUND_RED|FOREGROUND_INTENSITY},//长条形
{0,0,1,0,0,1,1,1,FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY},//方形
{0,0,0,1,1,1,2,1,FOREGROUND_GREEN|FOREGROUND_RED},//L形
{0,1,1,1,2,1,2,0,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY},//反L形
{0,0,1,0,1,1,2,1,FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_INTENSITY},//Z形
{1,0,2,0,0,1,1,1,FOREGROUND_GREEN|FOREGROUND_INTENSITY},//反Z形
{0,0,0,1,0,2,1,1,FOREGROUND_BLUE|FOREGROUND_INTENSITY},//土形
//上面形状的变换
{0,0,1,0,2,0,3,0,FOREGROUND_RED|FOREGROUND_INTENSITY},
{1,0,1,1,1,2,0,2,FOREGROUND_GREEN|FOREGROUND_RED},
{0,0,1,0,2,0,2,1,FOREGROUND_GREEN|FOREGROUND_RED},
{0,0,1,0,0,1,0,2,FOREGROUND_GREEN|FOREGROUND_RED},
{0,0,1,0,1,1,1,2,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY},
{0,0,1,0,2,0,0,1,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY},
{0,0,0,1,0,2,1,2,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY},
{1,0,0,1,1,1,0,2,FOREGROUND_BLUE|FOREGROUND_RED|FOREGROUND_INTENSITY},
{0,0,0,1,1,1,1,2,FOREGROUND_GREEN|FOREGROUND_INTENSITY},
{0,0,1,0,2,0,1,1,FOREGROUND_BLUE|FOREGROUND_INTENSITY},
{0,1,1,0,1,1,1,2,FOREGROUND_BLUE|FOREGROUND_INTENSITY},
{1,0,0,1,1,1,2,1,FOREGROUND_BLUE|FOREGROUND_INTENSITY}
};
inthigh[19]={4,2,2,2,2,2,3,1,3,2,3,3,2,3,3,3,2,3,2};//数组是用来保存上面每个一维数组的各个形状高度的
voidsetCurPos(inti,intj,intcolor=1|2|4)//设定鼠标的位置
{//color相当于自己选择颜色
HANDLEout=GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出句柄
SetConsoleTextAttribute(out,color);
COORDpos={i*2,j};
SetConsoleCursorPosition(out,pos);
}
voidtetris:
:
DrawMap()
{
//地图框架
for(inti=0;i<14;i++)//0-13
{
setCurPos(i,0);
cout<<"■";
}
for(inti=0;i<25;i++)//0-24
{
setCurPos(0,i);
cout<<"■";
setCurPos(13,i);
cout<<"■";
}
for(inti=0;i<14;i++)
{
setCurPos(i,24);
cout<<"■";
}
//information框架
for(inti=15;i<=25;i++)
{
setCurPos(i,0);
cout<<"■";
setCurPos(i,8);
cout<<"■";
}
for(inti=0;i<=8;i++)
{
setCurPos(15,i);
cout<<"■";
setCurPos(25,i);
cout<<"■";
}
setCurPos(16,12);
cout<<"俄罗斯方块(6D)";
setCurPos(16,15);
cout<<"分数:
"< setCurPos(16,16); cout<<"等级: "< } voidtetris: : initInterface() { charx; while (1) { system("cls"); cout<<"■■■■■■■■■■■■■■■■■■■"< cout<<"■■"< cout<<"■俄罗斯方块控制台版(6D)■"< cout<<"■■"< cout<<"■■■■■■■■■■■■■■■■■■■"< cout<<"■■"< cout<<"■A,D左右移动S向下加速■"< cout<<"■W转动方块空格键暂停■"< cout<<"■■"< cout<<"■■■■■■■■■■■■■■■■■■■"< cout<<"■■"< cout<<"■按1-9选择等级! ! ■"< cout<<"■■"< cout<<"■■■■■■■■■■■■■■■■■■■"< setCurPos(8,10); x=_getch(); if(x<='9'&&x>='1')//设置等级 { level=x-'0'; break; } } } voidtetris: : DrawBox(intx,inty,intid) { intnx=0,ny=0; intcolor=sharp[id][8]; for(inti=0;i<4;i++) { nx=x+sharp[id][i*2]; ny=y+sharp[id][i*2+1]; setCurPos(nx+1,ny+1,color); cout<<"■"; } } voidtetris: : ReBox(intx,inty,intid) { intnx=0,ny=0; for(inti=0;i<4;i++) { nx=x+sharp[id][i*2]; ny=y+sharp[id][i*2+1]; setCurPos(nx+1,ny+1); cout<<""; } } inttetris: : IsJudge(intx,inty,intid) { intnx=0,ny=0; for(inti=0;i<4;i++) { nx=x+sharp[id][i*2]; ny=y+sharp[id][i*2+1]; if(nx<0||nx>=12||ny<0||ny>=23||map[nx][ny]! =0)//不能放了,返回0 return0; } return1; } inttetris: : TurnBlock(intid) { switch(id) { caseA1: id=A2;break; caseA2: id=A1;break; caseB: id=B;break; caseC11: id=C12;break; caseC12: id=C13;break; caseC13: id=C14;break; caseC14: id=C11;break; caseC21: id=C22;break; caseC22: id=C23;break; caseC23: id=C24;break; caseC24: id=C21;break; caseD11: id=D12;break; caseD12: id=D11;break; caseD21: id=D22;break; caseD22: id=D21;break; caseE31: id=E32;break; caseE32: id=E33;break; caseE33: id=E34;break; caseE34: id=E31;break; } returnid; } voidtetris: : UpdateMap(intid) { intnx=0,ny=0; intflag; intclear=0;//清除了多少个格子 for(inti=0;i<4;i++) { nx=hotPoint[0]+sharp[id][i*2]; ny=hotPoint[1]+sharp[id][i*2+1]; map[nx][ny]=sharp[id][8];//加上颜色值 } if(hotPoint[1] top=hotPoint[1]; for(intj=hotPoint[1];j { flag=0; for(inti=0;i<12;i++) { if(map[i][j]==0)//没有可以消除的 { flag=1; break; } } if(flag==0)//可以消除当前行 { for(intk=j;k>=top;k--) { if(k==0)//消除到了最顶行 { for(inti=0;i<12;i++) { map[i][k]=0; setCurPos(i+1,k+1); cout<<""; } } else { for(inti=0;i<12;i++) { map[i][k]=map[i][k-1]; setCurPos(i+1,k+1);//因为有两条图形框边,游戏运行过程中的坐标系相对于真正的坐标系是x、y都加1的 if(map[i][k]==0)//被删除行的上一行是空的,所以这一行也是空的 cout<<""; else//上一行不是空的 { inttempColor=map[i][k]; setCurPos(i+1,k+1,tempColor); cout<<"■"; } } } } top++;//消除成功,最高点下降一个 clear++; score+=clear*100; } } setCurPos(16,15); cout<<"分数: "< } voidtetris: : RunGame() { initInterface(); system("cls"); DrawMap(); charx='';//读取键盘信息 inti=0;//计数 intCount=0; intnextId=0; intcurId=0; srand(time(0)); curId=rand()%7; nextId=rand()%7; DrawBox(hotPoint[0],hotPoint[1],curId);//画当前图形 DrawBox(17,3,nextId);//画下一个图形 Count=10000-1000*level; while (1) { if(i>=Count)//可以自动下移了 { i=0;//将i清零 if(IsJudge(hotPoint[0],hotPoint[1]+1,curId)==0)//下个位置无效,到底了 { UpdateMap(curId);//更新一下画面 ReBox(17,3,nextId);//清除原来的下一个图形 curId=nextId; nextId=rand()%7; hotPoint[0]=5;//更新热点 hotPoint[1]=0; DrawBox(hotPoint[0],hotPoint[1],curId); DrawBox(17,3,nextId);//画上现在的下一个图形 if(IsJudge(hotPoint[0],hotPoint[1],curId)==0)//无法绘制当前图形 { system("cls"); cout<<"游戏结束! ! ! 最终得分为: "< system("pause"); exit(0); } } else { ReBox(hotPoint[0],hotPoint[1],curId); hotPoint[1]++; DrawBox(hotPoint[0],hotPoint[1],curId); } } if(_kbhit())//读取键盘信息 { x=_getch(); if(x=='a'||x=='A')//左移 { if(IsJudge(hotPoint[0]-1,hotPoint[1],curId)) { ReBox(hotPoint[0],hotPoint[1],curId); hotPoint[0]--; DrawBox(hotPoint[0],hotPoint[1],curId); } } elseif(x=='d'||x=='D')//右移 { if(IsJudge(hotPoint[0]+1,hotPoint[1],curId)) { ReBox(hotPoint[0],hotPoint[1],curId); hotPoint[0]++; DrawBox(hotPoint[0],hotPoint[1],curId); } } elseif(x=='s'||x=='S')//向下加速 { if(IsJudge(hotPoint[0],hotPoint[1]+1,curId)) { ReBox(hotPoint[0],hotPoint[1],curId); hotPoint[1]++; DrawBox(hotPoint[0],hotPoint[1],curId); } } elseif(x=='w'||x=='W') { inttemp=curId; curId=TurnBlock(curId); if(IsJudge(hotPoint[0],hotPoint[1],curId)) { ReBox(hotPoint[0],hotPoint[1],temp); DrawBox(hotPoint[0],hotPoint[1],curId); } else curId=temp; } elseif(x=='')//暂停 { _getch(); } while(_kbhit())//读取掉剩下的键盘信息s _getch(); } i++; } } 程序来源与互联网;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现的俄罗斯方块参考 实现 俄罗斯方块 参考
![提示](https://static.bingdoc.com/images/bang_tan.gif)