用easyx做推箱子小游戏
学了一两个月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做推箱子小游戏相关推荐
- Python【小游戏合集】之自己做一个简单又好玩的推箱子小游戏
导语:哈喽铁汁们~今日游戏之旅开始! 想领取完整源码跟python学习资料可私信我或点击这行字体 这期就是带大家使用当前主流且易用的Python语言做一个简单的推箱子小游戏 现在小编的快乐源泉就是玩自 ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- c#推箱子小游戏代码_推箱子小游戏V1.0制作
小游戏实践 推箱子简易版 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,今天来一起做一个推箱子的简易版本V1.0!下面跟我一起做吧~ 我们用到的软件如下: 编辑类 Visual ...
- C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流
C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...
- 手把手教你使用Python实现推箱子小游戏(附完整源码)
文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...
- PLC也能制作小游戏----Codesys编写推箱子小游戏
1.序言 前文已介绍,Codesys编程软件拥有的各种编译方式,以及强大的可视化功能,完全可以实现类似的小游戏程序编写,让疲惫的工控人员在调机的空闲之余可以休闲下,本文编写另一个小游戏,也是十几年前的 ...
- 一个适合初学者的C++推箱子小游戏
一个适合初学者的C++推箱子小游戏 博主最近在学习关于C++的一些基础,这是本人突发奇想做的一个小游戏,编程其实并不难,重要的是,你的思路,以及优化,当然,这个小游戏,本人也是基于一个学习者编写的 本 ...
- 怀念童年,推箱子小游戏(vue版本)
前言 最近都没有怎么写过文章,都断更很久了吧.学习前端一年多,快两年了,学习的热情相比一开始,自我感觉没有变化多少,但是 学习的动力却好像时有时无.就好像是没了目标一样,不知道自己现在应该学些什么,从 ...
- python写推箱子_python写的推箱子小游戏
原标题:python写的推箱子小游戏 导语 Python 功能强大,可以写爬虫.服务器.数据分析.AI--当然,也可以写游戏. 用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~ ...
最新文章
- ZStack源码剖析之核心库鉴赏——FlowChain
- 《12个球问题》分析
- 数学--数论-- AtCoder Beginner Contest 151(组合数+数学推导)好题(๑•̀ㅂ•́)و✧
- linux修改网卡名(亲测有效)
- 源码分析Android Handler是如何实现线程间通信的
- python裁剪图片box并保存_python实现图像随机裁剪
- 大型企业Exchange 2010部署方案 – 分割全局地址列表
- SAP License:SAP的联产品和副产品
- Bailian4129 变换的迷宫【BFS】
- 美科学家研发能从干燥的沙漠空气中造水的新设备
- Realsense D435i 使用
- 从概念到代码在6个小时内:交付我的第一个Windows Phone应用
- 腾讯微信支付2020暑期实习二面、三面面经
- 青龙+WxPusher实现资产推送
- 计算机装固态硬盘会不会卡,加装SSD固态硬盘,电脑还是卡?揭晓背后原因,教你10S开机!...
- java实现PDF转图片功能,附实例源码!
- 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
- ROM制作---原生安卓国内适配部分修改点
- usb的device模式hid配置错误点
- Linux指令用之记之-sell算数运算