当前位置: 首页 > news >正文

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&#xff1a;☆ 4&#xff1a;★ //目的地和箱子//5&#xff1a;※ //人//7:⊙ //目的(3)和箱子(4)在一起//8&#xff1a;※ //人(5…...

SpringMVC:从入门到精通

一、SpringMVC是什么 SpringMVC是Spring提供的一个强大而灵活的web框架&#xff0c;借助于注解&#xff0c;Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象&#xff08;Plain Old Java Objects、pure old java object 或者 plain ordinary java object&#xff0…...

jmeter 数据库连接配置 JDBC Connection Configuration

jmeter 从数据库获取变量信息 官方文档参考&#xff1a; [jmeter安装路径]/printable_docs/usermanual/component_reference.html#JDBC_Connection_Configuration 引入数据库连接&#xff1a; 将MySQLjar包存放至jemter指定目录&#xff08;/apache-jmeter-3.3/lib&#xff09…...

TVC广告片制作成本多少

电视是广告传播的主要媒介之一&#xff0c;具有广泛的受众群体和较高的覆盖率。通过在电视上播放广告片&#xff0c;企业可以将产品或者服务的信息传达给大量潜在客户&#xff0c;提高知名度和曝光度。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面浅析制作一条TVC广…...

【Express.js】代码规范

代码规范 编程规范&#xff0c;对于一个优秀的项目是不可或缺的&#xff0c;有了良好的代码规范&#xff0c;有益于项目的维护与拓展。 命名规范 命名的第一要义是明了&#xff0c;要让阅读者看到命名就能大概猜测出其意义或用处。 以用户身份&#xff08;userRole&#xff…...

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目

day1 接口文档地址&#xff1a;https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码&#xff0c;演示移动端面经内容&#xff0c;明确功能模块 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库&#xff0c;封装了监听操作server new QTcpServer();// 直接监听&#xff0c;内部根…...

Android adb shell svc 知识详解

adb shell svc 详解 文章目录 adb shell svc 详解一、svc 常用命令&#xff1a; 二、svc 命令和使用示例&#xff1a;查看系统是否安装了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的安装

一、环境搭建 按照官方的说法&#xff0c;Apache2和Nginx都可以的&#xff0c;实际上&#xff0c;你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序&#xff0c;搭建LAMP环境较好。不然各种调试&#xff0c;还不一定能够成功。 相关搭建方法&#xff0c;属于一般操作&#xf…...

百度超级链BaaS服务平台调研

目录 一、菜单功能1.1、在线版1.2、服务版 二、其他说明2.1、服务平台的部署方式2.2、混合部署 百度超级链XuperChain管理平台文档地址&#xff1a;https://xuper.baidu.com/n/doc#/c8737c7b/1_0_0/c8737c7b 一、菜单功能 1.1、在线版 在线版功能稍多。 菜单子菜单/功能点子…...

计算机网络之TCP/IP协议第二篇:OSI参考模型详解

文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型...

Linux内核分析与应用2-内存寻址

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

苍穹外卖 day12 Echats 营业台数据可视化整合

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

代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数

70. 爬楼梯(进阶版) 一步一个台阶&#xff0c;两个台阶&#xff0c;三个台阶&#xff0c;…&#xff0c;直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢&#xff1f; 1阶&#xff0c;2阶&#xff0c;… m阶就是物品&#xff0c;楼顶就是背包。 每一阶可以重复使用&#…...

数据结构和算法(3):列表

列表是一种线性数据结构&#xff0c;它允许在其中存储多个元素&#xff0c;并且可以动态地添加或删除元素。 循秩访问 可通过重载下标操作符&#xff0c;实现寻秩访问 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&#xff1a; #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c; //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列&#xff0c;//可以得出0对应的段点…...

C#学习 - 初识类与名称空间

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

Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储

Ajax介绍 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下&#xff0c;通过在后台与服务器进行数据交换&#xff0c;实时更新网页的一部分。Ajax的主要特点包括&#xff1a; 异步通…...

JavaScript的面向对象

一、认识对象 1.概述 对象&#xff08;object&#xff09;是 JavaScript 语言的核心概念&#xff0c;也是最重要的数据类型。 什么是对象&#xff1f;简单说&#xff0c;对象就是一组“键值对”&#xff08;key-value&#xff09;的集合&#xff0c;是一种无序的复合数据集合…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...