给你们个c语言源代码不用谢
#include <stdio.h>
int main ()
{
int screen[9][11]={
{0,1,1,1,1,1,1,1,1,0,0},
{0,1,0,0,0,1,0,0,0,1,0},
{0,1,0,2,2,2,2,2,0,1,0},
{0,1,0,2,0,2,0,2,0,1,1},
{0,1,0,0,0,3,0,0,2,0,1},
{1,1,0,1,1,1,1,0,2,0,1},
{1,0,4,4,4,4,4,1,0,0,1},
{1,0,4,4,4,4,4,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,0}
};//定义为全局变量 (地图) i表示行,j表示列
int cum(){
int i,j,k=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(screen[i][j]==2){
k++;
}
}
}//遍历整个二维数组
return k;
}//计算地图中有多少个终点
\
void print(){
int i,j;
printf("请用wsad代表上下左右来进行游戏\n");
for(i=0;i<9;i++){
for(j=0;j<11;j++){
switch(screen[i][j]){
case 0:
printf(" ");//空
break;
case 1:
printf("■");//墙
break;
case 2:
printf("★");//箱子
break;
case 3:
printf("♀");//人
break;
case 4:
printf("○");//终点
break;
case 6:
printf("★");
break;//箱子和终点
case 7:
printf("♀");
break;
}
}
printf("\n");
}
}
int win(){
int i,j,k=0;
int t=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(screen[i][j]==6){
k++;
}
}
}//遍历整个二维数组,计算箱子在终点上的个数
if(k==cum()){
t=1;
}//如果个数等于前面计算出的终点个数,则说明所有终点都放了箱子,说明游戏胜利
return t;
} //判断赢
int lose(){
int i,j;
int k=0;
for(i=0;i<9;i++){
for(j=0;j<11;j++){
if(i>0 && j>0 ){
if(screen[i][j] == 2 || screen[i][j] == 6){
if(((screen[i-1][j] == 1 || screen[i-1][j] == 2 || screen[i-1][j] == 6) && (screen[i][j-1] == 1 || screen[i][j-1] == 2 || screen[i][j-1] == 6))
|| ((screen[i][j-1] == 1 || screen[i][j-1] == 2 || screen[i][j-1] == 6) && (screen[i+1][j] == 1 || screen[i+1][j] == 2 || screen[i+1][j] == 6))
|| ((screen[i+1][j] == 1 || screen[i+1][j] == 2 || screen[i+1][j] == 6) && (screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] == 6))
|| ((screen[i][j+1] == 1 || screen[i][j+1] == 2 || screen[i][j+1] == 6) && (screen[i-1][j] == 1 || screen[i-1][j] == 2 || screen[i-1][j] == 6))){
k++;
}
}
}
}/*这里也是遍历了整个数组,判断所有的箱子四个方向的情况,
如果有三个方向被堵住了说明箱子无法移动了,也表明这个箱子失效了,
用k来记录失效的个数,当全部失效时游戏失败
(这是游戏的玩法,其实有一个被堵住就已经不可能胜利了)*/
}
if(k==cum()){
k=1;
}
return k;//返回1说明游戏失败
}
void movew(){
if(x>0){
if(screen[x-1][y]==1){
return ;/*如果箱子的上面是墙,则地图不会发生变化,因为
推不动嘛*/
}else if(screen[x-1][y]==0){
screen[x-1][y]+=3;
screen[x][y]-=3;
x--;/*如果前面是空地,则需要向前移动一格,也就是原先人的位置
变成空地,前方的空地变成人,空地(0)变成人(3)需要加3,
人变成空地需要减3*/
}else if(screen[x-1][y]==4){
screen[x-1][y]+=3;
screen[x][y]-=3;
x--;
}//一样的
else if(screen[x-1][y]==2||screen[x-1][y]==6){
if(screen[x-2][y]==0){
screen[x-2][y]+=2;//箱子前面的格变成箱子(2)
screen[x-1][y]+=1;//箱子的位置变成人(3)
screen[x][y]-=3;/*如果前面是空地,则需要向前移动
一格,也就是原先是箱子的格子变成人,人的位置变成空
地,原先的空地变成箱子,箱子(2)变成人(3)需要减
3,空地变成人*/
x--;
}else if(screen[x-2][y]==1){
return ;
}else if(screen[x-2][y]==2){
return;//如果箱子的前面是墙或者其他的箱子,则箱子推不动
}else if(screen[x-2][y]==4){
screen[x-2][y]+=2;
screen[x-1][y]+=1;
screen[x][y]-=3;
x--;
}//这个情况别漏了
}
}
}
void moves(){
if(x<9){
if(screen[x+1][y]==1){
return ;
}else if(screen[x+1][y]==0){
screen[x+1][y]+=3;
screen[x][y]-=3;
x++;
}else if(screen[x+1][y]==4){
screen [x+1][y]+=3;
screen[x][y]-=3;
x++;
}
else if(screen[x+1][y]==2||screen[x+1][y]==6){
if(screen[x+2][y]==1){
return;
}else if(screen[x+2][y]==0){
screen[x+2][y]+=2;
screen[x+1][y]+=1;
screen[x][y]-=3;
x++;
}else if(screen[x+2][y]==2){
return ;
}else if(screen[x+2][y]==4){
screen[x+2][y]+=2;
screen[x+1][y]+=1;
screen[x][y]-=3;
x++;
}
}
}
}
void movea(){
if(y>0){
if(screen[x][y-1]==1){
return;
}else if(screen[x][y-1]==4){
screen[x][y-1]+=3;
screen[x][y]-=3;
y--;
}
else if(screen[x][y-1]==0){
screen[x][y-1]+=3;
screen[x][y]-=3;
y--;
}else if(screen[x][y-1]==2||screen[x][y-1]==6){
if(screen[x][y-2]==0){
screen[x][y-2]+=2;
screen[x][y-1]+=1;
screen[x][y]-=3;
y--;
}else if(screen[x][y-2]==1){
return;
}else if(screen[x][y-2]==2){
return;
}else if(screen[x][y-2]=4){
screen[x][y-2]+=2;
screen[x][y-1]+=1;
screen[x][y]-=3;
y--;
}
}
}
}
void moved(){
if(y<9){
if(screen[x][y+1]==1){
return;
}else if(screen[x][y+1]==4){
screen[x][y+1]+=3;
screen[x][y]-=3;
y++;
}
else if(screen[x][y+1]==0){
screen[x][y+1]+=3;
screen[x][y]-=3;
y++;
}else
if(screen[x][y+1]==2||screen[x][y+1]==6){
if(screen[x][y+2]==0){
screen[x][y+2]+=2;
screen[x][y+1]+=1;
screen[x][y]-=3;
y++;
}else if(screen[x][y+2]==4){
screen[x][y+2]+=2;
screen[x][y+1]+=1;
screen[x][y]-=3;
y++;
}else if(screen[x][y+2]==2){
return;
}else if(screen[x][y+2]==1){
return;
}
}
}
}
int main(){
int n,t;
int j,k;
int b=1;
here:
system("cls");//
printf("开始游戏请按1\n退出游戏请按2\n");
scanf("%d",&j);
if(j==1){
printf("请用wsad代表上下左右来进行游戏\n");//这个就引导进入游戏
while(1){
system("cls");/*在每一次移动过后都清除上一个地图,不然就会每走
一步生成一个图*/
print();//先打印地图
scanf("%c",&n);//读入用户的操作
switch(n){
case 'w':
movew();
break;
case 's':
moves();
break;
case 'a':
movea();
break;
case 'd':
moved();
break;
} //控制人移动
t=win();
if(t==1){
goto there;
}//每次操作完先判断游戏是否胜利,如果胜利了直接跳到函数最后
if(b == lose()){
system("cls");
print();
printf("游戏失败");
return 0;
} //游戏失败提示
}
}else {
system("cls");
printf("您确认要退出游戏吗\n确认退出按1\t返回上一层按2\n");
scanf("%d",&k);
if(k==1){
printf("你已退出游戏,期待你的再次到来,谢谢");
return 0;
}else {
goto here;
}
}//这一块是最前面用户进入游戏那里的,如果用户选择退出游戏执行的操作
there:
printf("恭喜你通过了游戏!");
return 0;
}//主函数
return 0;
}