IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 推箱子小游戏---c语言 -> 正文阅读

[游戏开发]推箱子小游戏---c语言

推箱子

游戏特色

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

在这里插入图片描述
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:23:28  更:2021-08-19 12:23:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 16:06:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码