推箱子(c语言)

推箱子(c语言)基本结构制作三个地图,用数字分别表示不同的东西(0空1墙2人3箱4终点5人+终6箱+终)改变a,b的值,实现上下左右;移动时,要判断移动后的位置原本是什么,有时还要判断如果移动两次之后的位置是什么。(简化为讨论三个位置不同情况的不同变化,具体看代码)#include<stdio.h>#include <stdlib.h>#include <...
摘要由CSDN通过智能技术生成

基本结构

制作三个地图,用数字分别表示不同的东西(0空1墙2人3箱4终点5人+终6箱+终)
改变a,b的值,实现上下左右;(想到了走迷宫的next数组)
移动时,要判断移动后的位置原本是什么,有时还要判断如果移动两次之后的位置是什么。(简化为讨论三个位置不同情况的不同变化,具体看代码)

#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
int n,a,b,x,y,tx,ty,sum,all;//a,b上下左右;x,y位置;tx,ty尝试位置;sum 6的个数;all移动步数
int map[3][10][10]//地图 0空1墙2人3箱4终点5人+终6箱+终
int f()//上下左右相同部分
void up(int x,int y)//上
void down(int x,int y)//下
void left(int x,int y)//左
void right(int x,int y)//右
void pmap(int n)//打印地图
int main()//主函数

上下左右相同部分

int f()//上下左右相同部分
{
   
if(map[n][tx][ty]==1)//是墙,不操作
return 1;
else if(map[n][tx][ty]==0)//是空
{
   
if(map[n][x][y]==5)//当前是人+终
map[n][x][y]=4;//变成终,终不能消失
else
map[n][x][y]=0;//变成空
map[n][tx][ty]=2;//尝试变成人
x=tx;//位置改变
y=ty;
all++;//步数增加
return 1;
}
else if(map[n][tx][ty]==3)//是箱
{
   
if(map[n][tx+a][ty+b]==0)//判断移动两次的位置
{
   
map[n][tx][ty]=2<
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推箱子是一种经典的游戏,以下是一个基本的推箱子游戏的C语言程序代码,供参考: ``` #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #define MAP_WIDTH 10 #define MAP_HEIGHT 10 #define MAX_STEP 100 int map[MAP_HEIGHT][MAP_WIDTH] = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,2,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}, }; int player_x = 1, player_y = 1; //玩家初始位置 int box_x = 2, box_y = 2; //箱子初始位置 int steps = 0; //步数 void draw_map() { system("cls"); //清屏 for(int i=0; i<MAP_HEIGHT; i++) { for(int j=0; j<MAP_WIDTH; j++) { if(i == player_y && j == player_x) //画玩家 printf("P"); else if(i == box_y && j == box_x) //画箱子 printf("B"); else if(map[i][j] == 1) //画墙 printf("#"); else //画空地 printf(" "); } printf("\n"); } printf("Steps: %d/%d\n", steps, MAX_STEP); //显示步数 } int is_win() { return (map[box_y-1][box_x] == 3 && map[box_y][box_x+1] == 3 && map[box_y+1][box_x] == 3 && map[box_y][box_x-1] == 3); } void game_over() { system("cls"); printf("Game Over!\n"); system("pause"); exit(0); } void move_player(int dx, int dy) { if(map[player_y+dy][player_x+dx] == 1) //如果前方是墙,返回 return; if(player_x+dx == box_x && player_y+dy == box_y) //如果前方是箱子 { if(map[box_y+dy][box_x+dx] == 1 || map[box_y+dy][box_x+dx] == 2) //如果箱子前方是墙或者另一个箱子,返回 return; box_x += dx; box_y += dy; steps++; if(is_win()) //如果胜利了,游戏结束 game_over(); } player_x += dx; player_y += dy; steps++; } int main() { while(1) { draw_map(); int key = getch(); switch(key) { case 72: //Up move_player(0, -1); break; case 80: //Down move_player(0, 1); break; case 75: //Left move_player(-1, 0); break; case 77: //Right move_player(1, 0); break; default: break; } if(steps >= MAX_STEP) //如果步数达到上限,游戏结束 game_over(); } return 0; } ``` 这个程序实现了一个简单的推箱子游戏,玩家可以用方向键控制移动,将箱子推到目标位置即可胜利,当步数达到上限或者无法继续移动时游戏结束。程序中使用了二维数组来表示地图,使用了函数来封装游戏逻辑,同时也用到了一些C语言库函数和系统调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值