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语言 推箱子游戏第13关,可回退 -> 正文阅读

[C++知识库]C语言 推箱子游戏第13关,可回退

#include <stdio.h>                                                              
#include <getch.h>
#include <stdlib.h>

??获取方向键的功能:使用头文件?getch.h?中的?getch?函数

??1.在widows中把getch.h的头文件放入共享文件夹

??2.终端进入共享文件夹??

??cd?/media/sf_share/

??3.复制头文件到标准库:

??sudo?cp?getch.h?/usr/include/

??4.加读权限

??sudo?chmod?+r?/usr/include/getch.h

开始程序

一.定义地图

1,确定数字与字符的对应关系

?????目标点:0

?????路:1

?????人:2

?????箱子:3

?????墙壁:4

? ?然后定义地图

?//定义地图
? 8 ? ? char arr[8][8]={
? 9 ? ? ? ? {1,1,4,4,4,4,1,1},
?10 ? ? ? ? {1,1,4,0,0,4,1,1},
?11 ? ? ? ? {1,4,4,1,0,4,4,1},
?12 ? ? ? ? {1,4,1,1,3,0,4,1},
?13 ? ? ? ? {4,4,1,3,1,1,4,4},
?14 ? ? ? ? {4,1,1,4,3,3,1,4},
?15 ? ? ? ? {4,1,1,2,1,1,1,4},
?16 ? ? ? ? {4,4,4,4,4,4,4,4},
?17 ? ? ? ? };

?2,定义人的坐标

//定义返回值数组 ?
? ? ? ? int a[300]={};
? ? ? ? int i = 0;
? ? ? ? //定义初始坐标
? ? ? ? int x=6,y=3;
? ? ? ? //定义步数 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? int step=0;
?

3,如果没有人或箱子在目标点上就重置目标点,要放在死循环前面

?for(;;)
? ? ? ? {
? ? ? ? ? ? if(1== arr[1][3])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? arr[1][3]=0;
? ? ? ? ? ? }
? ? ? ? ? ? if(1== arr[1][4])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? arr[1][4]=0;
? ? ? ? ? ? }
? ? ? ? ? ? if(1== arr[2][4])
? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? arr[2][4]=0;
? ? ? ? ? ? }
? ? ? ? ? ? if(1==arr[3][5])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? arr[3][5]=0;
? ? ? ? ? ? }
?

4.清理屏幕,进入死循环,显示地图

//清理屏幕
? ? ? ? ? ? system("clear");
? ? ? ? ? ? for(int i=0;i<8;i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for(int j=0;j<8;j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? switch(arr[i][j])
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? case 0: printf("* ");break;
? ? ? ? ? ? ? ? ? ? ? ? case 1: printf(" ?");break;
? ? ? ? ? ? ? ? ? ? ? ? case 2: printf("@ ");break;
? ? ? ? ? ? ? ? ? ? ? ? case 3: printf("# ");break;
? ? ? ? ? ? ? ? ? ? ? ? case 4: printf("& ");break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? printf("\n");
? ? ? ? ? ? }
?

5.判断是否完成游戏,

//判断是否到达出口
? ? ? ? ? ? if(3 == arr[1][3] && 3==arr[1][4] && 3==arr[2][4] && 3==arr[3][5])
? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? printf("用了%d步\n",step);
? ? ? ? ? ? ? ? printf("恭喜完成");
? ? ? ? ? ? ? ? return 0;
? ? ? ? ? ? }
?

6.获取返回键

//获取方向键并处理
? ? ? ? ? ? switch(getch())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //利用a[i]记录上次的行动,按返回建127去获得之前的a[i]
? ? ? ? ? ? ? ? case 127:
? ? ? ? ? ? ? ? if(i>0)
? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? i--;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(1==a[i])
? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2;
? ? ? ? ? ? ? ? ? ? x++;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(11==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=3;
? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2;
? ? ? ? ? ? ? ? ? ? arr[x-1][y]=1;
? ? ? ? ? ? ? ? ? ? x++;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(2==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2;
? ? ? ? ? ? ? ? ? ? x--;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(22==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=3;
? ? ? ? ? ? ? ? ? ? arr[x+1][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2;
? ? ? ? ? ? ? ? ? ? x--;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;

? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? if(3==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2;
? ? ? ? ? ? ? ? ? ? y--;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(33==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=3;
? ? ? ? ? ? ? ? ? ? arr[x][y+1]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2;
? ? ? ? ? ? ? ? ? ? y--;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(4==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2;
? ? ? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(44==a[i])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=3;
? ? ? ? ? ? ? ? ? ? arr[x][y-1]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2;
? ? ? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? ? ? ? ? step--;
? ? ? ? ? ? ? ? ? ? a[i]=0;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
?

7,获取方向键

向上:如果上一格是目标点或者路,上一格变成人物,自身格子变成路

如果上一格是箱子,且上上格不是箱子或墙壁,箱子和人物都往上一个,自身格变成路

case 183:
? ? ? ? ? ? ? ? if(0==arr[x-1][y] || ?1==arr[x-1][y])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2;
? ? ? ? ? ? ? ? ? ? x-=1;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=1;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(3==arr[x-1][y] && 4!=arr[x-2][y] && 3!=arr[x-2][y])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x-2][y]=arr[x-1][y];
? ? ? ? ? ? ? ? ? ? arr[x-1][y]=2;
? ? ? ? ? ? ? ? ? ? x--;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=11;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;?

}

向下同理

case 184:
? ? ? ? ? ? ? ? if(0==arr[x+1][y] || 1==arr[x+1][y])
? ? ? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2;
? ? ? ? ? ? ? ? ? ? x++;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=2;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? } ??
? ? ? ? ? ? ? ? else if(3==arr[x+1][y] && 4!=arr[x+2][y] && 3!=arr[x+2][y])
? ? ? ? ? ? ? ? { ??
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x+2][y]=arr[x+1][y];
? ? ? ? ? ? ? ? ? ? arr[x+1][y]=2;
? ? ? ? ? ? ? ? ? ? x++;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=22;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? } ??
? ? ? ? ? ? ? ? break;
?

向右同理

case 185:
? ? ? ? ? ? ? ? if(0==arr[x][y+1] || 1==arr[x][y+1])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2;
? ? ? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=3;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(3==arr[x][y+1] && 4!=arr[x][y+2] && 3!=arr[x][y+2])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y+2]=arr[x][y+1];
? ? ? ? ? ? ? ? ? ? arr[x][y+1]=2;
? ? ? ? ? ? ? ? ? ? y++;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=33;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
?

向左同理

?case 186:
? ? ? ? ? ? ? ? if(0==arr[x][y-1] || 1==arr[x][y-1])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2;
? ? ? ? ? ? ? ? ? ? y--;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=4;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if(3==arr[x][y-1] && 4!=arr[x][y-2] && 3!=arr[x][y-2])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? arr[x][y]=1;
? ? ? ? ? ? ? ? ? ? arr[x][y-2]=arr[x][y-1];
? ? ? ? ? ? ? ? ? ? arr[x][y-1]=2;
? ? ? ? ? ? ? ? ? ? y--;
? ? ? ? ? ? ? ? ? ? step++;
? ? ? ? ? ? ? ? ? ? a[i]=44;
? ? ? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
?

这样代码就结束了,运行

?乱走一下,

按删除键返回,如上图?

也能多次返回,如下图

?通关提示步数

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:43:20  更:2021-07-17 11:45:18 
 
开发: 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/6 11:58:41-

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