c语言 推箱子游戏实现

2023-05-16

#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;


int arr[9][11] =
{
    { 0,1,1,1,1,1,1,1,1,1,0 },//0代表空地
    { 0,1,0,0,0,1,0,0,0,1,0 },//1代表墙
    { 0,1,0,4,4,4,4,4,0,1,0 },//3代表目的地
    { 1,1,0,4,0,4,0,4,0,1,1 },//4代表箱子
    { 0,1,0,0,0,5,0,0,4,0,1 },//5代表人
    { 1,1,0,0,0,1,1,0,4,0,1 },
    { 1,0,3,3,3,3,3,1,0,0,1 },
    { 1,0,3,3,3,3,3,0,0,1,1 },
    { 1,1,1,1,1,1,1,1,1,1,0 }
};

void drawMap()
{
    for(int i = 0; i < 9; i++)
    {
        for(int j = 0 ; j < 11; j++)
        {
            switch(arr[i][j])
            {
                case 0:
                    cout<<"  ";//0代表空地
                    break;
                case 1:
                    cout<<"■";//1代表墙
                    break;
                case 3:
                    cout<<"☆";//3代表目的地
                    break;
                case 4:
                    cout<<"□";//4代表箱子
                    break;
                case 5:
                    cout<<"♀";//5代表人
                    break;
                case 7:
                    cout<<"★";//箱子在目的地中
                    break;
                case 8:
                    cout<<"♀";//人在目的地中
                    break;
            }
        }
        cout<<endl;
    }
}




void playGame()
{
    int r,c;  //首先要找到人的所在位置,记住人的下标
    for(int i = 0; i < 9; i++)
    {
        for(int j = 0 ; j < 11; j++)
        {
            if(arr[i][j] == 5 || arr[i][j] == 8)
            {
                r=i;
                c=j;
                break;
            }
        }
    }
    char ch;//键盘的输入保存到字符中
    ch = getch();
    //getch() 直接接受,不显示回文,getchar()显示回文可以修改 enter键结束
    /*
    有哪些情况可以移动?
    1人前面是空地
    2人前面是目的地
    3人前面是箱子
       3.1箱子前面是空地
       3.2箱子前面是目的地
    */
    switch(ch)
    {
        case 'W':     //W A S D方向 72 80 75 77
        case 'w':
        case 72:
          /*  优化为下面的代码
            if(arr[r-1][c] == 0 )
            {
                arr[r-1][c]=5;
                arr[r][c]=0;
            }
            if()
            {
                arr[r-1][c]=8;
                arr[r][c]-=5;
            }
            */
            if(arr[r-1][c] == 0 ||arr[r-1][c] == 3 )//人向上移动
            {   //人的上面是空地 或者 人的上面是木的地
                arr[r-1][c]+= 5; //人到达的地方数字加5
                arr[r][c]  -=5;  //人离开的地方数字减5
            }
            if(arr[r-1][c] == 4 || arr[r-1][c] == 7)
            {
                if(arr[r-2][c] ==0 || arr[r-2][c] ==3)
                {
                    arr[r-2][c]+=4;//箱子到了的地方原来地方+4
                    arr[r-1][c]+=1;//箱子离开-4,人来了+5所以只+1
                    arr[r][c]  -=5;//人离开了减5
                }
            }
            break;
   //搞清楚了向上运动的规律,向下arr[r+1][c],向左arr[r][c-1],向右arr[r][c+1]一样的规律
        case 'A':
        case 'a':
        case 80:
            if(arr[r][c-1] == 0 ||arr[r][c-1] == 3 )
            {
                arr[r][c-1]+= 5;
                arr[r][c]  -=5;
            }
            if(arr[r][c-1] == 4 || arr[r][c-1] == 7)
            {
                if(arr[r][c-2] ==0 || arr[r][c-2] ==3)
                {
                    arr[r][c-2]+=4;
                    arr[r][c-1]+=1;
                    arr[r][c]  -=5;
                }
            }
            break;
        case 'S':
        case 's':
        case 75:
             if(arr[r+1][c] == 0 ||arr[r+1][c] == 3 )
            {
                arr[r+1][c]+= 5;
                arr[r][c]  -=5;
            }
            if(arr[r+1][c] == 4 || arr[r+1][c] == 7)
            {
                if(arr[r+2][c] ==0 || arr[r+2][c] ==3)
                {
                    arr[r+2][c]+=4;
                    arr[r+1][c]+=1;
                    arr[r][c]  -=5;
                }
            }
            break;
        case 'D':
        case 'd':
        case 77:
            if(arr[r][c+1] == 0 ||arr[r][c+1] == 3 )
            {
                arr[r][c+1] += 5;
                arr[r][c]  -= 5;
            }
             if(arr[r][c+1] == 4 || arr[r][c+1] == 7)
            {
                if(arr[r][c+2] ==0 || arr[r][c+2] ==3)
                {
                    arr[r][c+2] += 4;
                    arr[r][c+1] += 1;
                    arr[r][c]  -= 5;
                }
            }
            break;
    }

}
int endGame(int count)
{

     for(int i = 0; i < 9; i++)
    {
        for(int j = 0 ; j < 11; j++)
        {
            if(arr[i][j] == 7)
            {
               count++;
            }
        }
    }
   return count;

}
int main()
{
    int count=0;
    while(1)
    {
        system("cls");
        drawMap();
        playGame();
       if(endGame(count) == 10)
       {
            break;
       }

    }
    cout<<"恭喜你完成了!"<<endl;
    system("pause");
    return 0;
}

程序运行效果图,可以实现推箱子游戏的各种移动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言 推箱子游戏实现 的相关文章

  • ubuntu下eth0网卡信息不见了

    ubuntu终端下命令ifconfig的问题解决 问题一 ifconfig之后只显示lo 没有看到eth0 问题二 ifconfig之后显示eth0 xff0c 但是没有显示静态IP地址 xff0c 即无inet 地址 广播 掩码 问题三
  • 计算机指令

    指令系统的设计原则包括 xff1a 完备性 xff1a 该有的都要有 有效性 xff1a 简洁 加速常用操作 没有歧义 规整性 xff1a 对称 均匀 一致 xff08 简单源于规整 xff09 兼容性 xff1a 之前 之后的都能用 下面
  • shell基础学习笔记1

    shell是什么 xff1f shell是一个命令解释器 xff0c 他为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序 xff0c 用户可以用shell来启动 挂起 停止甚至编写一些程序 其实就是输入命令的那个交互界面
  • linux达人养成学习笔记1

    2 4 分区之分区设备文件名与挂载 1 swap分区 xff0c 没有挂载点 xff0c 是文件系统类型 xff08 交换分区 xff0c 电脑内存 lt 4G xff0c 可分为内存2倍 xff1b gt 4G分同等大小 xff09 2
  • shell编程之变量学习小结

    在Bash中 xff0c 变量的默认类型都是字符串型 变量的分类 1 用户自定义变量 xff1a 变量可以自定义 xff0c 但是对系统生效的环境变量名和变量作用是固定的 2 环境变量 xff1a 这种变量中主要保存的是和系统操作环境相关的
  • 程序员的自我修养

    1 Provide Options Don 39 t make lame Excuses 提供各种选择 xff0c 不要找蹩脚的借口 2 Don 39 t live with Broken Windows 不要容忍破窗户 3 Be a ca
  • 二阶三阶四阶魔方旋转公式

  • 什么是回调函数?

    为了弄明白这种函数的奥妙 xff0c 首先提出三个问题 xff1a 1 回调函数是什么东西 xff1f 2 回调函数怎么开发 xff0c 怎么使用 xff1f 3 回调函数的作用 xff0c 应该在什么情况下使用 xff1f 带着问题来学习
  • Toastmasters会议小结

    第四战队第二次会议记录 舰队分享 P1 Ice Breaker Speech 分享人 xff1a 邱爱珍 爱珍结合自己的P1演讲经验 xff0c 从以下五个方面给出相应的意见 Book time to start 尽早在系统中预约自己的第一
  • 如何做好自己的时间管理

    认识时间障碍掌握时间管理的原则掌握各种有效管理隔个人时间的工具 没有目标谈什么时间管理 xff1f xff1f xff1f 今天需要完成的事情 这个周需要完成的事情 这个月需要完成的事情 时间管理的错误观念 时间管理只是常识 xff0c 只
  • 参考别人的面试总结:linux C/C++服务器后台开发面试题总结

    参考别人的面试总结 xff1a linux C C 43 43 服务器后台开发面试题总结 参考博客 xff1a http www cnblogs com nancymake p 6516933 html 基础语言知识方面 xff1a 1 使
  • 常用Git命令

    查看文件当前状态 xff1a git status 查看文件提交信息 xff1a git log 将未被追踪的文件 xff08 工作区 xff09 提交至暂存区 xff1a git add 文件名 所有修改的文件提交至暂存区 xff1a g
  • 直接插入排序算法实现学习

    include lt iostream gt using namespace std void show int a int n for int i 61 0 i lt n i 43 43 cout lt lt a i lt lt 34 t
  • 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)

    动图演示 xff1a https www cnblogs com onepixel articles 7674659 html 冒泡排序 include lt bits stdc 43 43 h gt 偷懒的写法 xff0c 不过编译时间比
  • 二分查找法和使用二分法查找的注意事项

    使用二分法查找的必要条件 xff1a 1 数组有序 2 注意数据类型是有范围的 xff0c 不要溢出 3 采用L 43 R L 2表达式更合适 4 注意 xff1a start 61 mid 43 1 和 end 61 mid 1 防止死循
  • 使用程序写出求出1!+2!+...+64!的运算结果。考虑溢出的问题

    求10的阶乘的和 int n 61 10 int num1 61 1 int num2 61 1 for int i 61 1 i lt 61 n i 43 43 num1 61 1 for int j 61 2 j lt 61 i j 4
  • STL中vector的使用

    作用 xff1a 它能够像容器一样存放各种类型的对象 xff0c 简单地说 xff0c vector是一个能够存放任意类型的动态数组 xff0c 能够增加和压缩数据 vector在C 43 43 标准模板库中的部分内容 xff0c 它是一个
  • 4G基础知识100问,偶然间发现的一个不错的通信方面的资源,推荐给大家

    https www ximalaya com keji 5228685 p2
  • 荷花定律

    一个池塘里的荷花每一天都会以前一天的2倍数量在开放 xff0c 如果到第30天 xff0c 荷花就开满了整个池塘 请问在第几天池塘中的荷花 xff0c 开了一半呢 xff1f 第15天 xff1f 错 xff01 是第29天 xff0c 这

随机推荐

  • VLAN是什么?划分VLAN的作用及方法

    http baijiahao baidu com s id 61 1585920106784824355 amp wfr 61 spider amp for 61 pc 有朋友提到了如何划分vlan xff0c 其实划分vlan是网络技术应
  • openstack是什么,能干什么?

    http blog 51cto com icooke 2053944
  • 包管理机制(npm)

    1 项目初始化 cnpm init y 2 安装依赖 全局依赖 保存在全局的包 xff08 依赖 xff09 xff0c 任何地方都能使用 cnpm install global xxx 简写 xff1a cnpm install g xx
  • 如何给自己创造桃花运?

    别做梦了 现在除了赚钱 你什么都不要想
  • 想问我是做什么的?

    看大家都很害羞 xff0c 我就先来个抛砖引玉 xff0c 当然啦有时候抛出来的未必是砖 xff0c 有可能是块破石头 要是说的不好 xff0c 忘大家多多包涵 俗话说上奇葩千千万 xff0c 相亲场上占一半 不要抱怨13亿人中还找不到一个
  • C++ STL标准模板库(list)

    引用头文件 include lt list gt list类本身是一个类模板 list链表中的迭代器list类模板的一个内部类 这个类实现了链表元素指针的功能是一个线性链表结构 xff0c 它的数据由若干个节点构成 xff0c 每一个节点都
  • c++的四种强制类型转换:static_cast   dynamic_cast   const_cast    reinterpret_cast

    c 43 43 的四种强制类型转换为 xff1a static cast dynamic cast const cast reinterpret cast c 43 43 相对于c的强制转换可以提供更好的控制强制转换过程 xff0c 允许控
  • LTE的核心网之:MME,SGW,PGW

    https www cnblogs com mway p 5326868 html 移动性管理实体 xff08 MME xff09 MME的主要功能是支持NAS xff08 非接入层 xff09 信令及其安全 跟踪区域 xff08 TA x
  • 工厂设计模式(三种)详解

    https www jianshu com p 38493eb4ffbd 什么是工厂设计模式 xff1f 工厂设计模式 xff0c 顾名思义 xff0c 就是用来生产对象的 xff0c 在java中 xff0c 万物皆对象 xff0c 这些
  • vim编辑状态下如何跳转到最后一行相关操作

    vim操作 1 跳到文本的最后一行 xff1a 按 G 即 shift 43 g 2 跳到最后一行的最后一个字符 xff1a 先重复1的操作即按 G xff0c 之后按 键 xff0c 即 shift 43 4 3 跳到第一行的第一个字符
  • 并行和并发的区别

    你吃饭吃到一半 xff0c 电话来了 xff0c 你一直到吃完了以后才去接 xff0c 这就说明你不支持并发也不支持并行 你吃饭吃到一半 xff0c 电话来了 xff0c 你停了下来接了电话 xff0c 接完后继续吃饭 xff0c 这说明你
  • Git的使用教程

    今天发现了一个非常好的网站 xff1a https www liaoxuefeng com wiki 0013739516305929606dd18361248578c67b8067c8c017b000 0013743256916071d5
  • 11条通用法则,教你产品经理面试通关指南

    https mbd baidu com newspage data landingsuper context 61 7B 22nid 22 3A 22news 9659606126957247345 22 7D amp n type 61
  • kali子系统安装教程(包含避坑指南,新手必看!)

    版权声明 xff1a 图中含有知乎 64 王维同学字样的 xff0c 是我在知乎的号 xff0c 不是盗的文章 xff01 这篇文章比知乎更详细 xff01 xff01 1 开启安装Linux子系统需要的扩展 Win 43 Q搜索功能 勾选
  • git与gittee快速上手

    本博文的目的是简单介绍下git的使用 xff0c 以及git与网络托管平台gittee的交互使用 xff0c 主要包括本地程序库上传至gitee和从gitee下载库到本地这些内容 1 使用gitee创建一个远程仓库 1 1上传本地的ssh
  • 产品经理要掌握的谈判思维

    https mbd baidu com newspage data landingsuper context 61 7B 22nid 22 3A 22news 8772446181903644812 22 7D amp n type 61
  • Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively

    当我们在本地提交到远程仓库的时候 xff0c 如果遇到上述问题 xff0c 我们可以首先使用如下命令 xff1a git rebase origin master 然后使用 git pull rebase 最后使用 git push ori
  • git工作中常用的命令

    注意 修改了这些config后 xff0c 需要exit后才能生效 git config global core editor 34 vim 34 git config global alias co checkout git config
  • 神一般的C语言指针,你看懂多少?

    神一般的C语言指针 xff0c 你看懂多少 xff1f 今天阅读 C C 43 43 程序员面试指南 中指针一块 xff0c 以前一知半解的指针问题顷刻间懂了 下面 xff0c 可以做个测试 xff0c 如果下面的指针问题你能够全都解答正确
  • c语言 推箱子游戏实现

    include lt iostream gt include lt stdlib h gt include lt conio h gt using namespace std int arr 9 11 61 0 1 1 1 1 1 1 1