C语言制作推箱子,vs2019,可选关自动跳下一关。
#include<stdio.h>//推箱子完结版,激动,感谢!!!
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
char asd[] = "欢迎使用本游戏";
int gq;//三维数组
int map[3][8][8] =
{
{
{1,1,1,1,1,1,1,1},
{1,1,1,0,0,0,1,1},
{1,1,0,1,3,4,0,1},
{1,1,0,3,3,0,0,1},
{1,1,0,4,5,4,0,1},
{1,1,1,0,0,0,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1}
},
{
{1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1},
{1,0,0,1,0,7,0,1},
{1,0,0,1,0,3,1,1},
{1,1,0,4,0,0,0,1},
{1,0,4,0,0,3,0,1},
{1,5,0,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
},
{
{1,1,1,1,1,1,1,1},
{1,0,0,1,1,0,0,1},
{1,0,3,0,0,3,4,1},
{1,0,4,1,0,4,3,1},
{1,1,0,5,0,1,0,1},
{0,1,1,1,0,0,0,1},
{0,0,0,1,1,1,1,1}
}
};
int open()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3);
char t1 = 0, t2 = 0, t3 = 0;
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ******************************************************\n");
printf(" *推箱子小游戏*\n\n");
printf(" *1.开始游戏*\n\n");
printf(" *2.选择关卡*\n\n");
printf(" *3.游戏须知*(本游戏内已提供教程,请勿按3)\n\n");
printf(" ******************************************************\n");
while (1)
{
printf(" \n");
t1 = _getch();
if (t1 == '1')
{
break;
}
else if (t1 == '2')
{
printf(" 1 2 3\n");
printf(" 请选择关卡数字\n");
t2 = _getch();
switch (t2)
{
case '1':
gq = 0;
break;
case '2':
gq = 1;
break;
case '3':
gq = 2;
break;
}
break;
}
}
return 0;
}
int mapdraw()//设计地图
{
int i, j, k = 0;
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
switch (map[gq][i][j])
{
case 0:printf(" ");//空地
k++;
if (k % 8 == 0)
printf("\n");
break;
case 1:printf("▓");//墙▓
k++;
if (k % 8 == 0)
printf("\n");
break;
case 3:printf("∞");//目的地∞
k++;
if (k % 8 == 0)
printf("\n");
break;
case 4:printf("□");//箱子□
k++;
if (k % 8 == 0)
printf("\n");
break;
case 5:printf("♀");//人♀
k++;
if (k % 8 == 0)
printf("\n");
break;
case 7:printf("∑");//箱子到达目的地∑
k++;
if (k % 8 == 0)
printf("\n");
break;
case 8:printf("♀");//人到达目的地
k++;
if (k % 8 == 0)
printf("\n");
break;
}
return 0;
}
void t()//游戏须知
{
printf("\n");
printf("\n");
printf("\n");
printf("%s\n", asd);
printf("本程序的悔棋键存在bug,请尽量自己动脑,不使用本bug\n");
printf("▓,墙 & ∞,目的地 & □,箱子\n");
printf("♀,人 & ∑,箱子到达目的地\n");
printf("r是退一步\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
}
int over()//游戏结束
{
int count = 0;
int i, j;
for (i = 0; i <= 7; i++)
{
for (j = 0; j <= 7; j++)
{
if (map[gq][i][j] == 7)
{
count++;
}
}
}
return count;
}
void playgame()//游戏操作
{
int i, j, r, c;
for (i = 0; i < 7; i++)
for (j = 0; j < 7; j++)
if (map[gq][i][j] == 5 || map[gq][i][j] == 8)
{
r = i;
c = j;
}
char asd;
asd = _getch();
if (map[gq][3][4] != 7 || map[gq][4][3] != 7 || map[gq][4][4] != 7)
{
switch (asd)
{
case 'r':
case 'R':
if (map[gq][r - 1][c] == 4 || map[gq][r - 1][c] == 7)//箱子在人上面
{
if (map[gq][r + 1][c] != 1 && map[gq][r + 1][c] != 7 && map[gq][r + 1][c] != 4)
{
map[gq][r - 1][c] -= 4;
map[gq][r][c] -= 1;
map[gq][r + 1][c] += 5;
}
}
else if (map[gq][r + 1][c] == 4 || map[gq][r + 1][c] == 7)//箱子在人下面
{
if (map[gq][r - 1][c] != 1 && map[gq][r - 1][c] != 7 && map[gq][r - 1][c] != 4)
{
map[gq][r + 1][c] -= 4;
map[gq][r][c] -= 1;
map[gq][r - 1][c] += 5;
}
}
else if (map[gq][r][c - 1] == 4 || map[gq][r][c - 1] == 7)//箱子在人左边
{
if (map[gq][r][c + 1] != 1 && map[gq][r][c + 1] != 7 && map[gq][r][c + 1] != 4)
{
map[gq][r][c - 1] -= 4;
map[gq][r][c] -= 1;
map[gq][r][c + 1] += 5;
}
}
else if (map[gq][r][c + 1] == 4 || map[gq][r][c + 1] == 7)//箱子在人右边
{
if (map[gq][r][c - 1] != 1 && map[gq][r][c - 1] != 7 && map[gq][r][c - 1] != 4)
{
map[gq][r][c + 1] -= 4;
map[gq][r][c] -= 1;
map[gq][r][c - 1] += 5;
}
}
break;
case 'w':
case 'W':
case 72:
if (map[gq][r - 1][c] == 0 || map[gq][r - 1][c] == 3)
{
map[gq][r - 1][c] += 5;
map[gq][r][c] -= 5;
}
else if (map[gq][r - 1][c] == 4 || map[gq][r - 1][c] == 7)
{
if (map[gq][r - 2][c] == 0 || map[gq][r - 2][c] == 3)
{
map[gq][r][c] -= 5;
map[gq][r - 1][c] += 1;
map[gq][r - 2][c] += 4;
}
}
break;
case 's':
case 'S':
case 80:
if (map[gq][r + 1][c] == 0 || map[gq][r + 1][c] == 3)
{
map[gq][r][c] -= 5;
map[gq][r + 1][c] += 5;
}
else if (map[gq][r + 1][c] == 4 || map[gq][r + 1][c] == 7)
{
if (map[gq][r + 2][c] == 0 || map[gq][r + 2][c] == 3)
{
map[gq][r][c] -= 5;
map[gq][r + 1][c] += 1;
map[gq][r + 2][c] += 4;
}
}
break;
case 'a':
case 'A':
case 75:
if (map[gq][r][c - 1] == 0 || map[gq][r][c - 1] == 3)
{
map[gq][r][c] -= 5;
map[gq][r][c - 1] += 5;
}
else if (map[gq][r][c - 1] == 4 || map[gq][r][c - 1] == 7)
{
if (map[gq][r][c - 2] == 0 || map[gq][r][c - 2] == 3)
{
map[gq][r][c] -= 5;
map[gq][r][c - 1] += 1;
map[gq][r][c - 2] += 4;
}
}
break;
case 'd':
case 'D':
case 77:
if (map[gq][r][c + 1] == 0 || map[gq][r][c + 1] == 3)
{
map[gq][r][c] -= 5;
map[gq][r][c + 1] += 5;
}
else if (map[gq][r][c + 1] == 4 || map[gq][r][c + 1] == 7)
{
if (map[gq][r][c + 2] == 0 || map[gq][r][c + 2] == 3)
{
map[gq][r][c] -= 5;
map[gq][r][c + 1] += 1;
map[gq][r][c + 2] += 4;
}
}
break;
}
}
}
int main()
{
system("mode con cols=128 lines=48");
SetConsoleTitleA("推箱子小游戏"); //设置窗口
open();
system("cls");
while (1)
{
t();
if(gq==0)
printf(" 推箱子第%d关\n", gq + 1);
if (over() == 3)
{
if ((gq + 1) != 3)
{
gq = gq + 1;
printf(" 推箱子第%d关\n", gq + 1);
}
else if ((gq + 1) == 3)
{
printf("\n");
printf("\n");
printf("\n");
printf("恭喜您,通关了!!!\n");
printf("\n");
printf("\n");
printf("\n");
break;
}
}
mapdraw();
playgame();
system("cls");
}
system("pause");
return 0;
}
//
//写了好久终于完善了,闪屏不要介意。
//2020 10/29 20:25
//The first gane!!!
退回键存在bug,若想解决可以删除‘r’键。