通义灵码实操—飞机大战游戏
有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中,你不仅可以实现这个想法,而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界,以一种简洁、高效且具有创造性的方式,一步步构建起一个完全属于你自己的个性化小游戏。这将开启你对游戏开发深远理解的大门,让你享受到创作的乐趣和编程带来的无限可能。
实验步骤
步骤一:下载安装登录通义灵码
参考安装教程https://tongyi.aliyun.com/lingma
导入素材:下载地址链接如下
下载地址
打开vscode、新建一个python文件
登录左侧工具栏里的通义灵码
在上图红框中输入提示词
● 在通义灵码插件中输入prompt:生成飞机大战游戏完整代码,用pygame运行,记得不是简单的游戏框架代码哦,而是完整代码,利用飞机大战文件夹中的游戏素材:bullte.svg(子弹图)、enemy.svg(敌机图)、explosion.svg(爆炸素材图)、player.svg(我方机图)、sound.wav(子弹声音)
● 生成完成后点击“插入”到python文件中
步骤二:实验源码
import pygame
import sys
from random import randint# 初始化 Pygame
pygame.init()# 设置屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("飞机大战")# 加载图像
player_image = pygame.image.load('images/player.svg')
enemy_image = pygame.image.load('images/enemy.svg')
bullet_image = pygame.image.load('images/bullet.svg')
explosion_image = pygame.image.load('images/explosion.svg')
background_image = pygame.image.load('images/background1.png') # 背景图片# 加载声音
shoot_sound = pygame.mixer.Sound('sounds/sound.wav')class Player:def __init__(self):self.image = player_imageself.rect = self.image.get_rect()self.rect.topleft = (screen_width // 2, screen_height - 100)self.speed = 5def move(self, keys):if keys[pygame.K_LEFT] and self.rect.left > 0:self.rect.x -= self.speedif keys[pygame.K_RIGHT] and self.rect.right < screen_width:self.rect.x += self.speedif keys[pygame.K_UP] and self.rect.top > 0:self.rect.y -= self.speedif keys[pygame.K_DOWN] and self.rect.bottom < screen_height:self.rect.y += self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Enemy:def __init__(self):self.image = enemy_imageself.rect = self.image.get_rect()self.rect.topleft = (randint(0, screen_width - self.rect.width), -self.rect.height)self.speed = 2def move(self):self.rect.y += self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Bullet:def __init__(self, x, y):self.image = bullet_imageself.rect = self.image.get_rect()self.rect.centerx = xself.rect.centery = yself.speed = 10def move(self):self.rect.y -= self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Explosion:def __init__(self, x, y):self.image = explosion_imageself.rect = self.image.get_rect()self.rect.centerx = xself.rect.centery = yself.duration = 50 # 爆炸持续时间(毫秒)def draw(self, surface):surface.blit(self.image, self.rect)def update(self):self.duration -= 1return self.duration <= 0def main():clock = pygame.time.Clock()player = Player()enemies = []bullets = []explosions = []enemy_spawn_time = 0score = 0 # 添加分数变量font = pygame.font.Font(None, 36) # 创建字体对象while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:bullet = Bullet(player.rect.centerx, player.rect.top)bullets.append(bullet)shoot_sound.play() # 播放射击声音keys = pygame.key.get_pressed()player.move(keys)# 敌人生成current_time = pygame.time.get_ticks()if current_time - enemy_spawn_time > 1000:enemy = Enemy()enemies.append(enemy)enemy_spawn_time = current_time# 更新敌人位置for enemy in enemies:enemy.move()if enemy.rect.top > screen_height:enemies.remove(enemy)# 更新子弹位置for bullet in bullets:bullet.move()if bullet.rect.bottom < 0:bullets.remove(bullet)# 检测碰撞for enemy in enemies[:]:if player.rect.colliderect(enemy.rect):print("Game Over!")pygame.quit()sys.exit()for bullet in bullets[:]:if bullet.rect.colliderect(enemy.rect):enemies.remove(enemy)bullets.remove(bullet)explosion = Explosion(enemy.rect.centerx, enemy.rect.centery)explosions.append(explosion)score += 10 # 增加分数# 更新爆炸效果for explosion in explosions[:]:if explosion.update():explosions.remove(explosion)# 绘制背景图片screen.blit(background_image, (0, 0))# 绘制玩家player.draw(screen)# 绘制敌人for enemy in enemies:enemy.draw(screen)# 绘制子弹for bullet in bullets:bullet.draw(screen)# 绘制爆炸效果for explosion in explosions:explosion.draw(screen)# 绘制分数score_text = font.render(f"Score: {score}", True, (255, 255, 255))screen.blit(score_text, (10, 10))pygame.display.flip()clock.tick(60)if __name__ == "__main__":main()
代码解析与功能说明
-
初始化与设置
pygame.init()
:初始化 Pygame。screen
:创建一个 800x600 的游戏窗口,并设置标题为“飞机大战”。player_image
,enemy_image
,bullet_image
,explosion_image
,background_image
:加载玩家、敌人、子弹、爆炸和背景图像。shoot_sound
:加载射击声音。
-
类定义
-
Player 类
:
__init__
:初始化玩家的位置和速度。move
:根据按键移动玩家。draw
:在屏幕上绘制玩家。
-
Enemy 类
:
__init__
:初始化敌人的位置和速度。move
:向下移动敌人。draw
:在屏幕上绘制敌人。
-
Bullet 类
:
__init__
:初始化子弹的位置和速度。move
:向上移动子弹。draw
:在屏幕上绘制子弹。
-
Explosion 类
:
__init__
:初始化爆炸的位置和持续时间。draw
:在屏幕上绘制爆炸。update
:更新爆炸的持续时间,如果持续时间结束则返回True
。
-
-
主循环
clock
:创建一个时钟对象来控制帧率。player
:创建一个玩家对象。enemies
,bullets
,explosions
:分别存储敌人、子弹和爆炸的列表。enemy_spawn_time
:记录上一次生成敌人的时刻。score
:记录玩家的得分。font
:创建一个字体对象用于显示分数。
-
事件处理
- 处理退出事件和射击事件。
- 根据按键移动玩家。
-
敌人生成
- 每隔 1 秒生成一个新的敌人。
-
更新位置
- 更新敌人和子弹的位置。
- 如果敌人或子弹超出屏幕范围,则移除它们。
-
碰撞检测
- 检测玩家与敌人的碰撞,如果碰撞则游戏结束。
- 检测子弹与敌人的碰撞,如果碰撞则移除敌人和子弹,并生成爆炸效果,增加分数。
-
绘制
- 绘制背景、玩家、敌人、子弹和爆炸效果。
- 绘制分数。
-
更新屏幕
- 使用
pygame.display.flip()
更新屏幕。 - 控制帧率为 60 帧/秒。
- 使用
运行说明
- 确保所有图像文件(
player.svg
,enemy.svg
,bullet.svg
,explosion.svg
,background1.png
)和声音文件(sound.wav
)存在于images
和sounds
文件夹中。 - 运行
main()
函数即可启动游戏。 - 使用方向键控制玩家移动,空格键发射子弹。
- 游戏目标是击毁尽可能多的敌人,避免被敌人撞到。
运行效果
欢迎大家体验、试用阿里云百炼大模型和阿里云服务产品,链接如下:
阿里云百炼大模型
https://bailian.console.aliyun.com/
通义灵码_智能编码助手面向用户上线个人和企业版产品
https://tongyi.aliyun.com/lingma/pricing?userCode=jl9als0w
云工开物_阿里云高校计划助力高校科研与教育加速。
https://university.aliyun.com/mobile?userCode=jl9als0w
无影云电脑个人版简单易用、安全高效的云上桌面服务
https://www.aliyun.com/product/wuying/gws/personal_edition?userCode=jl9als0w
云服务器ECS省钱攻略五种权益,限时发放,不容错过
https://www.aliyun.com/daily-act/ecs/ecs_trial_benefits?userCode=jl9als0w