小游戏c语言编程设计.docx
《小游戏c语言编程设计.docx》由会员分享,可在线阅读,更多相关《小游戏c语言编程设计.docx(16页珍藏版)》请在冰豆网上搜索。
小游戏c语言编程设计
2048小游戏c语言编程设计
D
\t");
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
if(num[j][i]==0)
printf("|");
else
printf("|%4d",num[j][i]);
printf("|\n");
printf("\t\t\t---------------------\n\t\t\t");
}
printf("你的成绩:
%d,移动了%d步\n",score,move);
printf("请按任意键返回主菜单...\n");
getch();
system("cls");
main();
}
voidgamewin()
{
inti,j;
system("cls");
printf("\t\t*****************************************\t\t\n");
printf("\t\t*****************************************\n");
printf("\t\t*******************youwin***************\n");
printf("\t\t*****************************************\n");
printf("\t\t*****************************************\t\t\n");
printf("\t\t\t---------------------\n\t\t\t");
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
if(num[j][i]==0)
printf("|");
else
printf("|%4d",num[j][i]);
printf("|\n");
printf("\t\t\t---------------------\n\t\t\t");
}
printf("你的成绩:
%d,移动了%d步\n",score,move);
printf("请按任意键返回主菜单...\n");
getch();
system("cls");
main();
}
voidprin()
{
inti,j;
system("cls");
printf("\t\t*****************************************\t\t\n");//输出界面
printf("\t\t*****************************************\n");
printf("\t\t******************游戏开始***************\n");
printf("\t\t*****************************************\n");
printf("\t\t*****************************************\t\t\n");
printf("\t\t请按方向键或W、A、S、D移动滑块\n");//输出操作提示语句
printf("\t\t按ESC返回至主菜单\n");
printf("\t\t\t---------------------\n\t\t\t");
for(j=0;j<4;j++)//输出4*4的表格
{
for(i=0;i<4;i++)
if(num[j][i]==0)
printf("|");
else
printf("|%4d",num[j][i]);
printf("|\n");
printf("\t\t\t---------------------\n\t\t\t");
}
printf("你的成绩:
%d,移动了%d步\n",score,move);//输出得分和移动步数
}
voidappear()
{
inti,j,ran,t[16],x=0,a,b;
srand((int)time(0));//随机种子初始化
for(j=0;j<4;j++)//将空白的区域的坐标保存到中间数组t中
for(i=0;i<4;i++)
if(num[j][i]==0)
{
t[x]=j*10+i;
x++;
}
if(x==1)//在t中随机取一个坐标
ran=x-1;
else
ran=rand()%(x-1);
a=t[ran]/10;//取出这个数值的十位数
b=t[ran]%10;//取出这个数值的个位数
srand((int)time(0));
if((rand()%9)>2)//在此空白区域随机赋值2或4
num[a][b]=2;
else
num[a][b]=4;
}
voidclose()
{
exit(0);
}
voidadd(int*p)
{
inti=0,b;
while(i<3)
{
if(*(p+i)!
=0)
{
for(b=i+1;b<4;b++)
{
if(*(p+b)!
=0)
if(*(p+i)==*(p+b))
{
score=score+(*(p+i))+(*(p+b));
*(p+i)=*(p+i)+*(p+b);
if(*(p+i)==2048)
gamew=1;
*(p+b)=0;
i=b+i;
++ifappear;
break;
}
else
{
i=b;
break;
}
}
if(b==4)
i++;
}
else
i++;
}
}
voidGameplay()
{
inti,j,g,e,a,b[4];
appear();
appear();
while
(1)
{
if(ifappear!
=0)
appear();
prin();
key=getch();
switch(key)
{
case'w':
case'W':
case72:
ifappear=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
b[i]=num[i][j];
num[i][j]=0;
}
add(b);
e=0;
for(g=0;g<4;g++)
{
if(b[g]!
=0)
{
num[e][j]=b[g];
if(g!
=e)
++ifappear;
e++;
}
}
}
if(ifappear!
=0)
++move;
break;
case's':
case'S':
case80:
ifappear=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
b[i]=num[i][j];
num[i][j]=0;
}
add(b);
e=3;
for(g=3;g>=0;g--)
{
if(b[g]!
=0)
{
num[e][j]=b[g];
if(g!
=e)
++ifappear;
e--;
}
}
}
if(ifappear!
=0)
++move;
break;
case'a':
case'A':
case75:
ifappear=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
b[i]=num[j][i];
num[j][i]=0;
}
add(b);
e=0;
for(g=0;g<4;g++)
{
if(b[g]!
=0)
{
num[j][e]=b[g];
if(g!
=e)
++ifappear;
e++;
}
}
}
if(ifappear!
=0)
++move;
break;
case'd':
case'D':
case77:
ifappear=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
b[i]=num[j][i];
num[j][i]=0;
}
add(b);
e=3;
for(g=3;g>=0;g--)
{
if(b[g]!
=0)
{
num[j][e]=b[g];
if(g!
=e)
++ifappear;
e--;
}
}
}
if(ifappear!
=0)
++move;
break;
case27:
system("cls");
main();
break;
}
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
if(j<3)
{
if(i<3)
{
if(num[j][i]==num[j+1][i]||num[j][i]==num[j][i+1]||num[j][i]==0)
{
gamef=0;
break;
}
else
gamef=1;
}
else
{
if(num[j][i]==num[j+1][i]||num[j][i]==0)
{
gamef=0;
break;
}
else
gamef=1;
}
}
else
{
if(i<3)
{
if(num[j][i]==num[j][i+1]||num[j][i]==0||num[j][i+1]==0)
{
gamef=0;
break;
}
else
gamef=1;
}
}
}
if(gamef==0)
break;
}
if(gamef==1||gamew==1)
break;
}
if(gamef==1)
gamefaile();
else
gamewin();
}
voidmenu()
{
intn;
printf("\t\t*****************************************\t\t\n");//输出游戏菜单的图形
printf("\t\t*1、开始游戏*\n");
printf("\t\t*2、游戏规则*\n");
printf("\t\t*3、退出游戏*\n");
printf("\t\t*****************************************\n");
printf("请输入1或2或3:
[]\b\b");
scanf("%d",&n);
switch(n)
{
case1:
Gameplay();//游戏开始函数
break;
case2:
explation();//游戏规则函数
break;
case3:
close();//关闭游戏函数
break;
}
}
intmain()
{
intj,i;
for(j=0;j<4;j++)//对4*4进行初始赋值为0
for(i=0;i<4;i++)
num[j][i]=0;
gamew=0;//游戏获胜的判断变量初始化
gamef=0;//游戏失败的判断变量初始化
ifappear=0;//判断是否应该随机出现2或4的变量初始化
score=0;//游戏得分变量初始化
gameover=0;//游戏是否结束的变量初始化
move=0;//游戏的移动步数初始化
menu();//调用主菜单函数
return0;
}