通义灵码实操—飞机大战游戏
通义灵码实操—飞机大战游戏有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中,你不仅可以实现这个想法,而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界,以一种简便、高效且具有创造性的方式,一步步构建起一个完全属于你自己的个性化小游戏。这将开启你对游戏开发深远明白的大门,让你享受到创作的乐趣和编程带来的无穷大概。
实验步调
步调一:下载安装登录通义灵码
参考安装教程https://tongyi.aliyun.com/lingma
导入素材:下载地址链接如下
下载地址
打开vscode、新建一个python文件
https://i-blog.csdnimg.cn/direct/c3c26ddc852947a480f336146cd181cf.png#pic_center
登录左侧工具栏里的通义灵码
https://i-blog.csdnimg.cn/direct/6a7a003f53a94467983c59a1e36328f3.png#pic_center
在上图红框中输入提示词
● 在通义灵码插件中输入prompt:生成飞机大战游戏完整代码,用pygame运行,记得不是简朴的游戏框架代码哦,而是完整代码,利用飞机大战文件夹中的游戏素材:bullte.svg(子弹图)、enemy.svg(敌机图)、explosion.svg(爆炸素材图)、player.svg(我方机图)、sound.wav(子弹声音)
● 生成完成后点击“插入”到python文件中
https://i-blog.csdnimg.cn/direct/babb8fca7cba462f941532167c8cbc1c.png#pic_center
步调二:实验源码
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_image
self.rect = self.image.get_rect()
self.rect.topleft = (screen_width // 2, screen_height - 100)
self.speed = 5
def move(self, keys):
if keys and self.rect.left > 0:
self.rect.x -= self.speed
if keys and self.rect.right < screen_width:
self.rect.x += self.speed
if keys and self.rect.top > 0:
self.rect.y -= self.speed
if keys and self.rect.bottom < screen_height:
self.rect.y += self.speed
def draw(self, surface):
surface.blit(self.image, self.rect)
class Enemy:
def __init__(self):
self.image = enemy_image
self.rect = self.image.get_rect()
self.rect.topleft = (randint(0, screen_width - self.rect.width), -self.rect.height)
self.speed = 2
def move(self):
self.rect.y += self.speed
def draw(self, surface):
surface.blit(self.image, self.rect)
class Bullet:
def __init__(self, x, y):
self.image = bullet_image
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.centery = y
self.speed = 10
def move(self):
self.rect.y -= self.speed
def draw(self, surface):
surface.blit(self.image, self.rect)
class Explosion:
def __init__(self, x, y):
self.image = explosion_image
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.centery = y
self.duration = 50# 爆炸持续时间(毫秒)
def draw(self, surface):
surface.blit(self.image, self.rect)
def update(self):
self.duration -= 1
return self.duration <= 0
def main():
clock = pygame.time.Clock()
player = Player()
enemies = []
bullets = []
explosions = []
enemy_spawn_time = 0
score = 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://i-blog.csdnimg.cn/direct/cdad3b56bd08450eadc7763fcead8001.gif#pic_center
欢迎各人体验、试用阿里云百炼大模型和阿里云服务产品,链接如下:
阿里云百炼大模型
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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]