推箱子小游戏
--print("开发流程步骤:I、绘制推箱子地图并初始化 ----- 几*几大小的地图 \n\n II、根据宏定义和推箱子地图上的数字来选择不同的图形\n\n III、获取玩家坐标 -----------重点\n\n (有两种情况:1.最开始玩家的坐标,并获取其横纵坐标\n\n 2. 玩家在目的地上时的坐标, 并获取其横纵坐标 )\n\n IV、移动箱子 ----------------重点、难点\n\n 根据你所要移动的方向 分别判断箱子是否可以移动\n\n 以向上为例:分为以下几种情况\n\n 1.玩家上面是否为空地或目的地,若是,那就箱子移动\n\n 2.玩家前面为箱子或箱子加目的地,箱子的前面是否为目的地或空地,若是,则移动箱子(箱子移动到原来箱子的前面,人移动到原来箱子的位置)\n\n V、判断是否通关,并设置多关卡\n\n 判断通关的条件:是否还有箱子")
--[[ 开发流程步骤:I、绘制推箱子地图并初始化 ----- 几*几大小的地图 II、根据宏定义和推箱子地图上的数字来选择不同的图形
III、获取玩家坐标 -----------重点
(有两种情况:1.最开始玩家的坐标,并获取其横纵坐标
2. 玩家在目的地上时的坐标, 并获取其横纵坐标 )
IV、移动箱子 ----------------重点、难点
根据你所要移动的方向 分别判断箱子是否可以移动
以向上为例:分为以下几种情况
1.玩家上面是否为空地或目的地,若是,那就箱子移动
2.玩家前面为箱子或箱子加目的地,箱子的前面是否为目的地或空地,
若是,则移动箱子(箱子移动到原来箱子的前面,人移动到原来箱子的位置)V、判断是否通关,并设置多关卡
判断通关的条件:是否还有箱子
]]
--1、初始化地图、定义全局变量
local SPACE=0--{"空白", " "}
local WALL=1--{"墙","墙 "}
local DEST=2--{"目的地","@@"}
local BOX=3--{"箱子","¥"}
local PLAYER=4--{"玩家","&&"}
local userkey=75
--tip:注意获取人在目的地时的坐标,
--定义两个全局变量 m,n 分别为玩家的横纵坐标
local m, n=0,0
local level=0--关卡
--IMAGE image[7]
--初始化地图
local gamemap = {
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,1,2,1,0,0,0,0},
{0,0,0,1,3,1,1,1,1,0},
{0,1,1,1,0,0,3,2,1,0},
{0,1,2,3,4,0,1,1,1,0},
{0,1,1,1,1,3,1,0,0,0},
{0,0,0,0,1,2,1,0,0,0},
{0,0,0,0,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
},
{
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,0,0,1,1,1,0},
{1,0,0,0,1,1,0,0,0,1},
{1,2,0,0,3,0,0,0,0,1},
{0,1,2,3,4,3,0,0,1,0},
{0,0,1,0,3,0,2,1,0,0},
{0,0,0,1,0,2,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
},
{
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,1,0},
{0,1,2,0,1,2,0,0,1,0},
{0,1,0,0,1,1,0,0,1,0},
{0,1,0,3,4,0,3,0,1,0},
{0,1,0,0,3,0,0,1,1,0},
{0,1,1,0,1,0,0,1,0,0},
{0,0,1,0,1,2,0,1,0,0},
{0,0,1,1,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,0},
},
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,0,2,0,0,0,1},
{1,2,1,1,0,0,0,1,0,1},
{1,0,0,0,3,0,1,1,2,1},
{1,0,1,1,4,3,0,1,0,1},
{1,0,1,0,3,0,3,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,2,0,0,0,1,1,1,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1},
},
{
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,1,2,0,1,0,0,0},
{0,0,1,0,3,0,2,1,0,0},
{0,1,0,0,3,1,0,0,1,0},
{1,0,0,3,0,3,0,0,0,1},
{1,0,0,1,0,3,1,2,0,1},
{0,1,2,0,0,0,2,0,1,0},
{0,0,1,0,1,0,0,1,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
},
}
-- 2、加载图片并绘制推箱子界面
local function game()
--加载图片
for i=1,8 do
image[i]=mapimage[i]
end
end
--绘制页面
local function drawMap(map)
--输出地图
for i=1,10 do
for j=1,10 do
--image[arr[level][i][j]]
end
end
end
--3、通过方向键移动,推箱子----------重难点
--[[local SPACE=0--{"空白", " "}
local WALL=1--{"墙","墙 "}
local DEST=2--{"目的地","@@"}
local BOX=3--{"箱子","¥"}
local PLAYER=4--{"玩家","&&"}
]]
--按键控制移动方向
local function move(userkey)
local userkey=72
if userkey==72 or userkey=="w" or userkey=="W" then
--玩家前面是否为空地
if arr[level][m - 1][n] == SPACE or arr[level][m - 1][n] == DEST then
arr[level][m - 1][n] = PLAYER + arr[level][m - 1][n]
arr[level][m][n] = arr[level][m][n] - PLAYER
--玩家前面是否为箱子
elseif arr[level][m - 1][n] == BOX or arr[level][m - 1][n] == BOX + DEST then
--箱子前面是否为空地或目的地
if arr[level][m - 2][n] == SPACE or arr[level][m - 2][n] == DEST then
arr[level][m - 2][n] = arr[level][m - 2][n] + BOX
arr[level][m - 1][n] = arr[level][m - 1][n] - BOX
arr[level][m - 1][n] = arr[level][m - 1][n] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
end
print("向上移动")
--Sleep(1000)
end
elseif userkey==80 or userkey== "s" or userkey=="S" then
--玩家后面是否为空地
if arr[level][m + 1][n] == SPACE or arr[level][m + 1][n] == DEST then
arr[level][m + 1][n] = PLAYER + arr[level][m + 1][n]
arr[level][m][n] = arr[level][m][n] - PLAYER
--玩家后面是否为箱子
elseif arr[level][m + 1][n] == BOX or arr[level][m + 1][n] == BOX + DEST then
--箱子后面是否为空地或目的地
if arr[level][m + 2][n] == SPACE or arr[level][m + 2][n] == DEST then
arr[level][m + 2][n] = arr[level][m + 2][n] + BOX
arr[level][m + 1][n] = arr[level][m + 1][n] - BOX
arr[level][m + 1][n] = arr[level][m + 1][n] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
end
print("向下移动")
end
elseif userkey==75 or userkey== "a" or userkey=="A" then
--玩家左边是否为空地
if arr[level][m][n - 1] == SPACE or arr[level][m][n - 1] == DEST then
arr[level][m][n - 1] = arr[level][m][n - 1] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
--玩家左边是否为箱子
elseif arr[level][m][n - 1] == BOX or arr[level][m][n - 1] == BOX + DEST then
--箱子左边是否为空地或目的地
if arr[level][m][n - 2] == SPACE or arr[level][m][n - 2] == DEST then
arr[level][m][n - 2] = arr[level][m][n - 2] + BOX
arr[level][m][n - 1] = arr[level][m][n - 1] - BOX
arr[level][m][n - 1] = arr[level][m][n - 1] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
end
print("向左移动")
end
elseif userkey==77 or userkey== "d" or userkey=="D" then
--玩家右边是否为空地
if arr[level][m][n + 1] == SPACE or arr[level][m][n + 1] == DEST then
arr[level][m][n + 1] = arr[level][m][n + 1] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
--玩家左边是否为箱子
elseif arr[level][m][n + 1] == BOX or arr[level][m][n + 1] == BOX + DEST then
--箱子左边是否为空地或目的地
if arr[level][m][n + 2] == SPACE or arr[level][m][n + 2] == DEST then
arr[level][m][n + 2] = arr[level][m][n + 2] + BOX
arr[level][m][n + 1] = arr[level][m][n + 1] - BOX
arr[level][m][n + 1] = arr[level][m][n + 1] + PLAYER
arr[level][m][n] = arr[level][m][n] - PLAYER
end
print("向右移动")
end
end
end-- 4、判断是否通过--------有无箱子的存在
--判断是否通关--------------是否还有箱子
local function judge()
for i=1,10 do
for j=1,10 do
if arr[level][i][j] == BOX then
return false
end
end
end
return true
end--5.main函数里面
local function main()
SetWindowText(GetHWnd(), "推箱子")
initgame()
drawMap()
--获取玩家坐标,并将其下标分别赋给 m,n
for i=1,10 do
for j=1,10 do
if arr[level][i][j] == PLAYER or arr[level][i][j]== PLAYER+DEST then
m,n=i,j
end
end
end
move()
system("cls")
drawMap()
if bool_judge() then
if level>1 then
exit(666)
MessageBox(GetHWnd(), "恭喜你通关了", "提示", MB_OKCANCEL)
Sleep(3000)
end
level=level+1
print("恭喜你过关了,大佬666\n")
end
end
相关文章:

推箱子小游戏
--print("开发流程步骤:I、绘制推箱子地图并初始化 ----- 几*几大小的地图 \n\n II、根据宏定义和推箱子地图上的数字来选择不同的图形\n\n III、获取玩家坐标 -----------重点\n\n …...

Spring简介
一:Spring是什么 Spring是分层的Java SE/EE应用full-stack(各层都有对应解决方案)轻量级(api较少,学习成本较低)开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp…...

万德高科携手航天科技AIRIOT打造智慧能碳管理平台, 助力碳达峰碳中和
“十四五”时期,我国生态文明建设进入了以降碳为重点战略方向、推动减污降碳协同增效、促进经济社会发展全面绿色转型、实现生态环境质量改善由量变到质变的关键时期。“实施数字化赋能行动”,聚焦能源管理、节能降碳、低碳能力等典型场景,推…...
金融软件开发的 4 大挑战
与大多数行业一样,金融行业不断发展,同样给软件和解决方案开发带来了挑战。虽然这些挑战并不独特,也不新颖,但是随着时间的推移,金融体系越来越复杂,这些挑战的影响也越来越大。 在上一篇文章中࿰…...
oppo 手机刷机流程
一、操作步骤: 一)解锁BootLoader 以下是一种常见的方法,可以尝试获取OPPO手机的Root权限(以参考信息为准,具体步骤可能因设备型号和系统版本而有所不同): 11). 解锁Bootloader:首…...
SQL---数据抽样
内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…...
C 库函数 - strxfrm()
描述 C 库函数 size_t strxfrm(char *dest, const char *src, size_t n) 根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。 声明 下面是 strxfrm() 函数的声明。 size_t strxfrm(char *dest, const char …...

选型前必看,CRM系统在线演示为什么重要?
在CRM挑选环节中,假如企业需要深入了解CRM管理系统的功能和功能,就需要CRM厂商提供在线演示。简单的说,就是按照企业的需要,检测怎样通过CRM进行。如今我们来谈谈CRM在线演示的作用。 在线演示 1、了解CRM情况 熟悉系统功能&…...

微软官宣放出一个「小模型」,仅2.7B参数,击败Llama2和Gemini Nano 2
就在前一阵谷歌深夜炸弹直接对标 GPT-4 放出 Gemini 之后,微软这两天也紧锣密鼓进行了一系列动作。尽管时间日趋圣诞假期,但是两家巨头硬碰硬的军备竞赛丝毫没有停止的意思。 就在昨日,微软官宣放出一个“小模型” Phi-2,这个 Ph…...

成为一名FPGA工程师:面试题与经验分享
在现代科技领域,随着数字电子技术的迅猛发展,FPGA(可编程逻辑器件)工程师成为了备受瞩目的职业之一。FPGA工程师不仅需要掌握硬件设计的基本原理,还需要具备良好的编程能力和解决问题的实践经验。面对如此竞争激烈的行…...

关于“Python”的核心知识点整理大全35
目录 13.3.4 重构 create_fleet() game_functions.py 13.3.5 添加行 game_functions.py alien_invasion.py 13.4 让外星人群移动 13.4.1 向右移动外星人 settings.py alien.py alien_invasion.py game_functions.py 13.4.2 创建表示外星人移动方向的设置 13.4.3 检…...
C++ opencv RGB三通道提升亮度
#include <iostream> #include <iomanip> #include<opencv2//opencv.hpp> using namespace std; using namespace cv; //函数adjustBrightness用于图片增加亮度 void adjustBrightness(cv::Mat& image, int targetBrightness) { // 获取图像的通道数…...

TCAX特效字幕保姆入门教程+效果演示+软件源码自取
目录 介绍 下载链接 初步使用 软件使用 tcc文件介绍 tcc文件版本 模式设置 编辑 k值提供方式举例 特效脚本设置 主要设置 ass全局风格设置 额外设置 常见问题 编码使用 使用其他tcax博主的进行编码测试 介绍 TCAX是一款专门用于制作特效字幕的软件。通过TCAX…...

【C语言】自定义类型:结构体深入解析(二)结构体内存对齐宏offsetof计算偏移量结构体传参
文章目录 📝前言🌠 结构体内存对齐🌉内存对齐包含结构体的计算🌠宏offsetof计算偏移量🌉为什么存在内存对⻬?🌠 结构体传参🚩总结 📝前言 本小节,我们学习结构的内存对…...

活动回顾 (上) | 2023 Meet TVM 系列活动完美收官
作者:xixi 编辑:三羊、李宝珠 2023 Meet TVM 年终聚会于 12 月 16 日在上海圆满落幕,本次 meetup 不仅邀请到了 4 位 AI 编译器专家为大家带来了精彩的分享,还新增了圆桌讨论环节,以更多元的视角和各位共同讨论大模型…...

JMeter常见配置及常见问题修改
一、设置JMeter默认打开字体 1、进入安装目录:apache-jmeter-x.x.x\bin\ 2、找到 jmeter.properties,打开。 3、搜索“ languageen ”,前面带有“#”号.。 4、去除“#”号,并修改为:languagezh_CN 或 直接新增一行&…...

描述一个bug及定义bug的级别
(一)描述一个bug 描述一个bug,需要以下几个因素: 故障标题、故障发现的版本、故障类别(功能/兼容/界面)、故障优先级、故障描述(测试环境、测试步骤、预期结果、实际结果)。 举个例…...

Java项目-瑞吉外卖项目优化Day3
前后端分离开发 Yapi 是一个接口结合了接口测试、接口管理的管理平台,需要配置比较麻烦。看弹幕说用apifox更好用。可以将接口文档导出导入。 Swagger 注意下面的地址前面要有/。 效果: 可以在这里实现接口的测试,也可以导出文档等等。一般…...
测试理论知识四:大型软件的测试技巧——单元测试
1. 模块测试/单元测试 模块测试也被称为单元测试,本文章称单元测试为主。 对于小的程序测试,我们可以在一定时间内完成,如果面对的是大型程序,等程序开发完成之后我们再进行测试,那会大大降低我们的效率。 单元测试…...

安防监控系统/磁盘阵列/视频监控EasyCVR平台微信推送步骤大公开
视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...

自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...
第14节 Node.js 全局对象
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局…...

Excel 怎么让透视表以正常Excel表格形式显示
目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...