推箱子之完美游戏程序清单.docx
- 文档编号:24865797
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:18
- 大小:16.93KB
推箱子之完美游戏程序清单.docx
《推箱子之完美游戏程序清单.docx》由会员分享,可在线阅读,更多相关《推箱子之完美游戏程序清单.docx(18页珍藏版)》请在冰豆网上搜索。
推箱子之完美游戏程序清单
//.推箱子源代码.
#include
#include
#include
#include
inti,j;
voiddrawmap(intmap[10][12]);//声明画图函数
voidsetback();
intmain()
{
charinput;
intcount=0;//定义记分变量
/*下面定义一个二维数组,其中的元素是不同图像的ID号,不同数字分别代表的图像元素*/
setback();
intmap[10][12]={
{2,2,2,2,2,1,1,1,1,1,2,2},
{1,1,1,1,2,1,0,0,0,1,1,2},
{1,0,0,1,1,1,0,1,0,0,1,2},
{1,0,4,3,3,3,3,3,1,0,1,1},
{1,0,0,1,1,3,3,3,4,0,0,1},
{1,0,0,0,0,4,1,0,4,1,0,1},
{1,0,4,1,4,0,0,0,4,0,0,1},
{1,1,0,6,0,1,1,1,4,1,0,1},
{2,1,1,1,1,1,2,1,0,0,0,1},
{2,2,2,2,2,2,2,1,1,1,1,1}
};
while
(1)//死循环,等待用户命令
{
system("cls");
printf("由范占伟,刘艳威制:
\n\n\n");
drawmap(map);
printf("你的当前得分=%d\n\n",count);
//找初始位置
for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
{
if(map[i][j]==6||map[i][j]==9)break;
}
if(map[i][j]==6||map[i][j]==9)break;
}
printf("您的当前坐标(%d,%d)\n",i,j);
input=getch();//用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
switch(input)
{
case'w':
//如果人上面是空地。
if(map[i-1][j]==0)
{
map[i-1][j]=6+0;//人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3;//将人往前走一步后原地的ID修改为目的地ID(3)。
else
map[i][j]=0;//否则原地ID修改为空地ID。
}
//如果人前面是目的地。
elseif((map[i-1][j]==3)||(map[i-1][j]==9))
{
map[i-1][j]=6+3;//人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9)//如果原地也是目的地(ID为9)。
map[i][j]=3;//人走后把原地ID修改回目的地ID。
else
map[i][j]=0;//否则原地ID修改为为空地ID
}
//如果人前面是箱子。
elseif(map[i-1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if(map[i-2][j]==0)
{
map[i-2][j]=4;//人推箱子往前走一步,把空地ID修改为箱子ID(4)
//下面是对箱子原地进行判断
if(map[i-1][j]==7)//如果箱子原地为目的地。
map[i-1][j]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i-1][j]=6;//否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断
if(map[i][j]==9)//如果之前是目的地。
map[i][j]=3;//人走了之后修改回目的地ID。
else
map[i][j]=0;//否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
elseif(map[i-2][j]==3)
{
map[i-2][j]=7;//ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
elseif(map[i-1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i-2][j]==0)
{
count--;
map[i-2][j]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i-1][j]=9;//人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i-2][j]==3)
{
map[i-2][j]=7;//把箱子推入了另一目的地,自然,ID也应是7。
map[i-1][j]=9;//人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case's':
//如果人下面是空地。
if(map[i+1][j]==0)
{
map[i+1][j]=6+0;//人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID(3)。
else
map[i][j]=0;//否则原地ID修改为空地ID。
}
//如果人前面是目的地。
elseif(map[i+1][j]==3)
{
map[i+1][j]=6+3;//人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9)//如果原地也是目的地(ID为9)。
map[i][j]=3;//人走后把原地ID修改回目的地ID。
else
map[i][j]=0;//否则原地ID修改为为空地ID
}
//如果人前面是箱子。
elseif(map[i+1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if(map[i+2][j]==0)
{
map[i+2][j]=4;//人推箱子往前走一步,把空地ID修改为箱子ID(4)
//下面是对箱子原地进行判断
if(map[i+1][j]==7)//如果箱子原地为目的地。
map[i+1][j]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i+1][j]=6;//否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断
if(map[i][j]==9)//如果之前是目的地。
map[i][j]=3;//人走了之后修改回目的地ID。
else
map[i][j]=0;//否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
elseif(map[i+2][j]==3)
{
map[i-2][j]=7;//ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i+1][j]==7)
map[i+1][j]=9;
else
map[i+1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
elseif(map[i+1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i+2][j]==0)
{
count--;
map[i+2][j]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i+1][j]=9;//人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i+2][j]==3)
{
map[i+2][j]=7;//把箱子推入了另一目的地,自然,ID也应是7。
map[i+1][j]=9;//人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case'a':
//如果人左面是空地。
if(map[i][j-1]==0)
{
map[i][j-1]=6+0;//人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID(3)。
else
map[i][j]=0;//否则原地ID修改为空地ID。
}
//如果人前面是目的地。
elseif(map[i][j-1]==3)
{
map[i][j-1]=6+3;//人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9)//如果原地也是目的地(ID为9)。
map[i][j]=3;//人走后把原地ID修改回目的地ID。
else
map[i][j]=0;//否则原地ID修改为为空地ID
}
//如果人前面是箱子。
elseif(map[i][j-1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if(map[i][j-2]==0)
{
map[i][j-2]=4;//人推箱子往前走一步,把空地ID修改为箱子ID(4)
//下面是对箱子原地进行判断
if(map[i][j-1]==7)//如果箱子原地为目的地。
map[i][j-1]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i][j-1]=6;//否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断
if(map[i][j]==9)//如果之前是目的地。
map[i][j]=3;//人走了之后修改回目的地ID。
else
map[i][j]=0;//否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
elseif(map[i][j-2]==3)
{
count++;
map[i][j-2]=7;//ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
//下面是对箱子原先位置的判断,同上。
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
elseif(map[i][j-1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j-2]==0)
{
count--;
map[i][j-2]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i][j-1]=9;//人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j-2]==3)
{
map[i][j-2]=7;//把箱子推入了另一目的地,自然,ID也应是7。
map[i][j-1]=9;//人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case'd':
//如果人右面是空地。
if(map[i][j+1]==0)
{
map[i][j+1]=6+0;//人往前走一步,ID为人的ID(6)加上空地的ID(0)。
if(map[i][j]==9)//如果当前人站的位置为目的地,则ID为9(即人的ID(6)加上目的地ID(3))。
map[i][j]=3;//将人往前走一步后原地的ID修改为空地ID(3)。
else
map[i][j]=0;//否则原地ID修改为空地ID。
}
//如果人前面是目的地。
elseif(map[i][j+1]==3)
{
map[i][j+1]=6+3;//人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9)//如果原地也是目的地(ID为9)。
map[i][j]=3;//人走后把原地ID修改回目的地ID。
else
map[i][j]=0;//否则原地ID修改为为空地ID
}
//如果人前面是箱子。
elseif(map[i][j+1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if(map[i][j+2]==0)
{
map[i][j+2]=4;//人推箱子往前走一步,把空地ID修改为箱子ID(4)
//下面是对箱子原地进行判断
if(map[i][j+1]==7)//如果箱子原地为目的地。
map[i][j+1]=9;//人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i][j+1]=6;//否则,人站在了原来的空地上,ID应该为6+0=6。
//下面是对人原地进行判断
if(map[i][j]==9)//如果之前是目的地。
map[i][j]=3;//人走了之后修改回目的地ID。
else
map[i][j]=0;//否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
elseif(map[i][j+2]==3)
{
count++;
map[i][j+2]=7;//ID为7(目的地ID(3)+箱子ID(4)=7),表示已经把箱子推入了目的地。
//下面是对箱子原先位置的判断,同上。
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}}
//如果人前面是已经进入某目的地的箱子(ID=7)。
elseif(map[i][j+1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j+2]==0)
{
count--;
map[i][j+2]=4;//把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i][j+1]=9;//人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j+2]==3)
{
map[i][j+2]=7;//把箱子推入了另一目的地,自然,ID也应是7。
map[i][j+1]=9;//人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}}
break;
}
if(count==8)//如果分数达到8分
{
system("cls");//清屏
drawmap(map);
break;//退出死循环
}}
system("cls");
system("color3C");
printf("\n恭喜你,过关了!
!
\n");//过关提示
return0;
}
voiddrawmap(intmap[10][12])
{
for(i=0;i<10;i++)
{printf("");
for(j=0;j<12;j++)
{
switch(map[i][j])
{
case0:
printf("");//数字0代表道路
break;
case1:
printf("■");//数字1代表墙壁
break;
case2:
printf("");//数字2是游戏边框的空白部分
break;
case3:
printf("×");//数字3代表目的地
break;
case4:
printf("◎");//数字4代表箱子
break;
case7:
printf("☆");//数字7代表箱子进入目的地
break;
case6:
printf("♀");//数字6代表人
break;
case9:
printf("♂");//数字9代表人进入目的地
break;}}
printf("\n");//分10行输出
}}
voidsetback()
{
system("cls");
system("color2B");
printf("\n");
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 箱子 完美 游戏 程序 清单