一、.开发环境:vs2019  +  easyx图形库

二、.开发流程步骤:I、绘制推箱子地图并初始化 ----- 几*几大小的地图

II、根据宏定义和推箱子地图上的数字来选择不同的图形

III、获取玩家坐标   -----------重点

(有两种情况:1.最开始玩家的坐标,并获取其横纵坐标

2. 玩家在目的地上时的坐标,  并获取其横纵坐标 )

IV、移动箱子        ----------------重点、难点

根据你所要移动的方向    分别判断箱子是否可以移动

以向上为例:分为以下几种情况

1.玩家上面是否为空地或目的地,若是,那就箱子移动

2.玩家前面为箱子或箱子加目的地,箱子的前面是否为目的地或空地,若是,则移动箱子(箱子移动到原来箱子的前面,人移动到原来箱子的位置)

V、判断是否通关,并设置多关卡

判断通关的条件:是否还有箱子

三、具体代码

1、初始化地图、定义全局变量

#define _CRT_SECURE_NO_WARNINGS
#if UNICODE
#undef UNICODE
#endif
#include<stdio.h>
#include<Windows.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#define SPACE 0       //空白     "  "
#define WALL 1        //墙       "墙 "
#define DEST 2        //目的地 "@@"
#define BOX 3         //箱子      "¥"
#define PLAYER 4      //玩家      "&&"//tip:注意获取人在目的地时的坐标,
//
//定义两个全局变量   m,n 分别为玩家的横纵坐标
int m, n;
int level = 0;
IMAGE image[7];//初始化地图
int arr[5][10][10] = {{{0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,1,0,0,0,0},{0,0,0,1,2,1,0,0,0,0},{0,0,0,1,3,1,1,1,1,0},{0,1,1,1,0,0,3,2,1,0},{0,1,2,3,4,0,1,1,1,0},{0,1,1,1,1,3,1,0,0,0},{0,0,0,0,1,2,1,0,0,0},{0,0,0,0,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0},},{{0,0,0,0,0,0,0,0,0,0},{0,1,1,1,0,0,1,1,1,0},{1,0,0,0,1,1,0,0,0,1},{1,2,0,0,3,0,0,0,0,1},{0,1,2,3,4,3,0,0,1,0},{0,0,1,0,3,0,2,1,0,0},{0,0,0,1,0,2,1,0,0,0},{0,0,0,0,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},},{{0,0,0,0,0,0,0,0,0,0},{0,1,1,1,1,1,1,1,1,0},{0,1,2,0,1,2,0,0,1,0},{0,1,0,0,1,1,0,0,1,0},{0,1,0,3,4,0,3,0,1,0},{0,1,0,0,3,0,0,1,1,0},{0,1,1,0,1,0,0,1,0,0},{0,0,1,0,1,2,0,1,0,0},{0,0,1,1,1,1,1,1,0,0},{0,0,0,0,0,0,0,0,0,0},},{{1,1,1,1,1,1,1,1,1,1},{1,0,1,0,0,2,0,0,0,1},{1,2,1,1,0,0,0,1,0,1},{1,0,0,0,3,0,1,1,2,1},{1,0,1,1,4,3,0,1,0,1},{1,0,1,0,3,0,3,0,0,1},{1,0,1,0,0,0,1,0,0,1},{1,2,0,0,0,1,1,1,0,1},{1,0,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1},},{{0,0,0,0,1,1,0,0,0,0},{0,0,0,1,2,0,1,0,0,0},{0,0,1,0,3,0,2,1,0,0},{0,1,0,0,3,1,0,0,1,0},{1,0,0,3,0,3,0,0,0,1},{1,0,0,1,0,3,1,2,0,1},{0,1,2,0,0,0,2,0,1,0},{0,0,1,0,1,0,0,1,0,0},{0,0,0,1,0,0,1,0,0,0},{0,0,0,0,1,1,0,0,0,0},},
};

2、加载图片并绘制推箱子界面

void initgame(){initgraph(700,700);//加载图片char buff[66];for (int i = 0; i < 7; i++) {sprintf(buff, "image\\%d.bmp", i );loadimage(&image[i], buff, 70, 70, true);}
}//绘制页面
void drawMap() {//输出地图for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {printf("%d  ", arr[level][i][j]);putimage(j * 70, i * 70, &image[arr[level][i][j]]);}printf("\n");}}

3、通过方向键移动,推箱子----------重难点

//按键控制移动方向
void move() {char userkey = _getch();switch (userkey){case 72:case 'W':case 'w'://玩家前面是否为空地if (arr[level][m - 1][n] == SPACE || arr[level][m - 1][n] == DEST) {arr[level][m - 1][n] = PLAYER + arr[level][m - 1][n];arr[level][m][n] = arr[level][m][n] - PLAYER;}//玩家前面是否为箱子else if (arr[level][m - 1][n] == BOX || arr[level][m - 1][n] == BOX + DEST) {//箱子前面是否为空地或目的地if (arr[level][m - 2][n] == SPACE || arr[level][m - 2][n] == DEST) {arr[level][m - 2][n] = arr[level][m - 2][n] + BOX;arr[level][m - 1][n] = arr[level][m - 1][n] - BOX;arr[level][m - 1][n] = arr[level][m - 1][n] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}}/*printf("up\n");Sleep(1000);*/break;case 80:case 'S':case 's'://玩家后面是否为空地if (arr[level][m + 1][n] == SPACE || arr[level][m + 1][n] == DEST) {arr[level][m + 1][n] = arr[level][m + 1][n] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}//玩家后面是否为箱子else if (arr[level][m + 1][n] == BOX || arr[level][m + 1][n] == BOX + DEST) {//箱子后面是否为空地或目的地if (arr[level][m + 2][n] == SPACE || arr[level][m + 2][n] == DEST) {arr[level][m + 2][n] = arr[level][m + 2][n] + BOX;arr[level][m + 1][n] = arr[level][m + 1][n] - BOX;arr[level][m + 1][n] = arr[level][m + 1][n] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}}break;case 75:case 'A':case 'a'://玩家左边是否为空地if (arr[level][m][n - 1] == SPACE || arr[level][m][n - 1] == DEST) {arr[level][m][n - 1] = arr[level][m][n - 1] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}//玩家左边是否为箱子else if (arr[level][m][n - 1] == BOX || arr[level][m][n - 1] == BOX + DEST) {//箱子左边是否为空地或目的地if (arr[level][m][n - 2] == SPACE || arr[level][m][n - 2] == DEST) {arr[level][m][n - 2] = arr[level][m][n - 2] + BOX;arr[level][m][n - 1] = arr[level][m][n - 1] - BOX;arr[level][m][n - 1] = arr[level][m][n - 1] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}}break;case 77:case 'D':case 'd'://玩家右边是否为空地if (arr[level][m][n + 1] == SPACE || arr[level][m][n + 1] == DEST) {arr[level][m][n + 1] = arr[level][m][n + 1] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}//玩家右边是否为箱子else if (arr[level][m][n + 1] == BOX || arr[level][m][n + 1] == BOX + DEST) {//箱子右边是否为空地或目的地if (arr[level][m][n + 2] == SPACE || arr[level][m][n + 2] == DEST) {arr[level][m][n + 2] = arr[level][m][n + 2] + BOX;arr[level][m][n + 1] = arr[level][m][n + 1] - BOX;arr[level][m][n + 1] = arr[level][m][n + 1] + PLAYER;arr[level][m][n] = arr[level][m][n] - PLAYER;}}break;}
}

4、判断是否通过--------有无箱子的存在

//判断是否通关--------------是否还有箱子
bool judge() {for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if (arr[level][i][j] == BOX) {return false;}}}return true;
}

5.main函数里面

int main() {SetWindowText(GetHWnd(), "推箱子");initgame();drawMap();while (1){//获取玩家坐标,并将其下标分别赋给 m,nfor (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if ((arr[level][i][j] == PLAYER)| (arr[level][i][j]== PLAYER+DEST)) {m = i;n = j;}}}move();system("cls");drawMap();if (judge()) {if (level > 1) {/*exit(666);*/MessageBox(GetHWnd(), "恭喜你通关了", "提示", MB_OKCANCEL);Sleep(3000);}level += 1;printf("恭喜你过关了,大佬666\n");}}return 0;
}

四、总结

推箱子相信你们每一个都玩过吧,自己开发一个推箱子游戏,自己设置难易度,这该是一件多妙的事呀

所用素材:

推箱子游戏(图形版)相关推荐

  1. EasyX实现推箱子游戏

    文章目录 1 项目需求 2 模块划分 3 项目实现 3.1 地图初始化 3.2 热键控制 3.3 推箱子控制 3.4 游戏结束 1 项目需求 实现一款推箱子游戏,效果如下图所示,具体规则: 箱子只能推 ...

  2. 项目: 推箱子游戏【c/c++】

    很早之前写的一个推箱子的游戏 目录 最终效果 代码 最终效果 代码 #include<stdio.h> #include<stdlib.h> #include<graph ...

  3. c语言多关卡推箱子程序,多关卡地图推箱子游戏

    多关卡地图推箱子游戏 # include # include # include //调出地图 void file(int map[14][16],int n,int flag) //n表示关卡数 , ...

  4. 推箱子java下载_Java实现简单推箱子游戏

    本文实例为大家分享了Java实现简单推箱子游戏的具体代码,供大家参考,具体内容如下 *编写一个简易的推箱子游戏,使用10*8的二维字符数据表示游戏画面,H表示墙壁; &表示玩家角色: o表示箱 ...

  5. 一文教你使用java开发一款推箱子游戏

    导读:社会在进步,人们生活质量也在日益提高.高强度的压力也接踵而来.社会中急需出现新的有效方式来缓解人们的压力.此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣.具有操作 ...

  6. greenfoot推箱子游戏_推箱子小游戏V2.0更新

    小游戏实践 推箱子V2.0 大家好,我是努力学习争取成为优秀的Game Producer的路人猿,我们上期一起学习制作推箱子的简易V1.0版本,学习了如何响应用户的输入以及面对箱子的各种情况,今天我们 ...

  7. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

    gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...

  8. c语言基于easyX樱花特效,C++基于easyx图形库实现推箱子游戏

    本文实例为大家分享了C++实现推箱子游戏的具体代码,供大家参考,具体内容如下 头文件: #include #include //#include #include #include #include ...

  9. 推箱子游戏的java设计思路_用JAVA实现一个推箱子游戏

    技术应用 TECHNOLOGY AND MARKET Vol. 26,No. 2,2019 用 JAVA 实现一个推箱子游戏 马寅璞1,孔阳坤2 ( 1. 南京信息工程大学计算机软件学院物联网工程 1 ...

  10. 【猿码】java swing实现喜羊羊与灰太狼推箱子游戏附带视频开发教程可做为Java毕设大作业

    大家好,今天给大家演示一下由Java swing实现的推箱子小游戏的一款项目,其图标用的是喜羊羊与灰太狼,所以又称喜羊羊与灰太狼版的推箱子游戏,该项目运行环境为普通的Java环境,jdk版本不限,下面 ...

最新文章

  1. 【干货】新手炼丹经验总结
  2. ExtJS在树TreePanel之间拖放结点
  3. window.requestAnimationFrame
  4. matlab对像素邻域操作,matlab图像的邻域操作与块操作
  5. Error message COM_PRODUCT 503 Data cannot be maintained for set type COM_TA_R3_ID
  6. DedeCMS高仿老版chinaz站长网模板
  7. Kudu 使用注意点
  8. angular2组件通讯
  9. elasticsearch批量数据导入和导出
  10. ABB机器人指令列表分类详解
  11. JS基础知识思维导图
  12. 收藏了8年的PHP优秀资源,都给你整理好了
  13. MaxCompute基本概念和数据类型
  14. 夜神模拟器adb连接电脑
  15. 微型计算机中既能作为输出设备,在微机的硬件设备中,有一种设备在程序设计中既可以当做输出设备,又可以当做输入设备,这种设备是ß...
  16. nnUNet使用教程
  17. DTI数据处理: from scanner to statistics
  18. VLC全部详细参数,libvlc_new函数参数,VLC SDK开发
  19. 百度网盘网页端设置倍速播放
  20. 梦幻西游藏宝阁不显示服务器,玩转梦幻西游藏宝阁全服搜索功能体验

热门文章

  1. matlab求条件概率密度_数值优化方法—迭代法amp;终止条件
  2. ol4服务器连接不稳定,红警Online频繁掉线怎么办 总是断开链接问题解答
  3. linux看磁盘是sas还是sata吗,sas硬盘和sata硬盘区别能用在普通台式机上吗
  4. android 播放assets下视频,安卓播放assets文件里视频文件相关问题分析
  5. PMP每日一练 | 考试不迷路-5.13
  6. 微分中值定理与导数的应用
  7. 双系统、多系统快速切换
  8. Spring Cloud 出现No instances available for user-service异常
  9. STN:空间变换网络(Spatial Transformer Network)
  10. 计算机圣诞节教案,2010我们的圣诞节(2010圣诞节教案)