C语言实现推箱子

推箱子:数据分析:

            1.确定数值与字符的对应关系

                0   ' '

                1   '@'

                2   '$'

                3   '#'

                4   'o'

                5   '@'

                7   '$'

            2.定义8*8整数地图并初始化

            3.定义记录角色位置的变量x y

            4.定义记录步数的变量

        逻辑分析:进入死循环

            1.清理屏幕,显示地图

                if(0 == map[i][j])  printf(" ");

            2.获取方向键并处理

            3.判断是否游戏胜利

                前方是路,参考走迷宫

                    前方+1

                    原位置-1

                    更新坐标

                2.前方是箱子

                    箱子的前方是路\目标点

                        人前方的前方    +3

                        人前方          -3+1

                        人原位置        -1

                        '更新左边

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>

int main(int argc,const char* argv[])
{
    char map[8][8] = {
        {' ',' ','*','*','*','*',' ',' '},
        {' ',' ','*','x','x','*',' ',' '},
        {' ','*','*',' ','x','*','*',' '},
        {' ','*',' ',' ','o','x','*',' '},
        {'*','*',' ','o',' ',' ','*','*'},
        {'*',' ',' ','*','o','o',' ','*'},
        {'*',' ',' ','w',' ',' ',' ','*'},
        {'*','*','*','*','*','*','*','*'},
        };
    int i,j,cnt=0;
    char x=6,y=3;
    for(;;)
    {
        if(' '==map[1][3])
            map[1][3]='x';
        if(' '==map[1][4])
            map[1][4]='x';
        if(' '==map[2][4])
            map[2][4]='x';
        if(' '==map[3][5])
            map[3][5]='x';
        system("clear");
        for(i=0;i<8;i++)    
        {
            for(j=0;j<8;j++)
            {
                printf("%c ",map[i][j]);    
            }
            printf("\n");
        }
        if('o'==map[1][3]&&'o'==map[1][4]&&'o'==map[2][4]&&'o'==map[3][5])
        {
            printf("你赢啦!共用%d步\n",cnt);    
            break;
        }
        int key = getch();
        if(183 == key && '*'!=map[x-1][y] && 'o'!=map[x-1][y])
        {
            map[x][y]=' ';
            map[x-1][y]='w';
            x-=1;cnt++;
        }
        else if(183==key&&'*'!=map[x-2][y]&&'o'==map[x-1][y]&&'o'!=map[x-2][y])
        {
            map[x][y]=' ';
            map[x-2][y]='o';
            map[x-1][y]='w';
            x-=1;cnt++;
        }
        if(184 == key && '*'!=map[x+1][y] && 'o'!=map[x+1][y])
        {
            map[x][y]=' ';
            map[x+1][y]='w';
            x+=1;cnt++;
        }
        else if(184==key&&'*'!=map[x+2][y]&&'o'==map[x+1][y]&&'o'!=map[x+2][y])
        {
            map[x][y]=' ';
            map[x+2][y]='o';
            map[x+1][y]='w';
            x+=1;cnt++;
        }
        if(185 == key && '*'!=map[x][y+1] && 'o'!=map[x][y+1])
        {
            map[x][y]=' ';
            map[x][y+1]='w';
            y+=1;cnt++;
        }
        else if(185==key&&'*'!=map[x][y+2]&&'o'==map[x][y+1]&&'o'!=map[x][y+2])
        {
            map[x][y]=' ';
            map[x][y+2]='o';
            map[x][y+1]='w';
            y+=1;cnt++;
        }
        if(186 == key && '*'!=map[x][y-1] && 'o'!=map[x][y-1])
        {
            map[x][y]=' ';
            map[x][y-1]='w';
            y-=1;cnt++;
        }
        else if(186==key&&'*'!=map[x][y-2]&&'o'==map[x][y-1]&&'o'!=map[x][y-2])
        {
            map[x][y]=' ';
            map[x][y-2]='o';
            map[x][y-1]='w';
            y-=1;cnt++;
        }
    }
    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值