推箱子小游戏
--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融合性强、开放度…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
