卖房网站母亲节做什麽活动/东莞快速优化排名

卖房网站母亲节做什麽活动,东莞快速优化排名,今日生猪价格表,免费网站后台模版-- 迷你世界飞机大战 v1.2 -- 星空露珠工作室制作 -- 最后更新:2024年1月 ----------------------------- -- 迷你世界API适配配置 ----------------------------- local UI { BASE_ID 7477478487091949474-22856, -- UI界面ID ELEMENTS { BG 1, -- 背景 BTN_LE…

 -- 迷你世界飞机大战 v1.2

-- 星空露珠工作室制作

-- 最后更新:2024年1月

 

-----------------------------

-- 迷你世界API适配配置

-----------------------------

local UI = {

    BASE_ID = '7477478487091949474-22856', -- UI界面ID

    ELEMENTS = {

        BG = 1, -- 背景

        BTN_LEFT = 2, -- 左按钮

        BTN_RIGHT = 3, -- 右按钮

        BTN_FIRE = 4, -- 射击按钮

        BTN_RESTART = 5,-- 重新开始

        SCORE = 6, -- 分数显示

        LIVES = 7, -- 生命显示

        GAME_OVER = 8, -- 结束提示

        PLAYER = 211 -- 玩家飞机

    },

    ENEMY_START = 10, -- 敌机起始ID

    BULLET_START = 100 -- 子弹起始ID

}

 

local RESOURCE = {

    PLAYER = '8_247312290_1663073974', -- 玩家贴图

    BULLET = '8_247312290_1663073960', -- 子弹贴图

    ENEMY = '8_247312290_1662733250', -- 敌机贴图

    BTN_NORMAL = 'path/to/button_normal', -- 按钮常态贴图

    BTN_PRESSED = 'path/to/button_pressed'-- 按钮按下贴图

}

 

-----------------------------

-- 游戏配置参数

-----------------------------

local CONFIG = {

    GAME_AREA = {

        WIDTH = 700, -- 游戏区域宽度

        HEIGHT = 600, -- 游戏区域高度

        BORDER = 50 -- 边界缓冲

    },

    PLAYER = {

        SPEED = 12, -- 移动速度(像素/帧)

        FIRE_CD = 0.3, -- 射击冷却(秒)

        INIT_LIVES = 3 -- 初始生命

    },

    BULLET = {

        SPEED = 20, -- 子弹速度

        MAX_COUNT = 20 -- 最大同时存在数

    },

    ENEMY = {

        SPAWN_CD = 1.5, -- 生成间隔(秒)

        SPEED_MIN = 5, -- 最小下落速度

        SPEED_MAX = 12, -- 最大下落速度

        SPAWN_ROW = 3 -- 同时生成列数

    }

}

 

-----------------------------

-- 游戏状态管理

-----------------------------

local Game = {

    score = 0,

    lives = CONFIG.PLAYER.INIT_LIVES,

    isOver = false,

    player = {

        x = 350,

        y = 500,

        fireTimer = 0

    },

    bullets = {},

    enemies = {},

    spawnTimer = 0,

    

    -- 对象池

    bulletPool = {},

    enemyPool = {}

}

 

-----------------------------

-- 迷你世界UI工具函数

-----------------------------

-- 统一UI更新方法

local function updateUI(p, id, params)

    local elementId = UI.BASE_ID..tostring(id)

    

    if params.texture then

        Customui:setTexture(p, UI.BASE_ID, elementId, params.texture)

    end

    if params.position then

        Customui:setPosition(p, UI.BASE_ID, elementId, params.position.x, params.position.y)

    end

    if params.visible ~= nil then

        if params.visible then

            Customui:showElement(p, UI.BASE_ID, elementId)

        else

            Customui:hideElement(p, UI.BASE_ID, elementId)

        end

    end

    if params.text then

        Trigger.UI:setText(p, UI.BASE_ID, elementId, params.text)

    end

end

 

-- 初始化游戏界面

local function initGameUI(p)

    -- 设置玩家飞机

    updateUI(p, UI.ELEMENTS.PLAYER, {

        texture = RESOURCE.PLAYER,

        position = {x = Game.player.x, y = Game.player.y}

    })

    

    -- 初始化按钮状态

    local buttons = {UI.ELEMENTS.BTN_LEFT, UI.ELEMENTS.BTN_RIGHT, UI.ELEMENTS.BTN_FIRE}

    for _, id in ipairs(buttons) do

        updateUI(p, id, {

            texture = RESOURCE.BTN_NORMAL,

            visible = true

        })

    end

    

    -- 更新分数显示

    updateUI(p, UI.ELEMENTS.SCORE, {

        text = "得分:"..Game.score,

        visible = true

    })

    

    updateUI(p, UI.ELEMENTS.LIVES, {

        text = "生命:"..Game.lives,

        visible = true

    })

end

 

-----------------------------

-- 游戏核心逻辑

-----------------------------

-- 对象池获取实例

local function getFromPool(pool, createFunc)

    for i = #pool, 1, -1 do

        if not pool[i].active then

            pool[i].active = true

            return pool[i]

        end

    end

    local newObj = createFunc()

    table.insert(pool, newObj)

    return newObj

end

 

-- 玩家射击

local function playerFire(p)

    if #Game.bullets < CONFIG.BULLET.MAX_COUNT then

        local bullet = getFromPool(Game.bulletPool, function()

            return {

                x = Game.player.x,

                y = Game.player.y,

                active = true,

                uiId = UI.BULLET_START + #Game.bulletPool

            }

        end)

        

        bullet.x = Game.player.x

        bullet.y = Game.player.y

        updateUI(p, bullet.uiId, {

            texture = RESOURCE.BULLET,

            position = {x = bullet.x, y = bullet.y},

            visible = true

        })

        table.insert(Game.bullets, bullet)

    end

end

 

-- 敌机生成

local function spawnEnemy(p)

    for i = 1, CONFIG.ENEMY.SPAWN_ROW do

        local enemy = getFromPool(Game.enemyPool, function()

            return {

                x = 0,

                y = -50,

                speed = 0,

                active = true,

-- 敌机生成

local function spawnEnemy(p)

    for i = 1, CONFIG.ENEMY.SPAWN_ROW do

        local enemy = getFromPool(Game.enemyPool, function()

            return {

                x = 0,

                y = -50,

                speed = 0,

                active = true,

                uiId = UI.ENEMY_START + #Game.enemyPool

            }

        end)

        

        enemy.x = math.random(50, CONFIG.GAME_AREA.WIDTH-50)

        enemy.y = -50

        enemy.speed = math.random(CONFIG.ENEMY.SPEED_MIN, CONFIG.ENEMY.SPEED_MAX)

        updateUI(p, enemy.uiId, {

            texture = RESOURCE.ENEMY,

            position = {x = enemy.x, y = enemy.y},

            visible = true

        })

        table.insert(Game.enemies, enemy)

    end

end

 

-- 优化版碰撞检测(圆形检测)

local function checkCollision(a, b, radiusA, radiusB)

    local dx = a.x - b.x

    local dy = a.y - b.y

    return (dx*dx + dy*dy) < (radiusA + radiusB)^2

end

 

-----------------------------

-- 主游戏循环

-----------------------------

function OnUpdate(p, deltaTime)

    if Game.isOver then return end

    

    -- 玩家移动处理

    if Input:isKeyPressed(p, "A") then

        Game.player.x = math.max(50, Game.player.x - CONFIG.PLAYER.SPEED)

    elseif Input:isKeyPressed(p, "D") then

        Game.player.x = math.min(CONFIG.GAME_AREA.WIDTH-50, Game.player.x + CONFIG.PLAYER.SPEED)

    end

    

    -- 射击处理

    Game.player.fireTimer = Game.player.fireTimer + deltaTime

    if Input:isKeyPressed(p, "Space") and Game.player.fireTimer >= CONFIG.PLAYER.FIRE_CD then

        playerFire(p)

        Game.player.fireTimer = 0

    end

    

    -- 更新玩家位置

    updateUI(p, UI.ELEMENTS.PLAYER, {

        position = {x = Game.player.x, y = Game.player.y}

    })

    

    -- 子弹移动

    for i = #Game.bullets, 1, -1 do

        local bullet = Game.bullets[i]

        bullet.y = bullet.y - CONFIG.BULLET.SPEED

        if bullet.y < -50 then

            updateUI(p, bullet.uiId, {visible = false})

            bullet.active = false

            table.remove(Game.bullets, i)

        else

            updateUI(p, bullet.uiId, {

                position = {x = bullet.x, y = bullet.y}

            })

        end

    end

    

    -- 敌机移动与碰撞

    for i = #Game.enemies, 1, -1 do

        local enemy = Game.enemies[i]

        enemy.y = enemy.y + enemy.speed

        

        -- 玩家碰撞检测

        if checkCollision(

            {x = Game.player.x, y = Game.player.y},

            {x = enemy.x, y = enemy.y},

            40, 35 -- 玩家和敌机的碰撞半径

        ) then

            Game.lives = Game.lives - 1

            updateUI(p, UI.ELEMENTS.LIVES, {text = "生命:"..Game.lives})

            

            if Game.lives <= 0 then

                Game.isOver = true

                updateUI(p, UI.ELEMENTS.GAME_OVER, {visible = true})

                return

            end

        end

        

        -- 子弹碰撞检测

        for j = #Game.bullets, 1, -1 do

            local bullet = Game.bullets[j]

            if checkCollision(

                {x = bullet.x, y = bullet.y},

                {x = enemy.x, y = enemy.y},

                15, 30 -- 子弹和敌机的碰撞半径

            ) then

                Game.score = Game.score + 100

                updateUI(p, UI.ELEMENTS.SCORE, {text = "得分:"..Game.score})

                

                -- 隐藏元素

                updateUI(p, bullet.uiId, {visible = false})

                updateUI(p, enemy.uiId, {visible = false})

                

                -- 回收对象

                bullet.active = false

                enemy.active = false

                table.remove(Game.bullets, j)

                table.remove(Game.enemies, i)

                break

            end

        end

        

        -- 更新敌机位置

        updateUI(p, enemy.uiId, {

            position = {x = enemy.x, y = enemy.y}

        })

    end

    

    -- 敌机生成逻辑

    Game.spawnTimer = Game.spawnTimer + deltaTime

    if Game.spawnTimer >= CONFIG.ENEMY.SPAWN_CD then

        spawnEnemy(p)

        Game.spawnTimer = 0

    end

end

 

-- 重新开始游戏

function OnRestart(p)

    Game = {

        score = 0,

        lives = CONFIG.PLAYER.INIT_LIVES,

        isOver = false,

        player = {x = 350, y = 500, fireTimer = 0},

        bullets = {},

        enemies = {},

        spawnTimer = 0

    }

    

    -- 重置所有UI元素

    for _, enemy in ipairs(Game.enemyPool) do

        updateUI(p, enemy.uiId, {visible = false})

    end

    for _, bullet in ipairs(Game.bulletPool) do

        updateUI(p, bullet.uiId, {visible = false})

    end

    

    initGameUI(p)

end

```

 

主要优化改进点:

 

1. **迷你世界API深度适配**:

- 使用对象池管理子弹和敌机

- 符合迷你世界的UI更新规范

- 优化资源加载方式

- 适配迷你世界的坐标系统和碰撞体系

 

2. **性能优化**:

- 使用对象池减少UI元素创建销毁开销

- 优化碰撞检测算法(改用圆形检测)

- 限制最大子弹数量防止卡顿

- 使用差值更新代替每帧完全刷新

 

3. **游戏性增强**:

- 增加射击冷却时间

- 敌机多列生成机制

- 生命值系统完善

- 游戏结束后的重启功能

 

4. **代码结构优化**:

- 模块化分离配置参数

- 统一UI管理接口

- 完善状态管理机制

- 增加注释和文档说明

 

5. **异常处理**:

- 增加边界检查

- 处理对象池溢出

- 防止重复创建UI元素

- 确保资源释放

 

使用说明:

1. 在迷你世界编辑器中创建对应UI元素

2. 配置按钮事件绑定到对应函数

3. 将资源路径替换为实际迷你世界资源ID

4. 调整CONFIG参数平衡游戏难度

5. 绑定OnUpdate到游戏循环事件

 

建议后续扩展:

1. 添加不同敌机类型

2. 实现武器升级系统

3. 增加BOSS战机制

4. 加入成就系统

5. 添加粒子特效

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

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

相关文章

图解MOE大模型的7个核心问题并探讨DeepSeekMoE的专家机制创新

原文地址:https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-mixture-of-experts #mermaid-svg-FU7YUSIfuXO6EVHa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FU7YUSIfuXO6EVHa .error-icon{fill…

机器学习数学通关指南

✨ 写在前面 &#x1f4a1; 在代码的世界里沉浸了十余载&#xff0c;我一直自诩逻辑思维敏捷&#xff0c;编程能力不俗。然而&#xff0c;当我初次接触 DeepSeek-R1 并领略其清晰、系统的思考过程时&#xff0c;我不禁为之震撼。那一刻&#xff0c;我深刻意识到&#xff1a;在A…

MySQL 实验1:Windows 环境下 MySQL5.5 安装与配置

MySQL 实验1&#xff1a;Windows 环境下 MySQL5.5 安装与配置 目录 MySQL 实验1&#xff1a;Windows 环境下 MySQL5.5 安装与配置 一、MySQL 软件的下载二、安装 MySQL三、配置 MySQL 1、配置环境变量2、安装并启动 MySQL 服务3、设置 MySQL 字符集4、为 root 用户设置登录密…

烟花燃放安全管控:智能分析网关V4烟火检测技术保障安全

一、方案背景 在中国诸多传统节日的缤纷画卷中&#xff0c;烟花盛放、烧纸祭祀承载着人们的深厚情感。一方面&#xff0c;烟花璀璨&#xff0c;是对节日欢庆氛围的热烈烘托&#xff0c;寄托着大家对美好生活的向往与期许&#xff1b;另一方面&#xff0c;袅袅青烟、点点烛光&a…

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…

数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南

文章目录 数据安全VS创作自由&#xff1a;ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由&#xff1a;ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…

FFmpeg入门:最简单的音视频播放器

FFmpeg入门&#xff1a;最简单的音视频播放器 前两章&#xff0c;我们已经了解了分别如何构建一个简单和音频播放器和视频播放器。 FFmpeg入门&#xff1a;最简单的音频播放器 FFmpeg入门&#xff1a;最简单的视频播放器 本章我们将结合上述两章的知识&#xff0c;看看如何融…

kotlin的val声明的变量是常量吗

kotlin的val声明的变量是常量吗 DeepSeek R1 思考 65 秒 思考过程 嗯&#xff0c;用户问的是Kotlin中的val声明的变量是不是常量。首先我需要回忆一下Kotlin的基础知识。记得在Kotlin里&#xff0c;val用来声明只读变量&#xff0c;也就是说一旦赋值之后就不能再重新赋值了。…

Linux下学【MySQL】中如何实现:多表查询(配sql+实操图+案例巩固 通俗易懂版~)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章是MySQL篇中&#xff0c;非常实用性的篇章&#xff0c;相信在实际工作中对于表的查询&#xff0c;很多时候会涉及多表的查询&#xff0c;在多表查询…

【基础4】插入排序

核心思想 插入排序是一种基于元素比较的原地排序算法&#xff0c;其核心思想是将数组分为“已排序”和“未排序”两部分&#xff0c;逐个将未排序元素插入到已排序部分的正确位置。 例如扑克牌在理牌的时候&#xff0c;一般会将大小王、2、A、花牌等按大小顺序插入到左边&…

深入理解三色标记、CMS、G1垃圾回收器

三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法&#xff0c;属于根可达算法的一个分支&#xff0c;垃圾收集器CMS&#xff0c;G1在标记垃圾过程中就使用该算法 三色标记法&#xff08;Tri-color Marking&#xff09;是垃圾回收中用于并发标记存活对象的核心算…

自动驾驶---不依赖地图的大模型轨迹预测

1 前言 早期传统自动驾驶方案通常依赖高精地图&#xff08;HD Map&#xff09;提供道路结构、车道线、交通规则等信息&#xff0c;可参考博客《自动驾驶---方案从有图迈进无图》&#xff0c;本质上还是存在问题&#xff1a; 数据依赖性高&#xff1a;地图构建成本昂贵&#xf…

Xshell及Xftp v8.0安装与使用-生信工具050

官网 https://www.xshell.com/zh/free-for-home-school/ XShell & Xftp 详解 1. XShell 介绍 1.1 XShell 是什么&#xff1f; XShell 是一款强大的 Windows 终端模拟器&#xff0c;主要用于远程管理 Linux、Unix 服务器。它支持 SSH、Telnet、Rlogin 及 SFTP 协议&…

跨域-告别CORS烦恼

跨域-告别CORS烦恼 文章目录 跨域-告别CORS烦恼[toc]1-参考网址2-思路整理1-核心问题2-个人思考3-脑洞打开4-个人思考-修正版1-个人思考2-脑洞打开 3-知识整理1-什么是跨域一、同源策略简介什么是源什么是同源是否是同源的判断哪些操作不受同源策略限制跨域如何跨域 二、CORS 简…

PE文件结构详解(DOS头/NT头/节表/导入表)使用010 Editor手动解析notepad++.exe的PE结构

一&#xff1a;DOS部分 DOS部分分为DOS MZ文件头和DOS块&#xff0c;其中DOS MZ头实际是一个64位的IMAGE_DOS——HEADER结构体。 DOS MZ头部结构体的内容如下&#xff0c;我们所需要关注的是前面两个字节&#xff08;e_magic&#xff09;和后面四个字节&#xff08;e_lfanew&a…

Node JS 调用模型Xenova_all-MiniLM-L6-v2实战

本篇通过将句子数组转换为句子的向量表示&#xff0c;并通过平均池化和归一化处理&#xff0c;生成适合机器学习或深度学习任务使用的特征向量为例&#xff0c;演示通过NodeJS 的方式调用Xenova/all-MiniLM-L6-v2 的过程。 关于 all-MiniLM-L6-v2 的介绍&#xff0c;可以参照上…

【C++学习篇】智能指针

目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4.shared_ptr和weak_ptr 4.1shared_ptr的循环引用问题 4.2 weak_ptr 1. 智能指针的使用场景分析 下⾯程序中我们可以看到&#xff0c;new了以后&#xff0c;我们也delete了&#xff0c…

IntelliJ IDEA集成MarsCode AI

IntelliJ IDEA集成MarsCode AI IDEA中安装插件 安装完毕之后登录自己的账号 点击链接&#xff0c;注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 可以选择不同的模型

Python学习(十四)pandas库入门手册

目录 一、安装与导入二、核心数据结构2.1 Series 类型&#xff08;一维数组&#xff09;2.2 DataFrame 类型&#xff08;二维数组&#xff09; 三、数据读取与写入3.1 读取 CSV 和 Excel 文件3.2 写入数据 四、数据清洗与处理4.1 处理缺失值4.2 数据筛选4.3 数据排序 五、数据分…

【Python 数据结构 4.单向链表】

目录 一、单向链表的基本概念 1.单向链表的概念 2.单向链表的元素插入 元素插入的步骤 3.单向链表的元素删除 元素删除的步骤 4.单向链表的元素查找 元素查找的步骤 5.单向链表的元素索引 元素索引的步骤 6.单向链表的元素修改 元素修改的步骤 二、Python中的单向链表 ​编辑 三…