C语言小游戏源代俄罗斯方块Word格式.docx
- 文档编号:1450419
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:12
- 大小:12.88KB
C语言小游戏源代俄罗斯方块Word格式.docx
《C语言小游戏源代俄罗斯方块Word格式.docx》由会员分享,可在线阅读,更多相关《C语言小游戏源代俄罗斯方块Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
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,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}}};
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<
MAX;
i++)
for(j=0;
j<
j++)
{Position[i][j]=1;
middle[i][j]=-1;
}
Heng;
Shu;
Position[i][j]=0;
DrawBox(i,j,0);
randomize();
voidGoOn()
{
)
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
Display(Staus+1);
intTouch(intx,inty,intdx,intdy)
4;
Position[x+dx+i][y+dy+j]+=b[i][j];
if(Position[i][j]>
1)
NoPass=CANNOT;
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)
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;
caseLEFT:
if(ActH>
0&
Touch(ActH,ActS,-1,0)==CAN)
{ActH--;
caseRIGHT:
if(ActH<
Heng&
Touch(ActH,ActS,1,0)==CAN)
{ActH++;
caseBLANK:
Display(0);
ksdown();
caseF1:
Help();
caseEQUAL:
caseADD:
if(Delays>
300)Delays-=100;
caseDEC:
if(Delays<
3000)Delays+=100;
casePAUSEP:
casePAUSEp:
getch();
caseSOUNDS:
caseSOUNDs:
if(Sounds==CAN)
Sounds=CANNOT;
Sounds=CAN;
caseUP:
if(Act==7)
while(acts<
Shu-1&
Position[ActH][acts]!
=1)
acts++;
Position[ActH][acts]=0;
DrawBox(ActH,acts,0);
acts=ActS;
OldStaus=Staus;
switch(Act)
case0:
case3:
case4:
if(Staus==1)Staus=0;
elseStaus=1;
case1:
case2:
case5:
case6:
if(Staus==3)Staus=0;
elseStaus++;
if(Touch(ActH,ActS,0,0)==CANNOT)
Staus=OldStaus;
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)
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,"
Scores);
fclose(fp);
OutTextXY(470,220,"
AreYouSure(Yes/no)?
ch=getch();
if(ch=='
y'
||ch=='
Y'
closegraph();
delay(20);
exit(0);
setcolor(0);
outtextxy(470,220,"
voidOutTextXY(intx,inty,char*String)
inti=0;
chara[2];
moveto(x,y);
a[1]='
\0'
while(*(String+i)!
='
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);
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!
!
"
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,'
+Sec1000);
DispScore(80,250,'
+Sec100);
DispScore(90,250,'
+Sec10);
DispScore(100,250,'
+Sec1);
DispScore(110,250,'
DispScore(120,250,'
voidDispScore(intx,inty,charCh)
a[0]=Ch;
outtextxy(x,y,a);
voidGive()
b[i][j]=a[Act][Staus][i][j];
voidDisplay(intcolor)
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);
setcolor(Act+1);
rectangle(x+4,y+4,x+Wid-4,y+Wid-4);
voidDrawNext(intColor)
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;
if(Position[j][i]==1)Number++;
if(Number==Heng)
FallTime++;
sound(500);
delay(500);
for(Fall=i;
Fall>
0;
Fall--)
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);
switch(FallTime)
Scores+=1;
Scores+=3;
Scores+=6;
Scores+=10;
if(FallTime!
=0)
GetScores();
if(Scores%100==0)Delays-=100;
voidFail()
for(k=0;
k<
3;
k++)
sound(300);
delay(200);
OutTextXY(440,200,"
Gameover!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 小游戏 俄罗斯方块