学了一两个月C语言了,做完了黑窗口版本的推箱子,今天尝试用easyx图形库,收获很不错.其中还有很多可以改进的地方,希望大家能多多指导

推箱子游戏主要步骤

1.加载图片资源

2.绘制游戏地图

3.按键获取

4.游戏更新与判断是否过关

源码

#include <stdio.h>
#include <easyx.h>
#include <conio.h>
#include <stdbool.h>
#include <stdlib.h>

#define Bk 7
#define box 3
#define dest 2
#define wall 1
#define player 4
#define over 6
#define Okok 5 
#define Space 0

IMAGE space;  //空地
IMAGE Box;  //箱子
IMAGE Dest; //目的地
IMAGE Player; //玩家
IMAGE Wall;   //墙
IMAGE Over;   //玩家进入目的地
IMAGE okok;   //箱子进入目的地
IMAGE bk;  //背景

void load();  //加载地图
void showmap();  //输出地图
void getkey();//获取按键
bool isok();   //判断游戏中是否还有箱子
void init();   //重置地图
int level=0;
//初始地图
int map[3][10][10] =
{
    {
       {7,7,7,7,7,7,7,7,7,7},
       {7,7,7,1,1,1,7,7,7,7},
       {7,7,7,1,2,1,7,7,7,7},
       {7,7,7,1,3,1,1,1,1,7},
       {7,1,1,1,0,0,3,2,1,7},
       {7,1,2,3,4,3,1,1,1,7},
       {7,1,1,1,1,0,1,7,7,7},
       {7,7,7,7,1,2,1,7,7,7},
       {7,7,7,7,1,1,1,7,7,7},
       {7,7,7,7,7,7,7,7,7,7}
       },
    {

{7,7,7,7,7,7,7,7,7,7},
        {7,7,1,1,7,7,1,1,7,7},
        {7,1,2,0,1,1,0,2,1,7},
        {1,0,0,0,3,0,0,3,0,1},
        {1,0,3,0,4,0,0,0,0,1},
        {7,1,2,0,3,0,3,0,1,7},
        {7,7,1,0,0,0,2,1,7,7},
        {7,7,7,1,2,0,1,7,7,7},
        {7,7,7,7,1,1,7,7,7,7},
        {7,7,7,7,7,7,7,7,7,7}
     },
    {
        {7,7,7,7,7,7,7,7,7,7},
        {7,1,1,1,1,1,1,1,1,7},
        {7,1,2,0,0,0,3,2,1,7},
        {7,1,0,3,0,0,0,0,1,7},
        {7,1,0,0,0,4,0,0,1,7},
        {7,1,0,3,0,0,0,0,1,7},
        {7,1,0,0,0,0,0,3,1,7},
        {7,1,2,0,0,0,0,2,1,7},
        {7,1,1,1,1,1,1,1,1,7},
        {7,7,7,7,7,7,7,7,7,7}
    }
};
//预留一个地图,方便通关后重新继续游戏
int map1[3][10][10] =
{
    {
       {7,7,7,7,7,7,7,7,7,7},
       {7,7,7,1,1,1,7,7,7,7},
       {7,7,7,1,2,1,7,7,7,7},
       {7,7,7,1,3,1,1,1,1,7},
       {7,1,1,1,0,0,3,2,1,7},
       {7,1,2,3,4,3,1,1,1,7},
       {7,1,1,1,1,0,1,7,7,7},
       {7,7,7,7,1,2,1,7,7,7},
       {7,7,7,7,1,1,1,7,7,7},
       {7,7,7,7,7,7,7,7,7,7}
       },
    {

{7,7,7,7,7,7,7,7,7,7},
        {7,7,1,1,7,7,1,1,7,7},
        {7,1,2,0,1,1,0,2,1,7},
        {1,0,0,0,3,0,0,3,0,1},
        {1,0,3,0,4,0,0,0,0,1},
        {7,1,2,0,3,0,3,0,1,7},
        {7,7,1,0,0,0,2,1,7,7},
        {7,7,7,1,2,0,1,7,7,7},
        {7,7,7,7,1,1,7,7,7,7},
        {7,7,7,7,7,7,7,7,7,7}
     },
    {
        {7,7,7,7,7,7,7,7,7,7},
        {7,1,1,1,1,1,1,1,1,7},
        {7,1,2,0,0,0,3,2,1,7},
        {7,1,0,3,0,0,0,0,1,7},
        {7,1,0,0,0,4,0,0,1,7},
        {7,1,0,3,0,0,0,0,1,7},
        {7,1,0,0,0,0,0,3,1,7},
        {7,1,2,0,0,0,0,2,1,7},
        {7,1,1,1,1,1,1,1,1,7},
        {7,7,7,7,7,7,7,7,7,7}
    }
};

int main()
{
        load();
        showmap();
        getkey();
    return 0;

}

//绘制游戏画面
void showmap()
{

int x = -1, y = -1;
    
            for (int i = 0; i < 10; i++)
            {
                y = i * 60;
                for (int j = 0; j < 10; j++)
                {
                    x = j * 60;
                    switch (map[level][i][j])
                    {
                    case Bk:
                        putimage(x, y, &bk);
                        break;
                    case wall:
                        putimage(x, y, &Wall);
                        break;
                    case dest:
                        putimage(x, y, &Dest);
                        break;
                    case box:
                        putimage(x, y, &Box);
                        break;
                    case player:
                        putimage(x, y, &Player);
                        break;
                    case over:
                        putimage(x, y, &Over);
                        break;
                    case Okok:
                        putimage(x, y, &okok);
                        break;

case Space:
                        putimage(x, y, &space);
                        break;
                    }
                }
                printf("\n ");
            }
    
}
//加载图片资源
void load()
{

initgraph(600,600);
    loadimage(&bk, "space.png", 60, 60);
    loadimage(&Box,"box.png", 60, 60);
    loadimage(&Dest, "dest.png", 60, 60);
    loadimage(&Player, "player.png", 60, 60);
    loadimage(&Over, "over.png", 60, 60);
    loadimage(&Wall, "wall.png", 60, 60);
    loadimage(&okok, "wallokok.png", 60, 60);
    loadimage(&space, "bk.png", 60, 60);

}
//按键获取。。。。游戏更新
void getkey()
{
        
    while (true)
    {
        int c = 0, e = 0;
        for (int i = 0; i < 10; i++)
        {
            for (int k = 0; k < 10; k++)
            {
                if (map[level][i][k] == player)
                {
                    c = i;
                    e = k;

}
            }
        }
        char userKey = _getch();

switch (userKey)
        {
        case 72:
        case 'w':
        case 'W':
            if (map[level][c - 1][e] == Space||map[level][c-1][e]==dest)
            {
                map[level][c - 1][e] += player;
                map[level][c][e] -= player;
            }
            else if (map[level][c - 1][e]==box||map[level][c-1][e]==Okok)
            {
                if (map[level][c - 2][e] == Space || map[level][c - 2][e] == dest)
                {
                    map[level][c - 2][e] += box;
                    map[level][c - 1][e] -= box;
                    map[level][c - 1][e] += player;
                    map[level][c][e] -= player;
                }
            }
            break;
        case 80:
        case 'S':
        case 's':
            if (map[level][c + 1][e] == Space || map[level][c + 1][e] == dest)
            {
                map[level][c + 1][e] += player;
                map[level][c][e] -= player;
            }
            else if (map[level][c + 1][e] == box || map[level][c + 1][e] == Okok)
            {
                if (map[level][c + 2][e] == Space || map[level][c + 2][e] == dest)
                {
                    map[level][c + 2][e] += box;
                    map[level][c + 1][e] -= box;
                    map[level][c + 1][e] += player;
                    map[level][c][e] -= player;
                }
            }
            break;
        case 75:
        case 'a':
        case 'A':
            if (map[level][c][e-1] == Space || map[level][c][e-1] == dest)
            {
                map[level][c][e-1] += player;
                map[level][c][e] -= player;
            }
            else if (map[level][c][e-1] == box || map[level][c][e-1] == Okok)
            {
                if (map[level][c][e-2] == Space || map[level][c][e-2] == dest)
                {
                    map[level][c][e-2] += box;
                    map[level][c][e-1] -= box;
                    map[level][c][e-1] += player;
                    map[level][c][e] -= player;
                }
            }
            break;
        case 77:
        case 'd':
        case 'D':
            if (map[level][c][e + 1] == Space || map[level][c][e + 1] == dest)
            {
                map[level][c][e + 1] += player;
                map[level][c][e] -= player;
            }
            else if (map[level][c][e + 1] == box || map[level][c][e + 1] == Okok)
            {
                if (map[level][c][e + 2] == Space || map[level][c][e + 2] == dest)
                {
                    map[level][c][e + 2] += box;
                    map[level][c][e + 1] -= box;
                    map[level][c][e + 1] += player;
                    map[level][c][e] -= player;
                }
            }
            break;
        default:
            break;
        }
        system("cls");
        showmap();
        if (isok())
        {
            if (level > 2)
            {
                level = -1;
                init();
            }
            printf("恭喜你!过关了!\n");
            level++;

}
    }
}
//判断是否过关
bool isok()
{
    
        for (int i = 0; i < 10; i++)
        {
            for (int k = 0; k < 10; k++)
            {
                if (map[level][i][k] == box)
                {
                    return false;
                }
            }
        }

return true;
}
//重置地图
void init()
{
    for (int l = 0; l < 3; l++)
    {
        for (int i = 0; i < 10; i++)
        {
            for (int k = 0; k < 10; k++)
            {
                map[l][i][k] = map1[l][i][k];
            }
        }
    }
}

素材及源码链接:https://pan.baidu.com/s/1G-a4hAF_hsQuir795YLefg 
提取码:8888

用easyx做推箱子小游戏相关推荐

  1. Python【小游戏合集】之自己做一个简单又好玩的推箱子小游戏

    导语:哈喽铁汁们~今日游戏之旅开始! 想领取完整源码跟python学习资料可私信我或点击这行字体 这期就是带大家使用当前主流且易用的Python语言做一个简单的推箱子小游戏 现在小编的快乐源泉就是玩自 ...

  2. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  3. c#推箱子小游戏代码_推箱子小游戏V1.0制作

    小游戏实践 推箱子简易版 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,今天来一起做一个推箱子的简易版本V1.0!下面跟我一起做吧~ 我们用到的软件如下: 编辑类 Visual ...

  4. C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流

    C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...

  5. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  6. PLC也能制作小游戏----Codesys编写推箱子小游戏

    1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...

  7. 一个适合初学者的C++推箱子小游戏

    一个适合初学者的C++推箱子小游戏 博主最近在学习关于C++的一些基础,这是本人突发奇想做的一个小游戏,编程其实并不难,重要的是,你的思路,以及优化,当然,这个小游戏,本人也是基于一个学习者编写的 本 ...

  8. 怀念童年,推箱子小游戏(vue版本)

    前言 最近都没有怎么写过文章,都断更很久了吧.学习前端一年多,快两年了,学习的热情相比一开始,自我感觉没有变化多少,但是 学习的动力却好像时有时无.就好像是没了目标一样,不知道自己现在应该学些什么,从 ...

  9. python写推箱子_python写的推箱子小游戏

    原标题:python写的推箱子小游戏 导语 Python 功能强大,可以写爬虫.服务器.数据分析.AI--当然,也可以写游戏. 用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~ ...

最新文章

  1. ZStack源码剖析之核心库鉴赏——FlowChain
  2. 《12个球问题》分析
  3. 数学--数论-- AtCoder Beginner Contest 151(组合数+数学推导)好题(๑•̀ㅂ•́)و✧
  4. linux修改网卡名(亲测有效)
  5. 源码分析Android Handler是如何实现线程间通信的
  6. python裁剪图片box并保存_python实现图像随机裁剪
  7. 大型企业Exchange 2010部署方案 – 分割全局地址列表
  8. SAP License:SAP的联产品和副产品
  9. Bailian4129 变换的迷宫【BFS】
  10. 美科学家研发能从干燥的沙漠空气中造水的新设备
  11. Realsense D435i 使用
  12. 从概念到代码在6个小时内:交付我的第一个Windows Phone应用
  13. 腾讯微信支付2020暑期实习二面、三面面经
  14. 青龙+WxPusher实现资产推送
  15. 计算机装固态硬盘会不会卡,加装SSD固态硬盘,电脑还是卡?揭晓背后原因,教你10S开机!...
  16. java实现PDF转图片功能,附实例源码!
  17. 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
  18. ROM制作---原生安卓国内适配部分修改点
  19. usb的device模式hid配置错误点
  20. Linux指令用之记之-sell算数运算

热门文章

  1. Knockout 事件传递参数的方法
  2. Android手机之间不消耗流量互传文件
  3. 根据自定义类属性导出Excel
  4. 在 SCA Module 中使用 iBATIS 框架实现数据持久层
  5. Jina AI 她力量 | Impact Tech, She Can
  6. Markdown 如何让图片居中
  7. 企业信息化系统基础——AD:使用C#批量创建帐号
  8. html表格怎么控制文字大小,如何用html设置文本输入框输入字体的大小
  9. 客流统计需要解决哪些问题?
  10. 运筹说 第63期|论文速读之无人机车辆路径问题