推箱子

游戏特色

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. 漏洞战争软件漏洞分析精要 学习笔记
  2. python __builtins__ frozenset类 (27)
  3. python课后题答案第一章_Python程序设计课后习题答案-第一单元
  4. 学Python的女生好不好找工作?
  5. HBase 权威指南笔记
  6. 人工智能系列:AI 赋能平台
  7. 量手知姓氏 :算命测姓氏 之 数学原理
  8. 什么是kick-off meeting?
  9. GUARDED_BY(c) 和 PT_GUARDED_BY(c)
  10. uni-app Android端获取设备已连接的WiFi IP地址
  11. 基于STC15系列单片机课程中讲到的汇编指令(一)
  12. mysql 空闲链接超时时间_解决mysql 中共8小时空闲后连接超时的有关问题
  13. VB.net 删除文件、文件夹
  14. IOC框架---什么是IOC
  15. js前台提示:参数不规范,请检查json的格式和参数对应的类型是否正确
  16. JS重启自动运行加载视频错误
  17. 安装VMware-tools出现initctl: Job failed to start
  18. 程旭:CPU方寸上的中国信念 --转载
  19. Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot get a connection, p
  20. SQL 错误 [1064] [42000]: The partition column could not be aggregated column

热门文章

  1. Kears(TensorFlow2.2.0)在Android中部署(C++调用)
  2. 使用python进行服务器监控
  3. 计算机英语会话实用电脑英语,关于购买电脑的4人英语对话范文
  4. 计算机英语口语900句,英语口语900句08.01.对话.1.电脑故障
  5. wampserver是不是比mysql好_wampserver
  6. 你需要计算机管理员 提供的权限才能对此文件进行更...
  7. 宽带813有连接,连接不上。
  8. 自助打印机小程序定制开发
  9. UI基础-九宫格计算-模型|封装
  10. yolov7-pose:基于COCO-KeyPoint的yolov7-pose训练