当前位置: 首页 > 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融合性强、开放度…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...