推箱子小游戏

本文详细介绍了一款基于C语言的迷宫推箱子游戏的实现过程。游戏利用字符绘图创建了一个16x16的迷宫地图,玩家通过键盘输入控制角色移动,目标是将箱子推到终点。游戏包含人物、箱子、墙壁和终点等元素,通过随机生成起点增加游戏趣味性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
begin:
    int i,j;
    char p[16][16];
    for(i=0; i<16; i++)
    {
        for(j=0; j<16; j++)
            p[i][j]=' ';
    }
    for(i=0; i<16; i++)
    {
        p[i][15]='#';
        p[i][0]='#';
    }

    for(j=0; j<16; j++)
    {
        p[0][j]='#';
        p[15][j]='#';
    }
    p[5][3]='#';
    p[6][8]='#';
    p[2][3]='#';
    p[8][12]='#';
    p[2][12]='#';
    p[11][3]='#';
    p[10][9]='#';
    p[6][6]='#';
    p[12][12]='#';
    p[12][11]='#';
    p[13][8]='#';
    p[8][6]='#';
    p[8][5]='#';
    p[9][5]='#';
    p[5][8]='#';
    p[2][0]='#';
    p[2][7]='#';
    p[2][8]='#';
    p[3][8]='#';
    p[3][9]='#';
    p[4][3]='#';
    p[5][14]='#';
    p[5][13]='#';
    p[13][1]='#';
    p[13][2]='#';
    p[13][3]='#';
    p[1][1]='#';
    p[1][2]='#';
    p[2][1]='#';
    p[7][8]='#';
    p[6][6]='#';
    p[7][6]='#';
    p[8][6]='#';
    p[14][1]='#';
    p[14][2]='#';
    p[14][3]='#';
    p[14][4]='#';
    p[14][5]='#';
    p[10][7]='#';
    p[10][8]='#';
    p[11][8]='#';
    p[4][9]='#';
    p[7][1]='#';
    p[8][1]='#';
    p[9][2]='#';
    p[14][14]='#';
    p[14][13]='#';
    p[6][14]='#';
    srand(time(NULL));
    p[4][5]='!';
    p[5][4]='@';
    int i3,j3;
    for(i=0; i<100; i++)
    {
        i3=(rand()%16),j3=(rand()%16);
        if(p[i3][j3]!='#'&&p[i3][j3]!='!'&&p[i3][j3]!='@')
            break;
    }
    p[i3][j3]='O';
    for(i=0; i<16; i++)
    {
        for(j=0; j<16; j++)
            printf("%c",p[i][j]);
        printf("\n");
    }
    printf("\n");  // 打印地图
    printf("'@'为箱子  ‘!’为人物  ‘#’为墙壁  ‘O’为终点\n输入大写WSAD 并按 回车确定 分别为向上下左右移动\n(单次输入单个大写字母)\n");
    int i1=4,j1=5,i2=5,j2=4;//i1,j1人物坐标  i2,j2箱子坐标
    char  x;
    int bushu=0;
    while (~scanf("%c",&x))
    {
        char q[100];
        gets(q);
        if(x=='S')  //如果向下走
        {
            if (i1==i2-1&&j1==j2)//如果人在箱子的正上方
            {
                if(p[i2+1][j2]!='#')//如果箱子没被墙壁挡住
                {
                    p[i2+1][j2]='@';
                    p[i2][j2]='!';
                    p[i2-1][j2]=' ';
                    i2++;
                    i1++;
                    bushu++;
                }
                else//如果箱子被墙壁挡住了
                {
                    printf("");
                }
            }
            else if(p[i1+1][j1]!='#')//如果人物不在箱子周围且人物未被箱子挡住
            {
                p[i1+1][j1]='!';
                p[i1][j1]=' ';
                i1++;
                bushu++;
            }
        }
        else if(x=='W')
        {
            if (i1==i2+1&&j1==j2)//如果人在箱子的正下方
            {
                if(p[i2-1][j2]!='#')//如果箱子没被墙壁挡住
                {
                    p[i2-1][j2]='@';
                    p[i2][j2]='!';
                    p[i2+1][j2]=' ';
                    i2--;
                    i1--;
                    bushu++;
                }
                else//如果箱子被墙壁挡住了
                {
                    printf("");
                }
            }
            else if(p[i1-1][j1]!='#')//如果人物不在箱子周围且人物未被箱子挡住
            {
                p[i1-1][j1]='!';
                p[i1][j1]=' ';
                i1--;
                bushu++;
            }
        }
        else if(x=='A')
        {
            if (i1==i2&&j1==j2+1)//如果人在箱子的正左方
            {
                if(p[i2][j2-1]!='#')//如果箱子没被墙壁挡住
                {
                    p[i2][j2-1]='@';
                    p[i2][j2]='!';
                    p[i2][j2+1]=' ';
                    j2--;
                    j1--;
                    bushu++;
                }
                else//如果箱子被墙壁挡住了
                {
                    printf("");
                }
            }
            else if(p[i1][j1-1]!='#')//如果人物不在箱子周围且人物未被箱子挡住
            {
                p[i1][j1-1]='!';
                p[i1][j1]=' ';
                j1--;
                bushu++;
            }
        }
        else if(x=='D')
        {
            if (i1==i2&&j1==j2-1)//如果人在箱子的正左方
            {
                if(p[i2][j2+1]!='#')//如果箱子没被墙壁挡住
                {
                    p[i2][j2+1]='@';
                    p[i2][j2]='!';
                    p[i2][j2-1]=' ';
                    j2++;
                    j1++;
                    bushu++;
                }
                else//如果箱子被墙壁挡住了
                {
                    printf("");
                }
            }
            else if(p[i1][j1+1]!='#')//如果人物不在箱子周围且人物未被箱子挡住
            {
                p[i1][j1+1]='!';
                p[i1][j1]=' ';
                j1++;
                bushu++;
            }
        }
        system("cls");
        for(i=0; i<16; i++)
        {
            for(j=0; j<16; j++)
                printf("%c",p[i][j]);
            printf("\n");
        }
        printf("\n");
        if (i2==i3&&j2==j3)
        {
            printf("====================================================Mission Succeed=====================================================\n");
            printf("按下‘R’回车继续游戏\n");
        }
        else if((p[i2+1][j2]=='#'&&p[i2][j2+1]=='#')||(p[i2+1][j2]=='#'&&p[i2][j2-1]=='#')||(p[i2+1][j2]=='#'
                &&p[i2][j2-1]=='#')||(p[i2-1][j2]=='#'&&p[i2][j2-1]=='#')||(i1==i3&&j1==j3))
        {
            printf("====================================================Mission Failure=====================================================\n");
            printf("按下‘R’回车重新游戏\n");
        }
        else
            printf("当前所用步数:%d\n",bushu);
        if(x=='R')
        {
            system("cls");
            goto begin;
        }
    }
    char q[100];
    for(i=0; i<100; i++)
        scanf("%c",&q[i]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hesorchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值