c++推箱子小游戏
上代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>int map[2][7][8] =
{//0:空的 1:■ :墙//3:☆ 4:★ //目的地和箱子//5:※ //人//7:⊙ //目的(3)和箱子(4)在一起//8:※ //人(5)和目的(3)在一起//为让多种情况使用一种算法{1, 1, 1, 1, 1, 1, 1, 1,1, 0, 0, 0, 0, 0, 0, 1,1, 3, 1, 0, 1, 1, 3, 1,1, 4, 0, 0, 4, 0, 3, 1,1, 0, 1, 0, 1, 1, 4, 1,1, 0, 0, 5, 0, 0, 0, 1,1, 1, 1, 1, 1, 1, 1, 1},{1, 1, 1, 1, 1, 1, 1, 1,1, 0, 0, 0, 0, 0, 0, 1,1, 3, 1, 0, 1, 1, 3, 1,1, 3, 4, 5, 4, 0, 3, 1,1, 4, 1, 0, 1, 1, 4, 1,1, 0, 0, 0, 0, 0, 0, 1,1, 1, 1, 1, 1, 1, 1, 1}
};
int cas = 0; //为0表示第一关
//记录每一关的箱子数 或者是项目和目的在一起的总数
int boxSum[2] = {3,4};
//地图绘图
void drawMap()
{for (int i = 0; i < 7; i++){for (int j = 0; j < 8; j++){if (j == 0)printf("\t\t");switch (map[cas][i][j]){// //0:空的 1:■ :墙case 0:printf(" ");break;case 1:printf("■");break;//3:☆ 4:★ //目的地和箱子case 3:printf("☆");break;case 4:printf("★");break;//5:※ //人case 5:case 8:printf("※");break;case 7:printf("⊙");break;//7:⊙ //目的(3)和箱子(4)在一起//8:※ //人(5)和目的(3)在一起}}printf("\n");}
}
//按键处理
void keyDown()
{//分析按键过程//定位人在哪里//人有两种情况:第一个是:人,第二个:人站在目的上int i, j;for (i = 0; i < 7; i++){for (j = 0; j < 8; j++){if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;}}if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;}}char ch = _getch(); //看不见的字符输入,+头文件 conio.hswitch (ch){//72 80 75 77case 'w':case 'W':case 72://下一个地方等于空地或者是目的 能走if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3){//3+5=8 :表示目的和人在一起//新地方(map[i-1][j])人(5)来了map[cas][i - 1][j] += 5;//老地方(map[i][j])人(5)走了map[cas][i][j] -= 5;}//如果下一个是箱子,要进一步判断能走//注意点:箱子两种状态:箱子,箱子和目的在一起else if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7){//做箱子的下一个地方判断能不能走if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3){//新的地方箱子来了map[cas][i - 2][j] += 4;//箱子的位置:箱子(-4)走了 人来(+5)map[cas][i - 1][j] += 1;//原来的地方人走了map[cas][i][j] -= 5;}}break;case 's':case 'S':case 80://下一个地方等于空地或者是目的 能走if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3){//3+5=8 :表示目的和人在一起//新地方(map[i-1][j])人(5)来了map[cas][i + 1][j] += 5;//老地方(map[i][j])人(5)走了map[cas][i][j] -= 5;}else if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7){//做箱子的下一个地方判断能不能走if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3){//新的地方箱子来了map[cas][i + 2][j] += 4;//箱子的位置:箱子(-4)走了 人来(+5)map[cas][i + 1][j] += 1;//原来的地方人走了map[cas][i][j] -= 5;}}break;case 'a':case 'A':case 75://下一个地方等于空地或者是目的 能走if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3){//3+5=8 :表示目的和人在一起//新地方(map[i-1][j])人(5)来了map[cas][i][j - 1] = map[cas][i][j - 1] + 5;//老地方(map[i][j])人(5)走了map[cas][i][j] = map[cas][i][j] - 5;//j+=5 j=j+5}else if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7){//做箱子的下一个地方判断能不能走if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3){//新的地方箱子来了map[cas][i][j - 2] += 4;//箱子的位置:箱子(-4)走了 人来(+5)map[cas][i][j - 1] += 1;//原来的地方人走了map[cas][i][j] -= 5;}}break;case 'D':case 'd':case 77://下一个地方等于空地或者是目的 能走if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3){//3+5=8 :表示目的和人在一起//新地方(map[i-1][j])人(5)来了map[cas][i][j + 1] += 5;//老地方(map[i][j])人(5)走了map[cas][i][j] -= 5;}//下一个地方是箱子,判断箱子的下一个地方是不是目的和空地else if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7){//做箱子的下一个地方判断能不能走if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3){//新的地方箱子来了map[cas][i][j + 2] += 4;//箱子的位置:箱子(-4)走了 人来(+5)map[cas][i][j + 1] += 1;//原来的地方人走了map[cas][i][j] -= 5;}}break;}
}
//胜负判断
//用什么判断胜负: 箱子到达目的的个数
int gameOver()
{int count = 0;//所有的地方找一遍for (int i = 0; i < 7; i++){for (int j = 0; j < 8; j++){if (map[cas][i][j] == 7)count++;}}return count;
}
//箱子数是零的时候也是胜利
int gameOver2()
{int count = 3;//所有的地方找一遍for (int i = 0; i < 7; i++){for (int j = 0; j < 8; j++){if (map[cas][i][j] == 3)count--;}}return count;
}int main()
{while (1){printf("\n\t用方向键或w a s d键移动※推动★进入☆\n",cas+1);printf("\n\t\t 共两关 第 %d 关\n",cas+1);drawMap();if (gameOver() == boxSum[cas]){cas++;if (cas == 2)break;elseprintf("\n\t\t 该关 OK!按任一键进继续\n"); }keyDown();system("cls");}printf("游戏结束!");printf("\n");system("pause");return 0;
}
由于写游戏时间较长,更新较慢,请大佬们理解一下
相关文章:
c++推箱子小游戏
上代码: #include <stdio.h> #include <stdlib.h> #include <conio.h>int map[2][7][8] {//0:空的 1:■ :墙//3:☆ 4:★ //目的地和箱子//5:※ //人//7:⊙ //目的(3)和箱子(4)在一起//8:※ //人(5…...

SpringMVC:从入门到精通
一、SpringMVC是什么 SpringMVC是Spring提供的一个强大而灵活的web框架,借助于注解,Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object࿰…...

jmeter 数据库连接配置 JDBC Connection Configuration
jmeter 从数据库获取变量信息 官方文档参考: [jmeter安装路径]/printable_docs/usermanual/component_reference.html#JDBC_Connection_Configuration 引入数据库连接: 将MySQLjar包存放至jemter指定目录(/apache-jmeter-3.3/lib)…...

TVC广告片制作成本多少
电视是广告传播的主要媒介之一,具有广泛的受众群体和较高的覆盖率。通过在电视上播放广告片,企业可以将产品或者服务的信息传达给大量潜在客户,提高知名度和曝光度。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面浅析制作一条TVC广…...
【Express.js】代码规范
代码规范 编程规范,对于一个优秀的项目是不可或缺的,有了良好的代码规范,有益于项目的维护与拓展。 命名规范 命名的第一要义是明了,要让阅读者看到命名就能大概猜测出其意义或用处。 以用户身份(userRoleÿ…...

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目
day1 接口文档地址:https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码,演示移动端面经内容,明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…...
QT tcpserver
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 服务端有QTcpServer库,封装了监听操作server new QTcpServer();// 直接监听,内部根…...
Android adb shell svc 知识详解
adb shell svc 详解 文章目录 adb shell svc 详解一、svc 常用命令: 二、svc 命令和使用示例:查看系统是否安装了svc1、svc2、svc help3、svc power svc wifi has been migrated to WifiShellCommand,simply perform translation to cmd wifi set-wifi-e…...

Debian12系统下LAMP环境中Nubuilder4.5的安装
一、环境搭建 按照官方的说法,Apache2和Nginx都可以的,实际上,你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序,搭建LAMP环境较好。不然各种调试,还不一定能够成功。 相关搭建方法,属于一般操作…...
百度超级链BaaS服务平台调研
目录 一、菜单功能1.1、在线版1.2、服务版 二、其他说明2.1、服务平台的部署方式2.2、混合部署 百度超级链XuperChain管理平台文档地址:https://xuper.baidu.com/n/doc#/c8737c7b/1_0_0/c8737c7b 一、菜单功能 1.1、在线版 在线版功能稍多。 菜单子菜单/功能点子…...
计算机网络之TCP/IP协议第二篇:OSI参考模型详解
文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型...

Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 2.1 内存寻址 数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂 计算机体系结构中的核心问题之一,就是如…...

苍穹外卖 day12 Echats 营业台数据可视化整合
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系…...

代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数
70. 爬楼梯(进阶版) 一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢? 1阶,2阶,… m阶就是物品,楼顶就是背包。 每一阶可以重复使用&#…...

数据结构和算法(3):列表
列表是一种线性数据结构,它允许在其中存储多个元素,并且可以动态地添加或删除元素。 循秩访问 可通过重载下标操作符,实现寻秩访问 template <typename T> // assert: 0 < r < size T List<T>::operator[](Rank r) cons…...
使用playright自动下载vscode已安装插件
import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…...
单片机语言实例:2、点亮数码管的多种方法
一、共阳数码管静态显示 程序实例1: #include<reg52.h> //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列,//可以得出0对应的段点…...

C#学习 - 初识类与名称空间
类(class)& 名称空间(namespace) 类是最基础的 C# 类型,是一个数据结构,是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…...

Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…...

JavaScript的面向对象
一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...