推箱子小游戏
--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融合性强、开放度…...
基于RK3568J核心板的隔离网闸设计:硬件选型、系统架构与工程实践
1. 项目概述:当嵌入式核心板遇上网络安全“守门员”最近几年,“科技与狠活”这个词火遍全网,让大家对各种产品的成分和安全性都多了一份审视。其实,除了我们吃进嘴里的东西,另一个看不见摸不着却至关重要的领域——网络…...
深入解析浮点数内存存储与IEEE 754标准:从0.1+0.2≠0.3说起
1. 从一次“诡异”的计算错误说起前几天,一个刚入行的同事跑来找我,一脸困惑地给我看了一段Python代码。他写了个简单的循环累加,想计算0.1加10次,理论上应该等于1.0。但打印出来的结果却是0.9999999999999999。他反复检查了代码&…...
别再傻傻分不清了!数字IC面试必问的Latch与Flip-Flop,我用Verilog代码给你讲明白
数字IC面试突围:Latch与Flip-Flop的Verilog避坑指南 1. 从门电路到时序逻辑:存储单元的本质差异 在数字电路设计中,存储单元如同城市交通的信号灯系统。锁存器(Latch)就像持续亮着的红灯——只要信号有效(电…...
Godot引擎集成Wwise音频中间件:从原理到实战的完整指南
1. 项目概述:当AAA级音频引擎遇见开源游戏引擎如果你是一位使用Godot引擎的游戏开发者,并且对游戏音频的品质有追求,那么你很可能听说过Wwise。Wwise,全称Audiokinetic Wwise,是游戏音频领域的行业标准,从《…...
任务跟踪系统排名怎么看?8款企业常用工具对比
本文将深入对比8款任务跟踪系统和项目管理软件:Worktile、PingCode、Jira、Asana、monday.com、ClickUp、Trello、Microsoft Project。一、任务跟踪系统和项目管理软件有什么区别1、任务跟踪系统解决“事情有没有人跟、有没有进展”任务跟踪系统的核心价值ÿ…...
Python 内置函数:性能优势与使用技巧
Python 内置函数:性能优势与使用技巧 1. 技术分析 1.1 内置函数优势 Python内置函数由C实现,具有显著性能优势: 内置函数特点C实现: 底层用C编写优化: 经过高度优化内存效率: 内存使用更高效类型优化: 针对特定类型优化1.2 常用内置函数分类 …...
为防数据泄露!教你拆除2024款RAV4混动汽车调制解调器和GPS
拆除2024款RAV4混动汽车调制解调器和GPS,从源头上阻止数据传输!现代汽车就像装在轮子上的电脑,配备众多传感器,会回传位置、速度等遥测数据。其车内和车外摄像头、麦克风及调制解调器默认开启,且难关闭,数据…...
CC2530开发避坑指南:IAR for 8051 10.10.1新建工程到流水灯调试的完整流程
CC2530开发实战:IAR for 8051 10.10.1工程搭建与调试全解析 第一次接触CC2530和IAR开发环境时,我盯着满屏的编译错误和无法识别的仿真器,深刻理解了什么叫"从入门到放弃"。这种经历在嵌入式开发领域太常见了——特别是当你面对的是…...
Parabolic视频下载工具:三步完成200+网站视频下载的终极方案
Parabolic视频下载工具:三步完成200网站视频下载的终极方案 【免费下载链接】Parabolic Download web video and audio 项目地址: https://gitcode.com/GitHub_Trending/pa/Parabolic 你是否还在为寻找一款简单易用、功能强大的视频下载工具而烦恼࿱…...
Django 模板(Template):告别硬编码,实现动态 HTML页面
IT策士 10余年一线大厂经验,专注 IT 思维、架构、职场进阶。 当你开始构建一个真正的 Web 应用时,很快就会厌倦这种方式: def home(request):return HttpResponse("<h1>欢迎,张三!</h1><p>今天…...
