1、在windows中把getch.h放入共享文件夹
2、在Ubuntu终端输入cd /media/sf_Share/ 进入共享文件夹
3、复制getch.h到C标准库中
sudo cp getch.h /usr/include/
4、加读权限
sudo chmod +r /usr/include/getch.h
5、导入getch.h头文件,使用getch()函数获取键值
Ubuntu下的键值:
上:183 下:184 左:186 右:185(不同操作系统值可能不同)
走迷宫
先进行数据分析:
1、地图的实现:定义二维字符类型的数组
2、角色的位置:定义两个变量x y作为角色坐标
3、时间(计时):time(NULL)获取1970-1-1到运行时过了总秒数
再逻辑分析:
设置进入死循环
每次进入前先清屏
1、显示地图(移动后重新打印)
2、判断是否到达出口(结束死循环条件)
如果是:结束程序(需要思考:结束前的地图打印是否准确)
3、未结束,等待获取方向键处理
判断前方是不是‘  ’(空为路)
如果是:
1、把旧位置变成‘  ’
2、把新位置变成‘@’
3、更新角色位置坐标
常量:‘ ’为路、‘#’为墙、‘@’为人

#include <stdio.h> //导入头文件
#include <getch.h>
#include <stdlib.h>
#include <time.h>
int main(int argc,const char* argv[])
{//記錄遊戲開始時間time_t start;start=time(NULL);char arr[10][10]={{'#','#','#','#','#','#','#','#','#','#'},{'#','@','#','#','#','#','#','#',' ','#'},{'#',' ','#',' ',' ',' ',' ',' ',' ','#'},{'#',' ','#',' ','#','#',' ','#','#','#'},{'#',' ',' ',' ','#','#',' ','#',' ','#'},{'#',' ','#','#','#',' ',' ',' ',' ','#'},{'#',' ','#',' ','#',' ','#','#','#','#'},{'#',' ','#',' ','#',' ',' ',' ',' ',' '},{'#',' ',' ',' ','#','#','#','#','#','#'},{'#','#','#','#','#','#','#','#','#','#'},}; //角色位置、初始化地图
char man_x=1,man_y=1;for(;;){   //清理屏幕system("clear");//顯示地圖for(int i=0;i<10;i++){for(int j=0;j<10;j++){printf("%-2c",arr[i][j]);}printf("\n");}if(9==man_x||0==man_x||0==man_y||9==man_y)//满足结束条件{//記錄遊戲結束時間time_t final;final=time(NULL);printf("成功走出!花費%d秒!\n",final-start);return 0;}else{//獲取方向鍵switch(getch()){case 183://上if(arr[man_x-1][man_y]==' '){arr[man_x][man_y]=' ';arr[--man_x][man_y]='@';}break;case 184:      //下if(arr[man_x+1][man_y]==' '){arr[man_x][man_y]=' ';arr[++man_x][man_y]='@';}break;case 186:      //左if(arr[man_x][man_y-1]==' '){arr[man_x][man_y]=' ';arr[man_x][--man_y]='@';}break;case 185:      //右if(arr[man_x][man_y+1]==' '){arr[man_x][man_y]=' ';arr[man_x][++man_y]='@';}break;}}
}

推箱子案例:
数据分析:
数组与字符的对应关系
0对应  ‘ ’
人1  ‘@’
墙2  ‘#’
箱子3 ‘’目标点4‘o’5(1+4)人在目标点‘@’7(3+4)箱子在目标点‘’ 目标点4 ‘o’ 5 (1+4) 人在目标点‘@’ 7 (3+4)箱子在目标点‘’目标点4‘o’5(1+4)人在目标点‘@’7(3+4)箱子在目标点‘’

1、定义一个8*8的地图
2、定义记录角色位置变量 x y
3、定义记录步数变化
逻辑分析:
进入死循环
1清理屏幕、显示地图
2判断是否游戏胜利
3获取方向键并处理
情况:
1、前方是路 +1
原位置 -1
更新坐标
2、前方是箱子
人前方的前方 +3
人前方 -3+1
人原位置 -1
更新坐标

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>int main(int argc,const char* argv[])
{
//初始化矩阵char map[8][8] = {{0,0,2,2,2,2,0,0},{0,0,2,4,4,2,0,0},{0,2,2,0,4,2,2,0},{0,2,0,0,3,4,2,0},{2,2,0,3,0,0,2,2},{2,0,0,2,3,3,0,2},{2,0,0,1,0,0,0,2},{2,2,2,2,2,2,2,2}};char man_x = 6,man_y = 3;int step = 0;for(;;){int count = 0;system("clear");for(int i=0; i<8; i++){for(int j=0; j<8; j++){switch(map[i][j]){case 0:    printf("  ");break;   case 1: printf("@ ");break;  case 2: printf("# ");break;   case 3: printf("$ ");break;   case 4: printf("O ");break;   case 5: printf("@ ");break;  case 7: printf("$ "); count++; break;   }}printf("\n");}if(4 == count){printf("游戏胜利!\n");return 0;}switch(getch()){case 183:if(0 == map[man_x-1][man_y] ||4 == map[man_x-1][man_y]){map[man_x-1][man_y] += 1;map[man_x--][man_y] -= 1;}else if(3 == map[man_x-1][man_y] || 7 == map[man_x-1][man_y]){if(0 == map[man_x-2][man_y] || 4 == map[man_x-2][man_y]){map[man_x-2][man_y] += 3;map[man_x-1][man_y] -= 2;map[man_x--][man_y] -= 1;}}break;case 184:if(0 == map[man_x+1][man_y] ||4 == map[man_x+1][man_y]){map[man_x+1][man_y] += 1;map[man_x++][man_y] -= 1;}else if(3 == map[man_x+1][man_y] || 7 == map[man_x+1][man_y]){if(0 == map[man_x+2][man_y] || 4 == map[man_x+2][man_y]){map[man_x+2][man_y] += 3;map[man_x+1][man_y] -= 2;map[man_x++][man_y] -= 1;}}break;case 186:if(0 == map[man_x][man_y-1] ||4 == map[man_x][man_y-1]){map[man_x][man_y-1] += 1;map[man_x][man_y--] -= 1;}else if(3 == map[man_x][man_y-1] || 7 == map[man_x][man_y-1]){if(0 == map[man_x][man_y-2] || 4 == map[man_x][man_y-2]){map[man_x][man_y-2] += 3;map[man_x][man_y-1] -= 2;map[man_x][man_y--] -= 1;}}break;case 185:if(0 == map[man_x][man_y+1] ||4 == map[man_x][man_y+1]){map[man_x][man_y+1] += 1;map[man_x][man_y++] -= 1;}else if(3 == map[man_x][man_y+1] || 7 == map[man_x][man_y+1]){if(0 == map[man_x][man_y+2] || 4 == map[man_x][man_y+2]){map[man_x][man_y+2] += 3;map[man_x][man_y+1] -= 2;map[man_x][man_y++] -= 1;}}break;}}

两个案例都是很简单的实现,目的在于练习getch.h

getch.h与走迷宫推箱子的简单实现相关推荐

  1. C语言 推箱子游戏 简单 详细 (控制台)

    使用C语言实现超简单的推箱子游戏! 感谢您打开了这篇文章,下面我将讲述一下推箱子是如何实现的. 如果您喜欢我的文章可以点赞支持一下. 如果您对我的程序有什么意见和建议欢迎在评论区发表评论. 另外附赠适 ...

  2. java 推箱子游戏 简单例子

    初学java,使用的是eclipse,在一个3X3的数组中,规定1是人物,2是箱子,3是目的地.只有一个箱子. 使用数字小键盘2468进行4个方向的控制,在箱子没有到达目的地的时候会一直运行,直到箱子 ...

  3. C语言小游戏快速入门--推箱子

    目录 一.前言 二.游戏运行环境 三.代码实现逻辑 1. game.h 2. game.c 3. test.c 四.总结 一.前言 这是最简单的推箱子了,非常适合初学者.只需要学会一点数组和函数的知识 ...

  4. 学习笔记6-小项目-走迷宫、推箱子

    获取方向键的功能:使用getch.h头文件中的getch函数 1.把windows中的getch.h头文件放到共享文件夹中 2.终端输入 cd /media/sf_GONGXIANG进入共享文件夹 3 ...

  5. C语言学习:简单的小游戏 走迷宫、推箱子

    目录 一.走迷宫分析: 走迷宫代码展示 二.推箱子分析: 推箱子代码展示 一.走迷宫分析: 数据分析:         1.定义二维字符数组作为迷宫地图         2.定义变量记录角色的位置 x ...

  6. [游戏模版17] Win32 推箱子 迷宫

    >_<:Here introduce a simple game: >_<:resource >_<:only can push a box and finally ...

  7. 10.13—广搜 //特殊的二阶魔方//推箱子//polygon//木乃伊迷宫

    1.特殊的二阶魔方 描述:魔方大家应该都玩过.现在有一个特殊的二阶魔方,它只有一面是白色,其余五个面全是黑色.玩这个魔方当然也有特殊的规则,玩家只能通过六种方式去改变它,底层向左转一格(称为DL),底 ...

  8. 2019年第十一届蓝桥杯国赛JavaB组第H题——“大胖子走迷宫”题目及解析

    测试样例 Input: 9 5 +++++++++ +++++++++ +++++++++ +++++++++ +++++++++ ***+***** +++++++++ +++++++++ ++++ ...

  9. 第9章 推箱子(《C和C++游戏趣味编程》配套教学视频)

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写推箱子游戏,玩家键盘控制游戏角色将所有黄色箱子推到白色方块处,效果如图所示. 首先学习字符串与字符数组的概念,并应用字 ...

最新文章

  1. 算法导论——二叉查找树
  2. 谷歌旗下Waymo开启数据集虚拟挑战赛
  3. 如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技、科技金融等概念的
  4. linux 软硬连接区别---关于inode索引节点
  5. MySQL 讨厌哪种类型的查询
  6. 阻止浏览器关闭 区分刷新和关闭 自试IE可用
  7. Qt C++模版函数示例
  8. 脚本监控网络状态,输出日志并归档(V2)
  9. mybatis调用oracle过程,使用MyBatis调用Oracle存储过程
  10. Knative Service 是如何指定端口和协议的
  11. Windbg SOS and CLR版本不一致的解决方案
  12. git向远程推送代码提示需要token
  13. 网页抓取工具火车头如何采集关键词
  14. ssh 连接访问被拒绝
  15. 头戴式蓝牙耳机,出现左耳没有声音,右耳正常。
  16. vue--实现跑马灯效果
  17. 苹果IOS模拟器电脑版用哪个好 逍遥模拟器玩部分苹果账号互通
  18. 「运维有小邓」ADAudit Plus(AD域审计工具)的主要优势?
  19. 电磁波 -- 频谱介绍
  20. java ocx,Eclipse使用ActiveX控件(OCX)开发Java程序

热门文章

  1. 网站链接被微信屏蔽禁止访问的解决办法
  2. 微信小程序的一些新手示例(¥62)
  3. 0003 渗透测试标准
  4. mysql架构学习——数据库结构优化笔记
  5. 野生的男人,家养的猪
  6. 2005国内IC Design House一览
  7. 如何免费压缩图片-批量免费压缩图片大小的软件
  8. Tracup|10个有效的工作习惯,成功的例子和技巧
  9. 很漂亮网页背景渐变色代码
  10. FirefoxOS 系统进程初步分析 底层系统继承自 android