推箱子小游戏

news2025/1/23 7:05:15

--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
    


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1330259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SSM】SSM整合

SSM 整合 文章目录 SSM 整合1. 核心问题明确1.1 第一问:SSM整合需要几个IoC容器?1.2 第二问:每个IoC容器对应哪些类型组件?1.3 第三问:IoC容器之间关系和调用方向?1.4 第四问:具体多少配置类以及…

随机问卷调查数据的处理(uniapp)

需求:问卷调查 1.返回的数据中包含单选、多选、多项文本框、单文本框、图片上传 2.需要对必填的选项进行校验 3.非必填的多项文本框内容 如果不填写 不提交 表单数据格式 res{"code": 0,"msg": null,"data": [{"executeDay&…

CSS overflow-anchor

overflow-anchor 为了认识这个属性, 我们需要先看一种常见的现象. 即在网页加载中, 图片常常比文字加载更慢, 这样图片加载完成后可能会将文字向下顶. 比如下图演示 <div class"overflow"><img id"bg" src"" height"150" al…

前端页面资源放入oss 对象存储问题

1.需求 当我们做的是微信公众号的时候 需要微信重定向登录 在此时 我们需要在微信后台配置重定向域名 但是微信后台只能配置三个 如果有很多H5 公众号重定向登录的需求 我们该怎么做呢 2.解决 肯定我们需要配置 首页的 一般前端打包项目 都是由index.html 当然 我们实现 都是…

Linux:sudo给予账户特定的权限

我们某些用户权限比较低&#xff0c;如果我们他们的权限提高&#xff0c;或者假如搞权限的组&#xff0c;那么会大大减少安全性&#xff0c;我们可以使用sudo对他们开放指定的命令 我这里有 a1—3 3个用户&#xff0c;现在我切换到a1执行一下重启的命令 发现我们这个用户并无…

DSC2803X,DSP Pin2Pin with Ti Parts

一&#xff0c;产品特性 高能效 32 位处理器(H28x 内核)  主频 120MHz&#xff08;周期 8.33ns&#xff09;  哈佛(Harvard) 总线架构  硬件乘法/除法单元  4/6 通道高速 DMA  快速中断响应和处理  统一存储器编程模型  高效代码&#xff08;使用 C/C和汇编语言&…

docker容器内 获取宿主机ip

可以使用命令 --add-host jargatewayip:192.168.0.47 \ 需要注意,这里不能是 127.0.0.1 ,所以要找到服务器局域网的ip 命令示例 docker run -it \-p 80:80 \-p 443:443 \--name nginx \--network app --hostname nginx \-e TZAsia/Shanghai \--add-host jargatewayip:192.16…

基于JAVA的厦门旅游电子商务预订系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

16、Qt线程(一):继承QThread,重写run

一、说明 Qt提供了3个类4种方式创建线程&#xff1a; 1、QThread ①继承QThread类&#xff0c;重写run()函数 ②继承QObject类&#xff0c;使用moveToThread()函数 2、使用QtConCurrent并发模块的run()函数 3、继承QRunnable类 二、功能说明 1、通过继承QThread&#xff0c;重…

FATFS文件系统

文件系统是为了存储和管理数据&#xff0c;而在存储设备上建立的一种组织结构。 Windows常用的文件系统&#xff1a; 1、FAT12 2、FAT16 3、FAT32 4、exFAT 5、NTFS FAT&#xff1a;File Alloction Table 文件分配表 在小型的嵌入式存储设备大多…

大模型托管平台Replicate,获2.9元B轮融资

大模型开源平台Replicate在官网宣布&#xff0c;获得4000万美元&#xff08;近2.9亿元&#xff09;B轮融资。本次由a16z领投&#xff0c;英伟达、Y Combinator等跟投。 Replicate的开源平台提供了超过25,000个模型&#xff0c;涵盖文本、图片、视频、音频、3D模型等领域。典型…

60.乐理基础-打拍子-V字打拍法

前置内容&#xff1a; 文字版 https://note.youdao.com/s/6FSSvGBf &#xff08;顺序参考&#xff1a;下方的视频版里面目录顺序&#xff09; 视频版 【四川音乐学院作曲硕士】教你零基础自学乐理保姆级教学-学习视频教程-腾讯课堂 文字版还有下图红框中三个专栏里的内容&a…

freemarkEngine文件ftl的可视化编辑

在做导出word文件功能时&#xff0c;需要准备ftl模板&#xff0c;设置一些通配符&#xff0c;之后通过相关编码&#xff0c;即可以实现业务数据渲染后导出word的功能。但是ftl文件一般我们看不太懂&#xff0c;所以可视化创建和修改就非常合适。 1、安装office2016版本&#x…

【Linux】权限篇(二)

权限目录 1. 前言2. 权限2.1 修改权限2.2 有无权限的对比2.3 另外一个修改权限的方法2.3.1 更改用户角色2.3.2 修改文件权限属性 3. 第一个属性列4. 目录权限5. 默认权限 1. 前言 在之前的一篇博客中分享了关于权限的一些知识&#xff0c;这次紧接上次的进行&#xff0c;有需要…

中国数字化进程简史(1980-2022)之二基础网络雏形

20世纪80年代数字化政策扶持信息化技术基础研究&#xff0c;一大批科研成果在90年代开始市场转化&#xff0c;随着中国大陆向外向型经济转型&#xff0c;1993年3月12日朱镕基副总理主持会议部署建设国家公用经济信息网为起点&#xff0c;拉开了一系列“金”字号工程规划建设的序…

LLM漫谈(一)| LLM可以取代数据分析师吗?

我想&#xff0c;在过去的一年里&#xff0c;我们每个人都不止一次想知道ChatGPT是否&#xff08;或者更确切地说&#xff0c;何时&#xff09;能够取代你的工作。 我们有一个共识&#xff0c;即Generative AI最近的突破将极大地影响我们每个人生活和工作。然而&#xff0c;我们…

使用OpenCV4实现工业缺陷检测的六种方法

目录 1 机器视觉2 缺陷检测3 工业上常见缺陷检测方法 1 机器视觉 机器视觉是使用各种工业相机&#xff0c;结合传感器跟电气信号实现替代传统人工&#xff0c;完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成&#xff0c;…

DPDK单步跟踪(3)-如何利用visual studio 2019和visual gdb来单步调试dpdk

准备工作 因为时间的关系&#xff0c;我想到哪说到哪&#xff0c;可能没那么高的完成度。 但其实有心的人&#xff0c;看到这个标题&#xff0c;就关了本文自己能做了。 why和how to build debug version DPDK,见前两篇。这里我们准备开始。 首先&#xff0c;你有一台linux机…

【游戏篇】Scratch之饥饿的鱼

【作品展示】饥饿的鱼 操作&#xff1a;点击小绿旗&#xff0c;按下键盘方向或者利用鼠标移动&#xff0c;躲避大鱼的同时还要想办法吃到小鱼。

SecureCRT连接vmware虚拟机的centos系统配置

软件版本&#xff1a;VMware10.0.3&#xff0c;centos 7&#xff0c;securecrt 8.7.2 1&#xff0c;虚拟网络编辑器选择桥接模式&#xff0c; 2&#xff0c;如果不小心删除网络&#xff0c;centos关机状态下&#xff0c;选择恢复默认设置。 3&#xff0c;进入linux系统&#…