大家好,我是你们的InsCode老师红帽子先生,今天我将继续带领大家感受AI游戏开发的神奇之旅,希望在这一系列的游戏开发课程中,能够让大家认识到InsCode AI编程的魅力。
在电子游戏的发展历程中,《飞机大战》类游戏一直占有一席之地,相信许多小伙伴还记得小时候在街机厅玩《雷电》的场景,紧张刺激的对战节奏、丰富的子弹变化以及双人配合的操作体验至今仍难以令人忘怀。
今天我们就学习使用InsCode AI IDE开发一款飞机大战游戏,向儿时的飞战情怀致敬!
一、基本框架
首先我们创建好工程“AirCraft”,然后清空main.py中代码,按下CTRL+J,输入提示词:“开发一个pygame飞机大战游戏”,回车后很快就可以生成出一个竖屏的飞机大战游戏的框架代码。我们运行一下,这时有可能会提示图片资源缺失的错误。
我们查看一下代码,可以看到代码中有引用图片的部分:
# 加载飞机图像
player_img = pygame.image.load("player.png")
...
# 子弹设置
bullet_img = pygame.image.load("bullet.png")
...
# 敌机设置
enemy_img = pygame.image.load("enemy.png")
...
“要想游戏好,图片少不了”,老师早已经准备了几张图片,我们把它们整理好放置到当前游戏工程目录中。
再次运行,就可以看到游戏画面了:
二、完善画面
目前还缺少背景图,我们按下CTRL+A全选代码,然后按下CTRL+J弹出AI对话框,在对话框里,我们输入:“设置bg.png为背景图,并让屏幕循环的向上缓慢滚屏。”
加入这一条修改需求后,当我们再次运行程序时,可以立刻通过背景的滚屏动画感受到飞机在向前飞行,这中广泛被电子游戏使用的技术我们只通过一句话就完成了,太酷啦!
不过当前游戏还没有精英BOSS,我们准备了图片boss.png和bossbullet.png,下面我们再次全选代码,通过CTRL+J对代码进行修改:“设置敌机为两种,一种为普通敌机,另一种为精英敌机,普通敌机使用enemy.png,精英敌机使用boss.png,设置精英敌机向下发射向扇形方向快速运动的子弹,子弹图片用bossbullet.png。”
经过一番修改后,我们再次运行后,就可以看到精英BOSS在下落过程中发射散弹。但是我们对这个扇形的简单描述与AI的理解还是存在偏差的,有时AI会简单的向右边扇形发射散弹。
遇到这种不太好描述的地方,我们可以直接对代码做出修改:
# 更新敌机位置
for enemy in enemies[:]:
enemy_rect, enemy_type = enemy
enemy_rect.y += enemy_speed
if enemy_type == 'elite' and random.randint(1, 100) == 1: # 精英敌机有概率发射子弹
#在这里给扇形的取值范围加上90度,等于顺时针转90度,就变成向下方扇形发射字弹了
for angle in range(90-elite_bullet_angle_range // 2, 90+elite_bullet_angle_range // 2 + 1, 10):
#for angle in range(-elite_bullet_angle_range // 2, elite_bullet_angle_range // 2 + 1, 10):
bullet_dx = elite_bullet_speed * math.cos(math.radians(angle))
bullet_dy = elite_bullet_speed * math.sin(math.radians(angle))
elite_bullet_rect = pygame.Rect(enemy_rect.centerx, enemy_rect.bottom, 10, 20)
elite_bullets.append((elite_bullet_rect, bullet_dx, bullet_dy))
if enemy_rect.top > screen_height:
enemies.remove(enemy)
经过我们对扇形区域向顺时针转90度的修改,再次运行就可以看到BOSS发射子弹时扇形变为向下了。
击中飞机时只是让飞机消失,太没有爽快感了,下面我们尝试着加入飞机的爆炸动画吧。在游戏开发中,常用序列帧来表现动画,所以我们也准备了一套序列帧图片,将它们命名为explode_0.png~explode_7.png,放置在effect文件夹下。
对代码加入修改需求:“设置子玩家飞机或敌机死亡时时爆炸的动画,播放effect目录下的序列帧图片explode_0.png到explode_7.png,设置爆炸动画播放完后,敌机或玩家飞机消失。”这样就可以加入序列帧爆炸动画了。
三、音乐与效果
处理完图片部分,下面我们来加入音乐音效了,我们准备了bg.mp3为背景音乐,attack.wav为击中飞机时的音效,bomb.wav为我方飞机或BOSS飞机爆炸时的音效。
再次对代码输入需求:“设置bg.mp3为背景音乐并循环播放,设置attack.wav为子弹击中飞机时的音效,设置bomb.wav为BOSS飞机和玩家飞机爆炸时的音效。”在这一大段需求输入后,游戏马上就有了动感十足的音乐音效!
四、难度与分数
开发到这里,游戏的骨架都比较完整了,但这时还有一些策划上的小问题,比如现在玩家飞机碰到敌机后不会GameOver,敌方飞机都是一击即亡,而且子弹击中飞机后还能继续向前击中后面的飞机,另外还缺少积分系统。
我们可以对这部分加入一段完整的需求,“修改代码,设置玩家按下按键时每秒最多发射2个子弹,子弹击中飞机后消失。设置每个BOSS飞机有一个100像素宽,10像素高的红色血条,初始状态为10格血,子弹击中1次减1格血更新血条,血条数量减为零后再爆炸,加入积分显示,击毁一个普通飞机加1分,击毁一个BOSS飞机加10分,在左上角用红色显示当前积分,让玩家飞机碰到敌机或被BOSS飞机子弹击中后显示游戏结束和积分结果,游戏结束时按下空格键重新开始。”。
五、玩法扩展
玩家子弹还显得有点单调,我们在这里给大家做一些扩展训练,大家看一下如何才能让游戏中加入两个技能图标,在击毁BOSS时随机从屏幕上部下落,第一个子弹技能可以让子弹按照100像素为圆心的圆环旋转着前进,第二个技能可以让子弹向上扇形同时发射5个子弹。
另外我们改一下操作,支持让A和D键也能左右移动,用鼠标左键接下时发射子弹,松开时停止发射子弹。相信大家经过前面的学习,已经能够知道让AI去修改和完善代码逻辑。
经过这么一顿操作,一个疯狂的《飞机大战》游戏就完成啦!
六、注意事项
在开发游戏的过程中,有些细节需要耐心修改推荐语才能成功,比如血条的显示,或者子弹的方向计算等,有时候AI理解不够精确,还是需要大家加强Python的代码理解和修改能力,如果直接看代码感觉有难度的小伙伴,可以全选代码后在下方可选项按钮中为代码添加注释。
最后、感兴趣的小伙伴可以加用户群、和红帽子先生一起讨论游戏开发啦!