Scratch3之AI集成 - flappy bird AI版本
scratch3,ai,集成,flappy,bird,版本
·
浏览次数 : 20
小编点评
**AI游戏代码块组成:**
**1. 初始化模型、设置AI角色复制的分身术,启动GameAI程序**
```javascript
// 初始化模型
const model = new Neuroevolution.Model();
// 设置AI角色复制的分身术
model.setSprites(new Neuroevolution.Sprites({
name: "Bird",
images: ["bird_1.png", "bird_2.png", "bird_3.png"],
animations: {
idle: "bird_idle.png",
flying: "bird_flying.png",
crash: "bird_crash.png"
}
}));
// 启动GameAI程序
GameAI.run(model);
```
**2. AI角色使用特征**
```javascript
// 获取当前AI角色的特征
const position = model.getSprite().position;
const angle = model.getSprite().angle;
// 使用特征进行 AI 角色的行为
model.update(position, angle);
```
**3. AI角色使用行为**
```javascript
// 定义一些 AI 角色的行为
const jump = function() {
model.setVelocity({ y: 10 });
};
// 在当前帧中执行行为
model.performAction(jump);
```
**4. 当每轮执行,AI角色牺牲后进行决策记录**
```javascript
// 当AI角色牺牲时,记录该帧的信息
model.addScore(10);
// 当AI角色达到一定的分数时,牺牲
if (model.getScores() >= 100) {
// sacrifice the bird
model.destroy();
}
```
**5. 异步实时计算AI角色是否牺牲(是否撞到管道)**
```javascript
// 获取所有AI角色的坐标
const birdPositions = model.getSprites().map(sprite => sprite.position);
// 过滤掉撞到的管道
const collidingPipes = birdPositions.filter(position => position.x < 0 || position.x > canvas.width);
// 如果有撞到的管道,牺牲AI角色
if (collidingPipes.length > 0) {
model.destroy();
}
```
**6. 当一轮中所有AI角色都牺牲了,优化模型并保存模型,重启GameAI,进行下一代笨鸟的训练**
```javascript
// 当所有AI角色牺牲了,优化模型
model.optimize();
// 保存模型
model.save();
// 重启GameAI程序
GameAI.run(model);
```
正文
AI神秘且有趣,我们一个经典的游戏flappy bird集成AI,实现自训练成长的聪明的笨鸟。先上效果:
初始化的笨鸟拥有分身,每个分身都有自我学习功能,根据自己的移动轨迹和得分情况进行汇总,进行新一代的笨鸟的迭代,基本经过数十轮的训练和迭代,能完成高智慧的笨鸟,自我闯关能力强。
需要了解的AI知识:神经网络进化(Neuroevolution)- 神经网络进化wiki
游戏代码块组成:
1. 初始化模型、设置AI角色复制的分身术,启动GameAI程序
2. AI角色使用特征
3. AI角色使用行为
4. 当每轮执行,AI角色牺牲后进行决策记录
5. 异步实时计算AI角色是否牺牲(是否撞到管道)
6. 当一轮中所有AI角色都牺牲了,优化模型并保存模型,重启GameAI,进行下一代笨鸟的训练
核心代码组成:
Generation.js -- 训练中代数的js文件
Network.js -- 神经网络的js文件
Neuroevolution.js -- 网络进化的js文件
AISprite.js -- AI角色(小鸟)的js文件
与Scratch3之AI集成 - flappy bird AI版本相似的内容: