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

推箱子小游戏

--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                                        判断通关的条件:是否还有箱子")
  

1e1ab711672847ba870c333f5c741871.png

 


  --[[  开发流程步骤: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 大挑战

与大多数行业一样,金融行业不断发展,同样给软件和解决方案开发带来了挑战。虽然这些挑战并不独特,也不新颖,但是随着时间的推移,金融体系越来越复杂,这些挑战的影响也越来越大。 在上一篇文章中&#xff0…...

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计算偏移量结构体传参

文章目录 &#x1f4dd;前言&#x1f320; 结构体内存对齐&#x1f309;内存对齐包含结构体的计算&#x1f320;宏offsetof计算偏移量&#x1f309;为什么存在内存对⻬?&#x1f320; 结构体传参&#x1f6a9;总结 &#x1f4dd;前言 本小节&#xff0c;我们学习结构的内存对…...

活动回顾 (上) | 2023 Meet TVM 系列活动完美收官

作者&#xff1a;xixi 编辑&#xff1a;三羊、李宝珠 2023 Meet TVM 年终聚会于 12 月 16 日在上海圆满落幕&#xff0c;本次 meetup 不仅邀请到了 4 位 AI 编译器专家为大家带来了精彩的分享&#xff0c;还新增了圆桌讨论环节&#xff0c;以更多元的视角和各位共同讨论大模型…...

JMeter常见配置及常见问题修改

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

描述一个bug及定义bug的级别

&#xff08;一&#xff09;描述一个bug 描述一个bug&#xff0c;需要以下几个因素&#xff1a; 故障标题、故障发现的版本、故障类别&#xff08;功能/兼容/界面&#xff09;、故障优先级、故障描述&#xff08;测试环境、测试步骤、预期结果、实际结果&#xff09;。 举个例…...

Java项目-瑞吉外卖项目优化Day3

前后端分离开发 Yapi 是一个接口结合了接口测试、接口管理的管理平台&#xff0c;需要配置比较麻烦。看弹幕说用apifox更好用。可以将接口文档导出导入。 Swagger 注意下面的地址前面要有/。 效果&#xff1a; 可以在这里实现接口的测试&#xff0c;也可以导出文档等等。一般…...

测试理论知识四:大型软件的测试技巧——单元测试

1. 模块测试/单元测试 模块测试也被称为单元测试&#xff0c;本文章称单元测试为主。 对于小的程序测试&#xff0c;我们可以在一定时间内完成&#xff0c;如果面对的是大型程序&#xff0c;等程序开发完成之后我们再进行测试&#xff0c;那会大大降低我们的效率。 单元测试…...

安防监控系统/磁盘阵列/视频监控EasyCVR平台微信推送步骤大公开

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...