零游戏基础Cursor制作你人生中的第一款手游(3)游戏关卡的制作

零游戏基础Cursor制作你人生中的第一款手游(3)游戏关卡的制作

magic
2024-11-08 / 0 评论 / 1 阅读 / 正在检测是否收录...

上章我们说了,让AI把战绩保存到数据库,本来最开始要把战绩给游戏用户列出来,增加一个查看战绩按钮的

先看这章最终效果

WechatIMG5875.jpg

实现查看战绩

对AI说:

飞机大战游戏目前正常运行了,我想界面上增加一个查看战绩按钮,点击展示战绩,字段,时间,分数
AI回复:
在游戏界面上增加一个查看战绩的按钮,并在点击时展示战绩(包括字段、时间和分数),你需要进行以下修改:
在 GameInfo 类中添加一个按钮和相应的事件处理函数。
创建一个新的方法来展示战绩。
更新 Main 类以处理战绩的显示。
以下是你需要的代码更新:
更新说明:
在 GameInfo 类中添加了一个按钮,点击后会调用 showScore 方法展示战绩。
showScore 方法会弹出一个包含当前时间和分数的提示框。
在 Main 类的构造函数中,添加了对 showScore 事件的监听。
请确保 GameInfo 类的相关代码能够正确处理按钮的创建和事件绑定。如果 GameInfo 类的实现不在你提供的代码中,可能需要相应地调整

点击应用

继续

目前页面并未看到按钮,也没报错
AI回复
如果页面上没有看到“查看战绩”按钮,可能是由于以下几个原因:
按钮的样式问题:按钮可能被其他元素覆盖,或者没有正确显示。可以尝试为按钮添加一些基本的样式。
按钮的添加位置:确保按钮被添加到正确的 DOM 元素中。
事件绑定问题:确保事件绑定正确,按钮的点击事件能够被触发。
以下是一些可能的解决方案:
1. 添加按钮样式
在 GameInfo 类的构造函数中,添加一些样式来确保按钮可见:
2. 确保按钮添加到正确的 DOM
确保按钮是在游戏开始后添加到 document.body 中的。如果游戏的渲染逻辑在某个特定的容器中,可能需要将按钮添加到那个容器中。
3. 检查事件绑定
确保 showScore 方法能够被正确调用。可以在 showScore 方法中添加一个 console.log 来确认是否被触发:
4. 检查浏览器控制台
打开浏览器的开发者工具,查看控制台是否有任何错误信息,可能会提供更多线索。
5. 确保游戏逻辑正常
确保游戏逻辑正常运行,特别是 GameInfo 类的实例是否被正确创建并渲染。
通过以上步骤,你应该能够找到并解决按钮未显示的问题。如果问题仍然存在,请提供更多的上下文信息,以便进一步帮助你。

这里继续交互了N次,没我想象的那么简单,在游戏画面中要实现网页中的数据展示,复杂度有点高,而我完全没游戏开发经验,这个战绩展示,等后面上线了,再加上吧,我们优先完成微信的要求,实现关卡功能,与背景切换

实现关卡

增加关卡功能有些复杂,这里跟AI 交互了N次,才达成我要的效果,这里描述下整个过程

对AI说

目前游戏比较简单,如果我想实现关卡,应该怎么实现

要在你的游戏中实现关卡系统,可以按照以下步骤进行设计和实现:

1. 定义关卡结构

首先,你需要定义关卡的结构。每个关卡可以包含以下信息:

关卡编号

敌人数量

敌人类型

生成间隔

其他特定于关卡的设置(如背景、音乐等)

2. 创建关卡管理类

创建一个新的类来管理关卡的逻辑,例如 LevelManager。这个类将负责加载关卡、跟踪当前关卡、处理关卡的开始和结束等。

3. 更新 Main 类

在 Main 类中,添加对 LevelManager 的引用,并在游戏开始时初始化关卡。

4. 示例代码

以下是一个简单的实现示例:

1. 创建 LevelManager 类

代码他生成了一个新文件levelManager.js

export default class LevelManager {
    constructor() {
        this.currentLevel = 0; // 当前关卡
        this.levels = [
            { enemies: 5, enemyType: 'easy', interval: 30, background: 'images/bg1.jpg' },
            { enemies: 7, enemyType: 'easy', interval: 28, background: 'images/bg2.jpg' },
            { enemies: 9, enemyType: 'medium', interval: 26, background: 'images/bg3.jpg' },
            { enemies: 11, enemyType: 'medium', interval: 24, background: 'images/bg4.jpg' },
            { enemies: 13, enemyType: 'hard', interval: 22, background: 'images/bg5.jpg' },
            { enemies: 15, enemyType: 'hard', interval: 20, background: 'images/bg6.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg7.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg8.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg9.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg10.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg11.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg12.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg13.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg14.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg15.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg16.jpg' },
            { enemies: 17, enemyType: 'hard', interval: 18, background: 'images/bg17.jpg' },
            // 可以继续添加更多关卡
        ];
    }

    getCurrentLevel() {
        return this.levels[this.currentLevel];
    }

    nextLevel() {
        this.currentLevel++;
        if (this.currentLevel >= this.levels.length) {
            this.currentLevel = this.levels.length - 1; // 防止超出范围
        }
    }

    reset() {
        this.currentLevel =0; // 重置到第一个关卡
        GameGlobal.databus.currentLevel = 1
    }
} 

这里出现了一个问题,我直接口语化跟AI说

我点击重新开始,关卡没有重新计算

AI自己修复了这个问题

继续增加需求

每一个关卡结束,提示他,让他点击进入下一关

要在每个关卡结束时提示玩家,并让他们点击进入下一关,你可以在 Main 类中实现一个提示框,使用 wx.showModal 来显示关卡完成的消息,并在用户确认后进入下一关。

1. 更新 checkLevelCompletion 方法

在 checkLevelCompletion 方法中,当关卡完成时,使用 wx.showModal 提示玩家,并在用户确认后进入下一关。

2. 示例代码

以下是更新后的 checkLevelCompletion 方法示例:

main.js

3. 整体逻辑

检查关卡完成:在 checkLevelCompletion 方法中检查当前关卡的敌机数量。

显示提示框:如果敌机数量为零,使用 wx.showModal 提示玩家关卡完成。

进入下一关:在用户确认后,调用 this.levelManager.nextLevel() 进入下一关,并调用 this.startLevel() 开始新关卡。

继续增加需求

关卡完成有bug,点击确认一直卡在哪里,好像是弹出了无数个框,可能代码写错地方了

它再次修复了

继续增加需求

每过完一关,切换一次背景

程序报错,继续说明自己需要的

背景有这7张图片,images/bg(1-7).jpg,提示 Image is not defined

如此,就实现了,这里为了好看,我们给程序成绩下面,增加显示一个当前关卡

对AI说

定义一个函数,绘制当前关卡,位置放在当前分数下面

Xnip2024-11-08_15-13-37.jpg

最终效果

Xnip2024-11-08_15-14-21.jpg

为了尽量审核通过,这里我找了十几个背景图片bg17.jpg ,然后截图每一个画面,提交给给微信审核

对了,这里的背景也是AI生成的,暂时先实现功能,没怎么注意美观,用的百度AI图片生成,实在太傻了,大部分图片特别不匹配,让不要出现天空画面,他非要出现天空,已经尝试了无数次方案。 听不懂汉语(国产生成图片还有一段很长的路)

WechatIMG5825.jpg

审核又一次没过,说进入游戏必须提示健康游戏忠告, 这个简单,直接跟AI说

进入游戏先不要开始,先提示进入小游戏第一张含有48字《健康游戏忠告》

要在进入游戏时显示一条包含48字的《健康游戏忠告》,你可以在游戏的初始化阶段使用 wx.showModal 来展示这条信息。以下是如何实现这一功能的步骤:

1. 在 Main 类中添加提示逻辑

在游戏的主类(通常是 Main 类)中,在构造函数或初始化方法中添加代码,以在游戏开始前显示提示。

2. 示例代码

以下是如何在 Main 类中实现这一功能的示例代码:

class Main {
    constructor() {
        // 其他初始化代码...

        // 显示健康游戏忠告
        this.showHealthAdvice();
    }

    showHealthAdvice() {
        wx.showModal({
            title: '健康游戏忠告',
            content: '健康游戏,快乐生活。合理安排时间,享受游戏乐趣,避免沉迷。',
            showCancel: false, // 不显示取消按钮
            success: (res) => {
                if (res.confirm) {
                    console.log('用户确认了忠告');
                    // 这里可以继续游戏的初始化逻辑
                    this.startGame(); // 开始游戏
                }
            }
        });
    }

    startGame() {
        // 游戏开始的逻辑
        console.log('游戏开始');
        // 其他游戏初始化代码...
    }
}

项目代码实时提交源码地址:https://github.com/magic007/PlaneBattleMiniGame

Xnip2024-11-08_14-50-55.jpg

再一次提交,等待微信审核,游戏我也继续用AI优化体验,后面有空把战绩功能给做出来。

0

评论

博主关闭了当前页面的评论