C++俄罗斯方块代码Word文档下载推荐.docx

上传人:b****6 文档编号:20238110 上传时间:2023-01-21 格式:DOCX 页数:17 大小:18.54KB
下载 相关 举报
C++俄罗斯方块代码Word文档下载推荐.docx_第1页
第1页 / 共17页
C++俄罗斯方块代码Word文档下载推荐.docx_第2页
第2页 / 共17页
C++俄罗斯方块代码Word文档下载推荐.docx_第3页
第3页 / 共17页
C++俄罗斯方块代码Word文档下载推荐.docx_第4页
第4页 / 共17页
C++俄罗斯方块代码Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C++俄罗斯方块代码Word文档下载推荐.docx

《C++俄罗斯方块代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++俄罗斯方块代码Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

C++俄罗斯方块代码Word文档下载推荐.docx

//列数

intscore=0;

intlevel=0;

int*block1=NULL;

int*block2=NULL;

int*block3=NULL;

intcoordinate[12][18]={0};

//坐标数组,边框12*18(最后一行,两边边框计算在内)

intjudge=0;

intscorex=0;

inttemp[4][4]={0};

voidmain()//主函数

{

intt=1;

handle=initiate();

while(t)

{

t=0;

begin();

sndPlaySound("

SND_LOOP|SND_ASYNC);

frame();

WORDwColors[1];

wColors[0]=FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY;

for(intk=1;

k<

=999999;

k++)

{

if(ifgameover())//判断是否结束

{

textout(handle,34,10,wColors,1,"

GameOver"

);

Sleep(800);

end();

}

else

if(k==1)

block2=getblocks();

block3=block2;

//block2指向将出现的方块地址

//获取下一个新的方块

block1=block3;

row=52;

clearsquare(16);

//擦除next的方块

block1=block2;

drawblocks(15);

//在next显示下一块方块图形

row=34;

for(inti=4;

i<

=7;

i++)//所构建的方块图形最多只有占有两排,所以只用4-7即可对应

{

if(*(block1+i))

textout(handle,26+i*2,4,wColors,1,"

■"

//方块先露出下面部分

}

Sleep(500-50*level);

for(intline=4;

line<

=22;

line++)//方块自主下落,方块从第四排开始出现

{

if(isavailable(line))//检验刚产生的方块是否碰壁,碰到已落方块

{

clearsquare(line);

//消除方块先露初的下面分

drawblocks(line);

//产生完整的下落方块

move(line);

}

else

remember(line);

//落定后将这些位置对应的all数组中元素置1

deleteline(line);

//消行以及加分

if(line==4)

judge=1;

break;

}

}

}

voidbegin()

{

inti=1;

wColors[0]=FOREGROUND_GREEN|FOREGROUND_INTENSITY;

WORDwColors1[2];

wColors1[0]=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY;

wColors1[1]=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,"

  ██        ██"

textout(handle,18,9,wColors,1,"

 ◢██         ██◣"

textout(handle,18,10,wColors,1,"

 ██◤ ●     ● ◥██"

textout(handle,18,11,wColors,1,"

 ██ ◎       ◎ ██"

textout(handle,18,12,wColors,1,"

 ◥█◣    T    ◢█◤"

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,"

 请按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,"

MADEBY"

while(i)

textout(handle,30,8,wColors1,2,"

俄罗斯方块"

Sleep(800);

"

Sleep(800);

if(_kbhit())//输入等级

switch(_getch())

case'

1'

:

level=1;

i=0;

//跳出循环

break;

2'

level=4;

3'

level=7;

}

system("

cls"

//清屏

voidframe()//边框的设定

wColors[0]=FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY;

WORDwColors1[1];

wColors1[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;

for(inti=0;

=11;

i++)

coordinate[i][17]=1;

//底排边框定义为1

for(intj=0;

j<

=17;

j++)

coordinate[0][j]=1;

//两边边框定义为1

coordinate[11][j]=1;

charstring[5];

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,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(intm=13;

m<

=24;

m++)

textout(handle,2*m,3,wColors,1,"

═"

//上边框

for(intn=4;

n<

=21;

n++)

textout(handle,26,n,wColors,1,"

‖"

//左边框

for(intk=4;

textout(handle,48,k,wColors,1,"

//右边框

for(intl=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*m=NULL;

srand(time(NULL));

intn=rand()%7;

switch(n)

case0:

m=&

a1[0][0];

break;

case1:

a2[0][0];

case2:

a3[0][0];

case3:

a4[0][0];

case4:

a5[0][0];

case5:

a6[0][0];

case6:

a7[0][0];

returnm;

voiddrawblocks(intline)//出现方块

=15;

{

inttemp;

temp=j/4;

if(*(block1+j))

textout(handle,row+j*2-temp*8,line+temp,wColors,1,"

voidclearsquare(intline)//方块消失

wColors[0]=FOREGROUND_BLUE|FOREGROUND_INTENSITY;

if(line==4)//针对消除刚产生的下排

textout(handle,34,4,wColors,1,"

textout(handle,36,4,wColors,1,"

textout(handle,38,4,wColors,1,"

textout(handle,40,4,wColors,1,"

else

for(intm=0;

{

inttemp;

temp=m/4;

//得0-3对应方块数组1-4行

if(*(block1+m))

textout(handle,row+m*2-temp*8,line-1+temp,wColors,1,"

}

voidmove(intline)//方块的左右移动,加速下落,翻转等

intmid=0,speed=100-10*level;

while(mid<

speed)

if(_kbhit())

case72:

//翻转

turn(line);

}

case75:

//左移

row=row-2;

//纵坐标减2

if(isavailable(line))//判断是否能移动

row=row+2;

clearsquare(line+1);

//消除原来图案,line+1是避免line=4程序出错

row=row-2;

//出现新图案

//若不能移动则纵坐标不变

case77:

//右移

row=row+2;

if(isavailable(line))

case80:

//加速下落,即直接跳除循环

mid=speed;

case27:

//终止游戏

end();

}

case32:

//暂停

intflag=1;

while(flag)

if(_kbhit())

{

if(_getch()==32)

flag=0;

break;

}

else

Sleep(10);

default:

break;

Sleep(8);

//使方块延迟

mid++;

voidturn(intline)

clearsquare(line+1);

//消除原来的图案

intb[4][4]={0};

//保存旋转前的方块

intnum=0,l=0;

for(intm=0;

=3;

for(intn=0;

b[m][n]=*(block1+m*4+n);

//把b[4][4]全赋值为当前图形数组

temp[m][n]=0;

for(inti=3;

i>

=0;

i--)//按行从下向上扫描

for(intj=0;

4;

j++)//按列从左向右扫描

if(b[i][j])//如果为有效点,则进行90度旋转

temp[j][l]=b[i][j];

num=1;

if(num)

l++;

num=0;

block1=&

temp[0][0];

if(isavailable(line))

drawblocks(line);

for(intp=0;

p<

p++)

for(intq=0;

q<

q++)

temp[p][q]=b[p][q];

block1=&

boolisavailable(intline)//检验,即看方块即将存在位置是否已经有1

intx,y;

{

temp=m/4;

x=row/2-13-4*temp+m;

//边框左边已有13个位置

y=line-4+temp;

//上面已有4个位置

if(*(block1+m)&

&

coordinate[x][y])//相与为1则返回0,否则跳出并循环继续

return0;

voidremember(intline)//记忆

x=row/2-13-temp*4+m;

if(*(block1+m))//如果当前位置为1,则返回原位置,并设置为1

coordinate[x][y-1]=1;

voiddeleteline(intl)//消行

intsnum=0,b=0;

=16;

m++)//从上向下消去方块

if(coordinate[1][m]==1&

coordinate[2][m]==1&

coordinate[3][m]==1&

coordinate[4][m]==1&

coordinate[5][m]==1&

coordinate[6][m]==1&

coordinate[7][m]==1&

coordinate[8][m]==1&

coordinate[9][m]==1&

coordinate[10][m]==1)

textout(handle,28,m+4,wColors,1,"

﹌﹌﹌﹌good﹌﹌﹌﹌"

Sleep(750);

for(intn=1;

=m;

for(intj=1;

=10;

coordinate[j][m-n+1]=coordinate[j][m-n];

snum++;

for(intn=1;

for(intd=0;

d<

d++)

intx,y;

x=n*2+26;

y=d+4;

textout(handle,x,y,wColors,1,"

if(coordinate[n][d])

textout(handle,x,y,wColors,1,"

score=score+(snum*(snum+1)/2);

if((score-scorex)>

=30)//每得到30分自动加速

level++;

scorex=score;

textout(handle,59,9,wColors,1,itoa(score,string,10));

boolifgameover()//终止游戏

if(judge==1)

return1;

return0;

voidend()//退出

textout(handle,28,22,wColors,1,"

Pressanykeytoexit"

while

(1)

if(_kbhit())

exit(EXIT_SUCCESS);

}

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

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1