C语言小游戏源代俄罗斯方块.docx

上传人:wj 文档编号:1215697 上传时间:2023-04-30 格式:DOCX 页数:12 大小:12.88KB
下载 相关 举报
C语言小游戏源代俄罗斯方块.docx_第1页
第1页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第2页
第2页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第3页
第3页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第4页
第4页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第5页
第5页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第6页
第6页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第7页
第7页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第8页
第8页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第9页
第9页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第10页
第10页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第11页
第11页 / 共12页
C语言小游戏源代俄罗斯方块.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言小游戏源代俄罗斯方块.docx

《C语言小游戏源代俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《C语言小游戏源代俄罗斯方块.docx(12页珍藏版)》请在冰点文库上搜索。

C语言小游戏源代俄罗斯方块.docx

C语言小游戏源代码《俄罗斯方块》

#include

#include

#include

#defineESC27

#defineUP328

#defineDOWN336

#defineLEFT331

#defineRIGHT333

#defineBLANK32

#defineBOTTOM2

#defineCANNOT1

#defineCAN0

#defineMAX30

#defineF1315

#defineADD43

#defineEQUAL61

#defineDEC45

#defineSOUNDs115

#defineSOUNDS83

#definePAUSEP80

#definePAUSEp112

voidInit();

voidDown();

voidGoOn();

voidksdown();

voidDisplay(intcolor);

voidGive();

intTouch(intx,inty,intdx,intdy);

intGeyKey();

voidSelect();

voidDetectFill();

voidGetScores();

voidFail();

voidHelp();

voidQuit();

voidDrawBox(intx,inty,intColor);

voidOutTextXY(intx,inty,char*String);

voidDispScore(intx,inty,charCh);

voidDrawNext(intColor);

intHeng=12,Shu=20;/*横竖*/

intPosition[MAX][MAX];

intmiddle[MAX][MAX];

intActH,ActS;

intAct,Staus;

inti,j,k;

intWid=10;

intNoPass=CAN;

floatDelays=15000;

intBeginH=250,BeginS=7;

floatSeconds=0;

intScores=0;

intflag=1;

intSounds=CAN;

intPreAct,NextAct;

inta[8][4][4][4]={{{1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0},

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

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

{1,1,1,1,0,0,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},

{1,1,0,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},

{1,1,0,0,1,1,0,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},

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

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

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

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

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

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

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

{{0,1,0,0,1,1,0,0,1,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,0,0,1,1,0,0,1,0,0,0,0,0,0,0},

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

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

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

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

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

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

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

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

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

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

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

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

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

intb[4][4];

main(intargc,char*argv[])

{

if(argc!

=1)

{

if(argv[1]!

="")

Heng=atoi(argv[1]);

if(argv[2]!

="")

Shu=atoi(argv[2]);

}

Init();/*初始化界面*/

PreAct=random(8);/*取得当前的方块*/

for(;;)/*以下是游戏流程*/

{

NextAct=random(8);/*取得下一个方块*/

DrawNext

(1);/*画出下一个方块*/

Act=PreAct;

if(Heng%2==0)ActH=Heng/2;

elseActH=(Heng-1)/2;

ActS=0;/*方块开始从游戏空间的中间下落*/

Staus=0;/*取开始的状态*/

NoPass=CAN;/*物体可以下落*/

Give();/*取得当前的方块*/

Display(Act+1);/*显示当前的方块,每种方块的颜色不同*/

GoOn();/*游戏的算法精髓所在*/

PreAct=NextAct;/*方块下落完毕,取得下一个方块*/

DrawNext(0);

}

}

voidInit()

{

intGraphDriver=DETECT,GraphMode;

registerbgidriver(EGAVGA_driver);

initgraph(&GraphDriver,&GraphMode,"");

if(kbhit())Sounds=CANNOT;

setcolor

(1);

OutTextXY(10,10,"Tetris");

OutTextXY(30,30,"Version2.0");

OutTextXY(10,120,"Help:

");

OutTextXY(20,140,"+:

Faster");

OutTextXY(20,160,"-:

Slower");

OutTextXY(20,180,"Esc:

Quit");

OutTextXY(20,200,"F1:

Help");

OutTextXY(10,310,"Copyright(c)1998.2.22");

OutTextXY(10,320,"ByMr.Unique");

outtextxy(10,250,"Score:

00000");

rectangle(BeginH-3,BeginS-3,BeginH+Heng*(Wid+2)+2,BeginS+Shu*(Wid+2)+2);

rectangle(BeginH-5,BeginS-5,BeginH+Heng*(Wid+2)+4,BeginS+Shu*(Wid+2)+4);

rectangle(BeginH+(Heng+4)*(Wid+2)-2,BeginS+10,BeginH+(Heng+8)*(Wid+2)+2,BeginS+12+4*(Wid+2));

for(i=0;i

for(j=0;j

{Position[i][j]=1;

middle[i][j]=-1;

}

for(i=0;i

for(j=0;j

Position[i][j]=0;

for(i=0;i

for(j=0;j

DrawBox(i,j,0);

randomize();

}

voidGoOn()

{

for(;;)

{

Seconds+=0.2;/*控制方块的下落速度*/

if(Seconds>=Delays)

{

Down();

Seconds=0;

if(NoPass==BOTTOM)

{

DetectFill();

middle[ActH][ActS]=Act;

if(ActS==0)

Fail();

return;

}

}

if(kbhit())

Select();

}

}

voidDown()/*方块下降*/

{

Display(0);

if(Touch(ActH,ActS,0,1)==CAN)

ActS++;

else

middle[ActH][ActS]=Act;

Display(Staus+1);

}

intTouch(intx,inty,intdx,intdy)

{

NoPass=CAN;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

Position[x+dx+i][y+dy+j]+=b[i][j];

for(i=0;i

for(j=0;j

if(Position[i][j]>1)

NoPass=CANNOT;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

{

Position[x+dx+i][y+dy+j]-=b[i][j];

middle[x+dx+i][y+dy+j]=Act;

}

if(NoPass==CANNOT&&dx==0&&dy==1)

{

for(i=0;i<4;i++)

for(j=0;j<4;j++)

Position[x+i][y+j]+=b[i][j];

NoPass=BOTTOM;

}

returnNoPass;

}

intGetKey(void)

{

intCh,Low,Hig;

Ch=bioskey(0);

Low=Ch&0x00ff;

Hig=(Ch&0xff00)>>8;

return(Low==0?

Hig+256:

Low);

}

voidSelect()

{

intOldStaus,acts=ActS;

switch(GetKey())

{

caseESC:

Quit();break;

caseDOWN:

Seconds+=14500;break;

caseLEFT:

Display(0);

if(ActH>0&&Touch(ActH,ActS,-1,0)==CAN)

{ActH--;}

Display(Act+1);break;

caseRIGHT:

Display(0);

if(ActH

{ActH++;}

Display(Act+1);break;

caseBLANK:

Display(0);

ksdown();

Display(Act+1);

break;

caseF1:

Help();break;

caseEQUAL:

caseADD:

if(Delays>300)Delays-=100;break;

caseDEC:

if(Delays<3000)Delays+=100;break;

casePAUSEP:

casePAUSEp:

getch();break;

caseSOUNDS:

caseSOUNDs:

if(Sounds==CAN)

Sounds=CANNOT;

else

Sounds=CAN;break;

caseUP:

if(Act==7)

{

while(acts

=1)

acts++;

Position[ActH][acts]=0;

DrawBox(ActH,acts,0);

acts=ActS;

break;

}

else

{

Display(0);

OldStaus=Staus;

switch(Act)

{

case0:

case3:

case4:

if(Staus==1)Staus=0;elseStaus=1;break;

case1:

break;

case2:

case5:

case6:

if(Staus==3)Staus=0;elseStaus++;break;

}

Give();

if(Touch(ActH,ActS,0,0)==CANNOT)

{

Staus=OldStaus;

Give();

}

Display(Act+1);

break;

}

}

}

voidksdown()

{

while(flag){

if(Touch(ActH,ActS,0,0)==CAN){ActS++;}

else{

ActS--;

flag=0;

}

}

flag=1;

}

voidQuit()

{

intch,TopScore;

FILE*fp;

if((fp=fopen("Russian.scr","r+"))!

=NULL)

{

fscanf(fp,"%d",&TopScore);

if(Scores>TopScore)

{

setcolor

(1);

outtextxy(470,80,"Hello!

");

outtextxy(470,100,"Inalltheplayers,");

outtextxy(470,120,"YouaretheFirst!

");

outtextxy(470,140,"Andyourscorewill");

outtextxy(470,160,"betheNEWRECORD!

");

fseek(fp,0L,0);

fprintf(fp,"%d",Scores);

}

fclose(fp);

}

setcolor

(1);

OutTextXY(470,220,"AreYouSure(Yes/no)?

");

ch=getch();

if(ch=='y'||ch=='Y')

{

closegraph();

delay(20);

exit(0);

}

setcolor(0);

outtextxy(470,220,"AreYouSure(Yes/no)?

");

}

voidOutTextXY(intx,inty,char*String)

{

inti=0;

chara[2];

moveto(x,y);

a[1]='\0';

while(*(String+i)!

='\0')

{

a[0]=*(String+i);

outtext(a);

if(Sounds==CAN&&a[0]!

='')

{

sound(3000);

delay(50);

nosound();

}

i++;

}

}

voidHelp()

{

unsignedSave;

void*Buf;

Save=imagesize(160,120,500,360);

Buf=malloc(Save);

getimage(160,120,500,360,Buf);

setfillstyle(1,1);

bar(160,120,500,280);

setcolor(0);

OutTextXY(170,130,"About&Help");

OutTextXY(170,150,"################");

OutTextXY(170,160,"##################");

OutTextXY(170,170,"########################");

OutTextXY(170,180,"#############");

OutTextXY(170,190,"#############");

OutTextXY(170,200,"#############");

OutTextXY(170,210,"#################");

OutTextXY(170,220,"############");

OutTextXY(170,230,"############");

OutTextXY(170,260,"GoodLucklytoYou!

!

!

");

getch();

putimage(160,120,Buf,0);

free(Buf);

}

voidGetScores()

{

intSec10000,Sec1000,Sec100,Sec10,Sec1;

setfillstyle(0,1);

bar(60,250,109,260);

Sec1=Scores%10;

Sec10=(Scores%100-Scores%10)/10;

Sec100=(Scores%1000-Scores%100)/100;

Sec1000=(Scores%10000-Scores%1000)/1000;

Sec10000=(Scores%100000-Scores%10000)/10000;

DispScore(60,250,'0'+Sec10000);

DispScore(70,250,'0'+Sec1000);

DispScore(80,250,'0'+Sec100);

DispScore(90,250,'0'+Sec10);

DispScore(100,250,'0'+Sec1);

DispScore(110,250,'0');

DispScore(120,250,'0');

}

voidDispScore(intx,inty,charCh)

{

chara[2];

a[1]='\0';

a[0]=Ch;

outtextxy(x,y,a);

}

voidGive()

{

for(i=0;i<4;i++)

for(j=0;j<4;j++)

b[i][j]=a[Act][Staus][i][j];

}

voidDisplay(intcolor)

{

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(b[i][j]==1)DrawBox(ActH+i,ActS+j,color);

}

voidDrawBox(intx,inty,intColor)

{

x=BeginH+x*(Wid+2);

y=BeginS+y*(Wid+2);

setfillstyle(1,Color);

bar(x+2,y+2,x+Wid-1,y+Wid-1);

if(Color==0)

setcolor(9);

else

setcolor(Act+1);

rectangle(x+4,y+4,x+Wid-4,y+Wid-4);

}

voidDrawNext(intColor)

{

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(a[NextAct][0][i][j]==1)DrawBox(Heng+4+i,1+j,Color);

}

voidDetectFill()

{

intNumber,Fall,FallTime=0;

for(i=Shu-1;i>=0;i--)

{

Number=0;

for(j=0;j

if(Position[j][i]==1)Number++;

if(Number==Heng)

{

FallTime++;

if(Sounds==CAN)

{

sound(500);

delay(500);

nosound();

}

for(Fall=i;Fall>0;Fall--)

for(j=0;j

{

Position[j][Fall]=Position[j][Fall-1];

middle[j][Fall]=middle[j][Fall-1];

if(Position[j][Fall]==0)DrawBox(j,Fall,0);

elseDrawBox(j,Fall,middle[j][Fall]+1);

}

i++;

}

}

switch(FallTime)

{

case0:

break;

case1:

Scores+=1;break;

case2:

Scores+=3;break;

case3:

Scores+=6;break;

case4:

Scores+=10;break;

}

if(FallTime!

=0)

{

GetScores();

if(Scores%100==0)Delays-=100;

}

}

voidFail()

{

if(Sounds==CAN)

{

for(k=0;k<3;k++)

{

sound(300);

delay(200);

nosound();

}

}

setcolor

(1);

OutTextXY(440,200,"Gameover!

");

Quit();

closegraph();

exit(0);

}

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2