圆咕噜咕噜 发表于 2024-11-3 16:11:27

通义灵码实操—飞机大战游戏

通义灵码实操—飞机大战游戏

有没有想象过自己独立编写一个有趣的小游戏。在本实践课程中,你不仅可以实现这个想法,而且还将得到通义灵码智能编程助手的支持与指导。我们将携手步入编程的神奇世界,以一种简便、高效且具有创造性的方式,一步步构建起一个完全属于你自己的个性化小游戏。这将开启你对游戏开发深远明白的大门,让你享受到创作的乐趣和编程带来的无穷大概。
实验步调

步调一:下载安装登录通义灵码
参考安装教程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]
查看完整版本: 通义灵码实操—飞机大战游戏