这篇文章将为大家详细讲解有关使用C语言怎么制作一个推箱子游戏,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
具体的数字与字符含义转换如下:
0 printf(" "); 路
2 printf("@"); 人
3 printf("#"); 墙
4 printf("$"); 箱子
5 printf("O"); 目标点
7 printf("@"); 人
9 printf("$"); 箱子
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>
int mx = 0;
int my = 0;
int step = 0;
char map[8][8] = {
{0,0,3,3,3,3,0,0},
{0,0,3,5,5,3,0,0},
{0,3,3,0,5,3,3,0},
{0,3,0,0,4,5,3,0},
{3,3,0,4,0,0,3,3},
{3,0,0,3,4,4,0,3},
{3,0,0,2,0,0,0,3},
{3,3,3,3,3,3,3,3}
};
void show_map(void)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(0 == map[i][j])
{
printf(" ");
}
else if(2 == map[i][j])
{
printf("@ ");
}
else if(3 == map[i][j])
{
printf("# ");
}
else if(4 == map[i][j])
{
printf("$ ");
}
else if(5 == map[i][j])
{
printf("O ");
}
else if(7 == map[i][j])
{
printf("@ ");
}
else if(9 == map[i][j])
{
printf("$ ");
}
}
printf("\n");
}
}
void up(void)
{
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
if(2 == map[i][j] || 7 == map[i][j])
{
mx =i;
my =j;
}
}
}
if(3 == map[mx-1][my])
{
return;
}
else if(0 == map[mx-1][my] || 5 == map[mx-1][my])
{
map[mx-1][my] += 2;
map[mx][my] -= 2;
step++;
}
else if(4 == map[mx-1][my] || 9 == map[mx-1][my])
{
if(0 == map[mx-2][my])
{
map[mx-2][my] += 4;
map[mx-1][my] -= 2;
map[mx][my] -= 2;
step++;
}
else if(5 == map[mx-2][my])
{
map[mx-2][my] += 4;
map[mx-1][my] -= 2;
map[mx][my] -= 2;
step++;
}
else
{
return;
}
}
}
void down(void)
{
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
if(2 == map[i][j] || 7 == map[i][j])
{
mx =i;
my =j;
}
}
}
if(3 == map[mx+1][my])
{
return;
}
else if(0 == map[mx+1][my] || 5 == map[mx+1][my])
{
map[mx+1][my] += 2;
map[mx][my] -= 2;
step++;
}
else if(4 == map[mx+1][my] || 9 == map[mx+1][my])
{
if(0 == map[mx+2][my])
{
map[mx+2][my] += 4;
map[mx+1][my] -= 2;
map[mx][my] -= 2;
step++;
}
else if(5 == map[mx+2][my])
{
map[mx+2][my] += 4;
map[mx+1][my] -= 2;
map[mx][my] -= 2;
step++;
}
else
{
return;
}
}
}
void left(void)
{
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
if(2 == map[i][j] || 7 == map[i][j])
{
mx =i;
my =j;
}
}
}
if(3 == map[mx][my-1])
{
return;
}
else if(0 == map[mx][my-1] || 5 == map[mx][my-1])
{
map[mx][my-1] += 2;
map[mx][my] -= 2;
step++;
}
else if(4 == map[mx][my-1] || 9 == map[mx][my-1])
{
if(0 == map[mx][my-2])
{
map[mx][my-2] += 4;
map[mx][my-1] -= 2;
map[mx][my] -= 2;
step++;
}
else if(5 == map[mx][my-2])
{
map[mx][my-2] += 4;
map[mx][my-1] -= 2;
map[mx][my] -= 2;
step++;
}
else
{
return;
}
}
}
void right(void)
{
for(int i=0; i<8;i++)
{
for(int j=0; j<8;j++)
{
if(2 == map[i][j] || 7 == map[i][j])
{
mx =i;
my =j;
}
}
}
if(3 == map[mx][my+1])
{
return;
}
else if(0 == map[mx][my+1] || 5 == map[mx][my+1])
{
map[mx][my+1] += 2;
map[mx][my] -= 2;
step++;
}
else if(4 == map[mx][my+1] || 9 == map[mx][my+1])
{
if(0 == map[mx][my+2])
{
map[mx][my+2] += 4;
map[mx][my+1] -= 2;
map[mx][my] -= 2;
step++;
}
else if(5 == map[mx][my+2])
{
map[mx][my+2] += 4;
map[mx][my+1] -= 2;
map[mx][my] -= 2;
step++;
}
else
{
return;
}
}
}
void start_soko(void)
{
FILE* frp = fopen("soko.bin","r");
if(NULL == frp)
{
printf("数据加载错误!\n");
return;
}
fread(map,1,64,frp);
fclose(frp);
}
void exit_soko(void)
{
FILE* fwp = fopen("soko.bin","w");
printf("____");
if(NULL == fwp)
{
printf("数据保存错误!\n");
}
fwrite(map,1,64,fwp);
fclose(fwp);
}
int main()
{
start_soko();
while(true)
{
system("clear");
//显示地图
show_map();
//判定是否游戏结束
int cnt = 0;
for(int i=0; i<8; i++)
{
for(int j=0; j<8;j++)
{
if(9 == map[i][j])
{
cnt++;
}
}
}
if(4 == cnt)
{
printf("游戏结束,共使用%d步!\n",step);
return 0;
}
printf("%d\n",cnt);
//获取方向键
switch(getch())
{
case 'w':up();break;
case 's':down();break;
case 'a':left();break;
case 'd':right();break;
case 'q':exit_soko();return 0;
default:
puts("输入指令有误!");
}
}
exit_soko();
}
关于使用C语言怎么制作一个推箱子游戏就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。