c语言俄罗斯方块代码推荐文档Word下载.docx

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

c语言俄罗斯方块代码推荐文档Word下载.docx

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

c语言俄罗斯方块代码推荐文档Word下载.docx

#defineMAXHEIGHT30

/*组成方块的小格子的宽度*/

#defineBOXWIDTH15

/*用两个数组来表示新旧两个矩形游戏区*/

intoldarea[MAXHEIGHT+1][MAXWIDTH];

intarea[MAXHEIGHT+1][MAXWIDTH];

/*定义一个需要改变的屏幕区域,初次之外的区域不用进行重绘*/

intactW,actH,actX,actY;

/*当前方块的一些属性(坐标,颜色,高,宽)*/

intcurX,curY,curColor,curW,curH;

/*新的方块的一些属性(坐标,颜色,高,宽)*/

intnewX,newY,newColor,newW,newH;

/*制定方块的状态*/

intactive;

/*存储当前方块的数组*/

intbox[4][4];

/*当前方块的颜色*/

intBOXCOLOR;

/*控制命令*/

intCMD;

/*定义七种基本的方块形状*/

intBOX[7][4][4]={

{{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0}},

{{1,1,1,0},{1,0,0,0},{0,0,0,0},{0,0,0,0}},

{{1,1,1,0},{0,0,1,0},{0,0,0,0},{0,0,0,0}},

{{1,1,1,0},{0,1,0,0},{0,0,0,0},{0,0,0,0}},

{{1,1,0,0},{0,1,1,0},{0,0,0,0},{0,0,0,0}},

{{0,1,1,0},{1,1,0,0},{0,0,0,0},{0,0,0,0}},

{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0}}

};

/*得到方块的宽度,即从右向左第一个不空的列*/

intGetWidth()

{

inti,j;

for(i=3;

i>

0;

i--)

for(j=0;

j<

4;

j++)

if(box[j][i])returni;

return0;

}

/*得到方块的高度,从上往下第一个不空的行*/

intGetHeight()

for(j=3;

j>

j--)

for(i=0;

i<

i++)

if(box[j][i])returnj;

/*清除原有的方块占有的空间*/

voidClearOldspace()

=curH;

j++)

=curW;

i++)

if(box[j][i])

area[curY+j][curX+i]=0;

/*置位新方块的位置*/

voidPutNewspace()

=newH;

=newW;

area[newY+j][newX+i]=BOXCOLOR;

/*判断方块的移动是否造成区域冲突*/

intMoveCollision(intbox[][4])

if(newX<

0)return1;

if(newX+newW>

=MAXWIDTH)return1;

if(newY<

if(area[newY+j][newX+i]&

&

box[j][i])return1;

/*判断翻转方块是否造成区域的冲突*/

intRotateBoxCollision(intbox[][4])

=MAXWIDTH)newX=MAXWIDTH-1-newW;

if(newY+newH>

=MAXHEIGHT)newY=MAXHEIGHT-1-newH;

if(MoveCollision(box))return1;

if(area[newY+j][newX+i])

{

newX-=newW-i+1;

gotoL;

}

L:

returnMoveCollision(box);

/*游戏结束*/

intGameOver()

if(!

active&

(curY+curH>

MAXHEIGHT-3))

return1;

else

/*判断是否超时,即是否超过允许的时间间隔*/

intTimeOut()

staticlongtm,old;

tm=biostime(0,tm);

if(tm-old<

TIMEINTERVAL)

old=tm;

/*重绘游戏区*/

voidDrawSpace()

introw,col,x1,y1,x2,y2;

for(row=actY;

row<

=actY+actH;

row++)

for(col=actX;

col<

=actX+actW;

col++)

if(area[row][col]!

=oldarea[row][col])

if(area[row][col]==0)

setfillstyle(SOLID_FILL,BLACK);

setfillstyle(SOLID_FILL,BOXCOLOR);

x1=56+col*BOXWIDTH;

x2=x1+BOXWIDTH;

y1=464-(row+1)*BOXWIDTH;

y2=y1+BOXWIDTH;

bar(++x1,++y1,--x2,--y2);

oldarea[row][col]=area[row][col];

CMD=0;

/*消去满行*/

voidClearFullline()

introw,col,rowEnd,full,i,j;

rowEnd=newY+newH;

if(rowEnd>

=MAXHEIGHT-1)

rowEnd=MAXHEIGHT-2;

for(row=newY;

row<

=rowEnd;

full=1;

for(col=0;

MAXWIDTH;

area[row][col])

{full=0;

break;

full)

{

++row;

continue;

for(j=row;

j<

MAXHEIGHT-1;

area[j][i]=area[j+1][i];

actX=0;

actY=row;

actW=MAXWIDTH-1;

actH=MAXHEIGHT-1-row;

DrawSpace();

rowEnd--;

CMD=CMDGEN;

/*向左移动方块*/

intMoveLeft()

newX=curX-1;

ClearOldspace();

if(MoveCollision(box))

newX=curX;

PutNewspace();

actW=curW+1;

actX=curX=newX;

CMD=CMDDRAW;

/*向右移动方块*/

intMoveRight()

newX=curX+1;

actX=curX;

curX=newX;

/*向下移动方块*/

intMoveDown()

newY=curY-1;

newY=curY;

active=0;

CMD=CMDDELLINE;

actH=curH+1;

actY=newY;

curY=newY;

/*按加速键后方块迅速下落到底*/

voidMoveBottom()

while(active)

MoveDown();

/*初始化*/

voidInitialGame()

inti,j,x1,y1,x2,y2;

intdriver=DETECT,mode=0;

initgraph(&

driver,&

mode,"

e:

\\tc"

);

cleardevice();

randomize();

setfillstyle(SOLID_FILL,BLUE);

bar(0,0,639,479);

x1=56;

y1=464-BOXWIDTH*MAXHEIGHT;

x2=56+MAXWIDTH*BOXWIDTH;

y2=464;

rectangle(--x1,--y1,++x2,++y2);

y1=464-MAXHEIGHT*BOXWIDTH;

setcolor(DARKGRAY);

x1=56+i*BOXWIDTH;

line(x1,y1,x1,y2);

x2=x1+MAXWIDTH*BOXWIDTH;

MAXHEIGHT;

y1=464-j*BOXWIDTH;

line(x1,y1,x2,y1);

area[j][i]=oldarea[j][i]=0;

actY=0;

actH=MAXHEIGHT-1;

}

/*得到控制命令*/

voidGetCMD()

if(CMD)return;

if(TimeOut())

CMD=CMDAOTODOWN;

return;

if(bioskey

(1))

CMD=bioskey(0)>

>

8;

/*生成一个新的方块*/

intGenerateNewbox()

inti,j,boxidx;

boxidx=random(7);

BOXCOLOR=random(7)+1;

box[j][i]=BOX[boxidx][j][i];

curW=GetWidth();

curH=GetHeight();

curX=(MAXWIDTH+curW)/2;

if(curX+curW>

=MAXWIDTH)curX=MAXWIDTH-1-curW;

curY=MAXHEIGHT-1-curH;

actY=curY;

actW=newW=curW;

actH=newH=curH;

active=1;

if(MoveCollision(box))return0;

/*翻转方块*/

intRotateBox()

intnewBox[4][4];

newBox[j][i]=0;

newBox[curW-i][j]=box[j][i];

newW=curH;

newH=curW;

if(RotateBoxCollision(newBox))

newW=curW;

newH=curH;

box[j][i]=newBox[j][i];

actH=newH>

curH?

newH:

curH;

actW=curX+actH-newX;

actX=newX;

curW=newW;

curH=newH;

/*根据获得的命令来执行不同的操作*/

voidExecuteCMD()

switch(CMD)

caseCMDLEFTMOVE:

MoveLeft();

caseCMDRINGHTMOVE:

MoveRight();

caseCMDAOTODOWN:

caseCMDROTATE:

RotateBox();

caseCMDDOWNMOVE:

MoveBottom();

caseCMDDRAW:

caseCMDDELLINE:

ClearFullline();

caseCMDGEN:

GenerateNewbox();

caseCMDESC:

closegraph();

default:

/*主函数*/

intmain()

inti;

InitialGame();

do

GetCMD();

ExecuteCMD();

while(!

GameOver());

getch();

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

当前位置:首页 > 表格模板 > 合同协议

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

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