推箱子

游戏特色

1、游戏同时支持鼠标和键盘操作,鼠标操作时,可点击任意你想去的地方。

2、提供回复上一步的功能,可以回到任何一步走过的路径,可以给用户足够的思考空间,使用户的智力在游戏的乐趣中得到充分的锻炼。也可以一退到底。

3、屏幕上方显示当前的关数,您可以方便地选关进行游戏。

4、在目标文件夹里,可以用记事本打开Map.dat文件,自行设计游戏关卡,加载界面及元素,添加后再次打开程序才能更新。

#include <stdio.h>
#include <stdlib.h>
#include "get_keyboard.h"#define ROA 0
#define WAL 1
#define BOX 2
#define TER 3
#define MOU 4
#define MOUINTER (MOU+TER) //小老鼠在终点
#define BOXINTER (BOX+TER) //箱子在终点int g_board[7][8] = {{0,1,1,1,1,1,1,0},{1,0,0,0,0,0,1,1},{1,3,0,1,1,2,0,1},{1,0,3,3,2,0,0,1},{1,2,0,1,0,0,0,1},{1,0,4,0,0,0,0,1},{1,1,1,1,1,1,1,1}};int mx;int my;void init(){int i,j;for(i = 0;i < 7;i++){for(j = 0;j < 8;j++){if(g_board[i][j] == MOU){mx = i;my = j;break;}}}}//小老鼠去往位置的增量void move(int stepx,int stepy){//小老鼠要去往坐标的位置int nextx = mx + stepx;int nexty = my + stepy;switch(g_board[nextx][nexty]){case ROA:case TER:g_board[nextx][nexty] += MOU;//小老鼠移动到下个位置g_board[mx][my] -= MOU;//小老鼠原来的位置恢复成原来的样子mx = nextx;my = nexty;//记录小老鼠新的位置break;case BOX:case BOXINTER:{int nnextx = mx + 2*stepx;//下下个坐标的位置int nnexty = my + 2*stepy;int val = g_board[nnextx][nnexty];if(val == ROA || val == TER){g_board[nnextx][nnexty] += BOX;g_board[nextx][nexty] -= BOX;g_board[nextx][nexty] += MOU;g_board[mx][my] -= MOU;mx = nextx;my = nexty;}}break;   }}void show(){int i,j;for(i = 0;i<7;i++){for(j = 0;j<8;j++){switch(g_board[i][j]){case ROA:printf(" ");break;case WAL:printf("#");break;case BOX:case BOXINTER:printf("@");break;case TER:printf("o");break;case MOU:case MOUINTER:printf("&");break;}}printf("\n");}}void run(void){while(1){init();system("clear");//刷新地图show();//显示地图//等待用用户输入int key = get_keyboard();switch(key){case KEY_UP:move(-1,0);break;case KEY_DOWN:move(1,0);break;case KEY_LEFT:move(0,-1);break;case KEY_RIGHT:move(0,1);break;}}}int main()
{run();return 0;
}

获取键位

#ifndef GETCH_H
#define GETCH_H
#include <stdio.h>
#include <termios.h>
#include <stdlib.h>
#include <unistd.h>typedef enum KEYBOARD
{KEY_UP         = 183,KEY_DOWN         = 184,KEY_RIGHT        = 185,KEY_LEFT         = 186,KEY_BACKSPACE    = 127,KEY_ENTER        = 10,KEY_0           = 48,KEY_1           = 49,KEY_2           = 50,KEY_3           = 51,KEY_4           = 52,KEY_5           = 53,KEY_6           = 54,KEY_7           = 55,KEY_8           = 56,KEY_9           = 57,KEY_A           = 65,KEY_B           = 66,KEY_C           = 67,KEY_D           = 68,KEY_E           = 69,KEY_F           = 70,KEY_G           = 71,KEY_H           = 72,KEY_I           = 73,KEY_J           = 74,KEY_K           = 75,KEY_L           = 76,KEY_M           = 77,KEY_N           = 78,KEY_O           = 79,KEY_P           = 80,KEY_Q           = 81,KEY_R           = 82,KEY_S           = 83,KEY_T           = 84,KEY_U           = 85,KEY_V           = 86,KEY_W           = 87,KEY_X           = 88,KEY_Y           = 89,KEY_Z           = 90,KEY_a           = 97,KEY_b           = 98,KEY_c           = 99,KEY_d           = 100,KEY_e           = 101, KEY_f           = 102,KEY_g           = 103,KEY_h           = 104,KEY_i           = 105,KEY_j           = 106,KEY_k           = 107,KEY_l           = 108,KEY_m           = 109,KEY_n           = 110,KEY_o           = 111,KEY_p           = 112,KEY_q           = 113,KEY_r           = 114,KEY_s           = 115,KEY_t           = 116,KEY_u           = 117,KEY_v           = 118,KEY_w           = 119,KEY_x           = 120,KEY_y           = 121,KEY_z           = 122
}KEYBOARD;//此函数能立即从键盘不回显的接收数据
static int get_keyboard(void)
{//接收系统调用的执行结果int ret = 0;//存储终端设备的配置信息struct termios old;//通过系统调用获取终端的配置信息ret=tcgetattr(STDIN_FILENO,&old);if(0 > ret){perror("tcgetattr");return -1;}//初始化新的终端配置信息struct termios new = old;//取消回显并立即获取new.c_lflag &= ~(ICANON|ECHO);//设置新的终端配置信息ret= tcsetattr(STDIN_FILENO,TCSANOW,&new);if(0 > ret){perror("tcsetattr");return -2;}//在新的模式下从终端获取数据int key_value = 0;do{key_value += getchar();//由于和系统对FILE结构体的实现各不相同//linux系统 while(stdin->_IO_read_end - stdin->_IO_read_ptr);//OS系统 while(stdin->_r);}while(stdin->_IO_read_end - stdin->_IO_read_ptr);//还原终端的配置信息ret = tcsetattr(STDIN_FILENO,TCSANOW,&old);if(0 > ret){perror("tcsetattr");return -3;}//返回获取到的数据return key_value;
}
#endif//GETCH_H


推箱子小游戏---c语言相关推荐

  1. 控制台推箱子小游戏C语言

    自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...

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

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

  3. 用C语言实现推箱子小游戏基础程序plus

    目录 设计一个简单的推箱子游戏 功能设计要求: 代码实现 数据定义头文件data_def.h 窗口设置头文件WindowsSet.h WindowsSet.cpp 上移函数 矩阵旋转函数 游戏帧 菜单 ...

  4. 大一C语言课程设计之推箱子小游戏

    大一C语言课程设计之推箱子小游戏 先看一下效果 因为技术原因,开发说明没有加进去 按任意键以后 )] 同时响起来 你笑起来真好看的bgm 胜利界面会弹出一个弹出框 私信我或者加我qq:65245534 ...

  5. c 语言推箱子vs,C语言推箱子小游戏教程

    作者GitHub-Pages个人主页 本教程GitHub-Pages链接 本教程百度云下载地址 本教程编写于2016/11/22 Dawson Lee edited this page on Beij ...

  6. C语言实现推箱子小游戏

    一.设计目的 用简单的C语言知识制作的推箱子游戏,通过上下左右键将所有箱子移动到目标位置. 2.让我们更好地了解和巩固C语言知识,并实际运用,同时运用一些不太常见的知识点. 二.功能描述 1.模块功能 ...

  7. 简单的c语言推箱子程序,完整版本的推箱子小游戏,最简单的纯C语言打造

    /*推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 左 ...

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

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

  9. win32GDI函数编程实现推箱子小游戏

    利用GDI绘图函数实现推箱子小游戏,代码源于上一篇博客 C语言控制台推箱子. 实现方法很简单,把字符用绘图函数绘出的图形替换即可. 从字符控制台到win32界面编程,更加形象化. 代码量大增,主程序就 ...

最新文章

  1. Centos6.4 + PHP5.5.11 + Mysql5.6.16 + Tnginx2.02 + Memcached1.4.17 + Redis2.2
  2. 图解软件定义存储-百炼钢成绕指柔
  3. 【数据结构与算法】之深入解析“石子游戏VI”的求解思路与算法示例
  4. php数组中删除元素
  5. 从vivo 大规模特征存储实践中学点经验
  6. JavaWeb笔记03-Servlet
  7. (38)FPGA面试技能提升篇(C/C++、questasim仿真工具)
  8. AOJ0121 Seven Puzzle【BFS】
  9. 乐视入股酷派,手机圈全面战争已开打
  10. 胖哈勃杯Pwn400、Pwn500详解
  11. 12864 c语言,单片机12864 c程序
  12. (二十一)美萍酒店管理系统:系统维护_系统设置_房间类型_房间费打折
  13. Window10系统下通过SMB协议连接和断开资源服务器
  14. 续流二极管作用及工作原理
  15. 新浪微博技术架构分析 2010
  16. 【深度学习经典网络架构—5】:ResNet
  17. TFN频谱仪为什么好用以150为例
  18. android 卡顿、ANR优化(1)屏幕刷新机制
  19. GSI-PDP管网勘测综合数据处理软件操作手册
  20. SpringCloud系列之版本选择

热门文章

  1. 2021-03-10-数据结构与算法开始学习
  2. Android Kotlin 学习总结(一) 《KAE 优缺点并且深入字节码分析工作原理》
  3. Java育儿经2:变量和数据类型
  4. 基于51单片机的超声波水位液位监测仿真程序设计
  5. 计算机的硬盘维修,电脑的硬盘出现了异常和坏道如何在家自己维修详细方法说明...
  6. Tensorflow 1.x 和 Pytorch 中 Conv2d Padding的区别
  7. 医院计算机网络系统的意义,计算机网络系统在医院管理的运用
  8. 39健康网之前世今生
  9. SAP生产投料的方式
  10. 机房收费系统数据库概念结构设计