C语言编写推箱子游戏

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*
此代码只供参考,用于学习掌握基础,提高学习C语言的兴趣。

代码注释较少
*/

//主函数
#include
#include
#include
#include

//函数声明
void Draw_Map(int Map[13][14]);
void color(int b);

//全局变量定义
int i,j,mv4=0,mv3=0,mv2=0,mv1=0;

int Map[13][14]=
{
{2,2,2,2,1,1,1,1,1,1,2,2,2,2},
{2,2,2,2,1,0,0,0,0,1,2,2,2,2},
{2,1,1,1,1,0,0,4,4,1,1,1,1,1},
{2,1,0,0,0,1,0,0,0,1,0,0,0,1},
{2,1,0,4,0,0,0,4,0,0,0,4,0,1},
{2,1,0,0,0,1,1,0,1,1,1,1,1,1},
{1,1,1,1,4,1,1,0,0,0,0,0,0,1},
{1,0,0,0,4,0,1,0,0,0,5,0,0,1},
{1,0,4,0,4,0,1,0,1,1,1,1,1,1},
{1,1,0,0,4,0,1,0,1,3,3,3,1,2},
{2,1,0,1,1,0,0,0,0,3,3,3,1,2},
{2,1,0,0,0,0,1,1,3,3,3,3,1,2},
{2,1,1,1,1,1,1,1,1,1,1,1,1,2},
};

//主函数
int main()
{
char shuru;
int fenshu=0;
while(1)
{
system("cls");
Draw_Map(Map);

//找人的位置
for(i=0;i<13;i++)
{
for(j=0;j<14;j++)
{
if(Map[i][j]==5||Map[i][j]==8)
break;
}
if(Map[i][j]==5||Map[i][j]==8)
break;
}
printf("当前人的位置:(%d,%d)",i,j);
shuru=getch();
switch(shuru)
{
case 'w':case 'W':
if(Map[i-1][j]==0) //人在空地走
{
Map[i-1][j]=5;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
else
{
if(Map[i][j]==5&&Map[i-1][j]==4&&Map[i-2][j]==0) //人推箱子
{
Map[i-1][j]=5;
Map[i-2][j]=4;
Map[i][j]=0;
}
if(Map[i-1][j]==3) //人遇到目的地
{
Map[i-1][j]=8;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
if(((Map[i-1][j]==4&&Map[i-2][j]==3)||(Map[i-1][j]==7&&Map[i-2][j]==3))&&Map[i][j]!=8) //把箱子推入目的地
{
mv1++;
Map[i-2][j]=7;
if(mv1==1)
{
Map[i-1][j]=5;
Map[i][j]=0;
}
if(mv1==2)
{
Map[i-1][j]=8;
Map[i][j]=0;
mv1=0;
}
}
if(Map[i][j]==8&&Map[i-1][j]==7&&Map[i-2][j]==3) //把箱子推进目的地后
{
Map[i-2][j]=7;
Map[i-1][j]=8;
Map[i][j]=3;
}
if(Map[i-2][j]==0&&Map[i-1][j]==7&&Map[i][j]==8) //把箱子退出目的地
{
Map[i-2][j]=4;
Map[i-1][j]=8;
Map[i][j]=3;
}
if(Map[i-2][j]==0&&Map[i-1][j]==4&&Map[i][j]==8)
{
Map[i-2][j]=4;
Map[i-1][j]=5;
Map[i][j]=3;
}
}
break;
case 's':case 'S':
if(Map[i+1][j]==0) //人在空地走
{
Map[i+1][j]=5;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
else
{
if(Map[i][j]==5&&Map[i+1][j]==4&&Map[i+2][j]==0) //人推箱子
{
Map[i+1][j]=5;
Map[i+2][j]=4;
Map[i][j]=0;
}
if(Map[i+1][j]==3) //人遇到目的地
{
Map[i+1][j]=8;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;


}
if(((Map[i+1][j]==4&&Map[i+2][j]==3)||(Map[i+1][j]==7&&Map[i+2][j]==3))&&Map[i][j]!=8) //把箱子推入目的地
{
mv2++;
Map[i+2][j]=7;
if(mv2==1)
{
Map[i+1][j]=5;
Map[i][j]=0;
}
if(mv2==2)
{
Map[i+1][j]=8;
Map[i][j]=0;
mv2=0;
}
}
if(Map[i][j]==8&&Map[i+1][j]==7&&Map[i+2][j]==3) //把箱子推进目的地后
{
Map[i+2][j]=7;
Map[i+1][j]=8;
Map[i][j]=3;
}
if(Map[i+2][j]==0&&Map[i+1][j]==7&&Map[i][j]==8) //把箱子退出目的地
{
Map[i+2][j]=4;
Map[i+1][j]=8;
Map[i][j]=3;
}
if(Map[i+2][j]==0&&Map[i+1][j]==4&&Map[i][j]==8)
{
Map[i+2][j]=4;
Map[i+1][j]=5;
Map[i][j]=3;
}
}
break;
case 'a':case 'A':
if(Map[i][j-1]==0) //人在空地走
{
Map[i][j-1]=5;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
else
{
if(Map[i][j]==5&&Map[i][j-1]==4&&Map[i][j-2]==0) //人推箱子
{
Map[i][j-1]=5;
Map[i][j-2]=4;
Map[i][j]=0;
}
if(Map[i][j-1]==3) //人遇到目的地
{
Map[i][j-1]=8;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
if(((Map[i][j-1]==4&&Map[i][j-2]==3)||(Map[i][j-1]==7&&Map[i][j-2]==3))&&Map[i][j]!=8) //把箱子推入目的地
{
mv3++;
Map[i][j-2]=7;
if(mv3==1)
{
Map[i][j-1]=5;
Map[i][j]=0;
}
if(mv3==2)
{
Map[i][j-1]=8;
Map[i][j]=0;
mv3=0;
}
}
if(Map[i][j]==8&&Map[i][j-1]==7&&Map[i][j-2]==3) //把箱子推进目的地后
{
Map[i][j-2]=7;
Map[i][j-1]=8;
Map[i][j]=3;
}
if(Map[i][j-2]==0&&Map[i][j-1]==7&&Map[i][j]==8) //把箱子退出目的地
{
Map[i][j-2]=4;
Map[i][j-1]=8;
Map[i][j]=3;
}
if(Map[i][j-2]==0&&Map[i][j-1]==4&&Map[i][j]==8)
{
Map[i][j-2]=4;
Map[i][j-1]=5;
Map[i][j]=3;
}
}
break;
case 'd':case 'D':
if(Map[i][j+1]==0) //人在空地走
{
Map[i][j+1]=5;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
else
{
if(Map[i][j]==5&&Map[i][j+1]==4&&Map[i][j+2]==0) //人推箱子
{
Map[i][j+1]=5;
Map[i][j+2]=4;
Map[i][j]=0;
}
if(Map[i][j+1]==3) //人遇到目的地
{
Map[i][j+1]=8;
if(Map[i][j]==3||Map[i][j]==8)
Map[i][j]=3;
else
Map[i][j]=0;
}
if(((Map[i][j+1]==4&&Map[i][j+2]==3)||(Map[i][j+1]==7&&Map[i][j+2]==3))&&Map[i][j]!=8) //把箱子推入目的地
{
mv4++;
Map[i][j+2]=7;
if(mv4==1)
{
Map[i][j+1]=5;
Map[i][j]=0;
}
if(mv4==2)
{
Map[i][j+1]=8;
Map[i][j]=0;
mv4=0;
}
}
if(Map[i][j]==8&&Map[i][j+1]==7&&Map[i][j+2]==3) //把箱子推进目的地后
{
Map[i][j+2]=7;
Map[i][j+1]=8;

Map[i][j]=3;
}
if(Map[i][j+2]==0&&Map[i][j+1]==7&&Map[i][j]==8) //把箱子退出目的地
{
Map[i][j+2]=4;
Map[i][j+1]=8;
Map[i][j]=3;
}
if(Map[i][j+2]==0&&Map[i][j+1]==4&&Map[i][j]==8)
{
Map[i][j+2]=4;
Map[i][j+1]=5;
Map[i][j]=3;
}
}
break;
}
}


return 0;
}

//显示界面
void Draw_Map(int Map[13][14])
{
for(i=0;i<13;i++)
{
for(j=0;j<14;j++)
{
switch(Map[i][j])
{
case 0:
printf(" "); //外空地
break;
case 1:
color(10);
printf("■"); //墙
break;
case 2:
printf(" "); //内空地
break;
case 3:
color(8);
printf("※"); //目的地
break;
case 4:
color(5);
printf("□"); //箱子
break;
case 5:
color(4);
printf("★"); //人
break;
case 7:
color(9);
printf("◆"); //箱子与目的地
break;
case 8:
color(7);
printf("★"); //人与目的地
break;
}
}
printf("\n");
}
}
//颜色函数
void color(int b)
{
HANDLE hConsole=GetStdHandle((STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(hConsole,b); //调用API字体和背景颜色的函数
}

相关文档
最新文档