AI也能写游戏啦,用ChatGPT生成cocos creator代码,编写回合制文字rpg游戏(二)

930 阅读3分钟

这节将来编写回合制战斗的具体流程 先简略的摆放下UI

image.png

开问

image.png

生成的代码

// 假设战斗界面的脚本组件名称为 "Battle",并且有一个用于控制战斗逻辑的方法 attackMonster

// 在 Battle.ts 脚本中
export default class Battle extends cc.Component {
    // 假设战斗界面的玩家血条和怪物血条使用了 cc.ProgressBar 组件来显示
    @property(cc.ProgressBar)
    playerHealthBar: cc.ProgressBar = null;

    @property(cc.ProgressBar)
    monsterHealthBar: cc.ProgressBar = null;

    // 其他代码...

    // 初始化战斗界面
    initBattle(playerHealth: number, monsterHealth: number) {
        // 根据玩家和怪物的初始血量设置血条的进度
        this.playerHealthBar.progress = playerHealth / 100; // 假设玩家初始血量最大值为 100
        this.monsterHealthBar.progress = monsterHealth / 100; // 假设怪物初始血量最大值为 100
    }

    // 点击攻击按钮的事件处理方法
    onAttackButtonClick() {
        // 这里可以编写攻击逻辑,例如计算伤害、更新血条等
        // 示例代码:
        const playerDamage = 20; // 假设玩家每次攻击造成 20 点伤害
        const monsterDamage = 10; // 假设怪物每次攻击造成 10 点伤害

        // 更新玩家和怪物的血条进度
        this.playerHealthBar.progress -= (playerDamage / 100); // 假设玩家血量最大值为 100
        this.monsterHealthBar.progress -= (monsterDamage / 100); // 假设怪物血量最大值为 100

        // 判断玩家和怪物的血量是否小于等于 0,即战斗是否结束
        if (this.playerHealthBar.progress <= 0) {
            // 玩家失败,处理游戏结束逻辑
            // ...
        } else if (this.monsterHealthBar.progress <= 0) {
            // 怪物被击败,处理战斗胜利逻辑
            // ...
        }
    }
}

通过面板给按钮挂上点击事件onAttackButtonClick,运行游戏,发现玩家和怪物同时扣血了,我想怪物先扣血,继续提问

image.png

生成的代码

// 玩家攻击怪物
 playerAttack() {
    // 这里可以编写攻击逻辑,例如计算伤害、更新血条等
    // 示例代码:
    const playerDamage = 20; // 假设玩家每次攻击造成 20 点伤害

    // 更新怪物的血条进度
    this.monsterHealthBar.progress -= (playerDamage / 100); // 假设怪物血量最大值为 100

    // 判断怪物的血量是否小于等于 0,即怪物是否被击败
    if (this.monsterHealthBar.progress <= 0) {
        // 怪物被击败,处理战斗胜利逻辑
        // ...
    } else {
        // 延迟一秒后,调用怪物攻击方法
        setTimeout(() => {
            this.monsterAttack();
        }, 1000); // 延迟 1 秒(1000 毫秒)后执行
    }
}

// 怪物攻击玩家
monsterAttack() {
    // 这里可以编写攻击逻辑,例如计算伤害、更新血条等
    // 示例代码:
    const monsterDamage = 10; // 假设怪物每次攻击造成 10 点伤害

    // 更新玩家的血条进度
    this.playerHealthBar.progress -= (monsterDamage / 100); // 假设玩家血量最大值为 100

    // 判断玩家的血量是否小于等于 0,即玩家是否失败
    if (this.playerHealthBar.progress <= 0) {
        // 玩家失败,处理游戏结束逻辑
        // ...
    }
}

把这两行代码

this.playerHealthBar.progress -= (playerDamage / 100); // 假设玩家血量最大值为 100
this.monsterHealthBar.progress -= (monsterDamage / 100); // 假设怪物血量最大值为 100
替换成
this.playerAttack()

运行游戏,发现能延迟扣血了

2.gif

接下来编写玩家或怪物死亡后的结算界面 提问:

我希望玩家,弹出结算界面,显示游戏失败。怪物死亡后,弹出结算界面,显示胜利

生成代码


// 玩家攻击怪物 playerAttack() { // 这里可以编写攻击逻辑,例如计算伤害、更新血条等 // 示例代码: const playerDamage = 20; // 假设玩家每次攻击造成 20 点伤害 // 更新怪物的血条进度 this.monsterHealthBar.progress -= (playerDamage / 100); // 假设怪物血量最大值为 100 // 判断怪物的血量是否小于等于 0,即怪物是否被击败 if (this.monsterHealthBar.progress <= 0) { // 怪物被击败,处理战斗胜利逻辑 this.showBattleResult(true); // 显示胜利结算界面 } else { // 延迟一秒后,调用怪物攻击方法 setTimeout(() => { this.monsterAttack(); }, 1000); // 延迟 1 秒(1000 毫秒)后执行 } } // 怪物攻击玩家 monsterAttack() { // 这里可以编写攻击逻辑,例如计算伤害、更新血条等 // 示例代码: const monsterDamage = 10; // 假设怪物每次攻击造成 10 点伤害 // 更新玩家的血条进度 this.playerHealthBar.progress -= (monsterDamage / 100); // 假设玩家血量最大值为 100 // 判断玩家的血量是否小于等于 0,即玩家是否失败 if (this.playerHealthBar.progress <= 0) { // 玩家失败,处理游戏失败逻辑 this.showBattleResult(false); // 显示失败结算界面 } }

// 在 Battle.ts 脚本中
export default class Battle extends cc.Component {
    // 其他代码...

    // 显示战斗结算界面
    showBattleResult(isWin: boolean) {
        // 这里可以编写显示结算界面的逻辑,例如弹出对话框、更新UI等
        if (isWin) {
            // 胜利结算界面
            cc.log("战斗胜利!");

            // 弹出胜利结算界面
            const endPanel = cc.instantiate(this.winEndPanelPrefab); // 假设胜利结算界面的预制体为 winEndPanelPrefab
            this.node.addChild(endPanel); // 将胜利结算界面添加为当前节点的子节点

            // 更新胜利结算界面中的 Label 文字
            const label = endPanel.getComponentInChildren(cc.Label); // 假设 Label 文字在胜利结算界面的子节点中
            if (label) {
                label.string = "战斗胜利!"; // 设置 Label 的文字
            }
        } else {
            // 失败结算界面
            cc.log("战斗失败!");

            // 弹出失败结算界面
            const endPanel = cc.instantiate(this.failEndPanelPrefab); // 假设失败结算界面的预制体为 failEndPanelPrefab
            this.node.addChild(endPanel); // 将失败结算界面添加为当前节点的子节点

            // 更新失败结算界面中的 Label 文字
            const label = endPanel.getComponentInChildren(cc.Label); // 假设 Label 文字在失败结算界面的子节点中
            if (label) {
                label.string = "战斗失败!"; // 设置 Label 的文字
            }
        }
    }
}

找张图片创建一个结算面板,并创建一个label显示文字,运行代码

3.gif

本节结束

上一篇 AI也能写游戏啦,用ChatGPT生成cocos creator代码,编写回合制文字rpg游戏(一) - 掘金 (juejin.cn)

下一篇AI也能写游戏啦,用ChatGPT生成cocos creator代码,编写回合制文字rpg游戏(三) - 掘金 (juejin.cn)