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

简介: 在这个实践课程中,你将独立编写一个有趣的小游戏——“飞机大战”。借助通义灵码智能编程助手,你将从零开始,逐步构建一个个性化的游戏,体验编程的创造力和乐趣。通过学习 Pygame 库的使用,你不仅能掌握游戏开发的基本技能,还能深入了解游戏逻辑和图形界面的设计。快来加入我们,开启你的编程之旅吧!

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

实验步骤

步骤一:下载安装登录通义灵码

参考安装教程https://tongyi.aliyun.com/lingma

步骤二:实验源码

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[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT] and self.rect.right < screen_width:
            self.rect.x += self.speed
        if keys[pygame.K_UP] and self.rect.top > 0:
            self.rect.y -= self.speed
        if keys[pygame.K_DOWN] 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()

代码解析与功能说明

  1. 初始化与设置

    • pygame.init():初始化 Pygame。
    • screen:创建一个 800x600 的游戏窗口,并设置标题为“飞机大战”。
    • player_image, enemy_image, bullet_image, explosion_image, background_image:加载玩家、敌人、子弹、爆炸和背景图像。
    • shoot_sound:加载射击声音。
  2. 类定义

    • Player 类

      • __init__:初始化玩家的位置和速度。
      • move:根据按键移动玩家。
      • draw:在屏幕上绘制玩家。
    • Enemy 类

      • __init__:初始化敌人的位置和速度。
      • move:向下移动敌人。
      • draw:在屏幕上绘制敌人。
    • Bullet 类

      • __init__:初始化子弹的位置和速度。
      • move:向上移动子弹。
      • draw:在屏幕上绘制子弹。
    • Explosion 类

      • __init__:初始化爆炸的位置和持续时间。
      • draw:在屏幕上绘制爆炸。
      • update:更新爆炸的持续时间,如果持续时间结束则返回 True
  3. 主循环

    • clock:创建一个时钟对象来控制帧率。
    • player:创建一个玩家对象。
    • enemies, bullets, explosions:分别存储敌人、子弹和爆炸的列表。
    • enemy_spawn_time:记录上一次生成敌人的时刻。
    • score:记录玩家的得分。
    • font:创建一个字体对象用于显示分数。
  4. 事件处理

    • 处理退出事件和射击事件。
    • 根据按键移动玩家。
  5. 敌人生成

    • 每隔 1 秒生成一个新的敌人。
  6. 更新位置

    • 更新敌人和子弹的位置。
    • 如果敌人或子弹超出屏幕范围,则移除它们。
  7. 碰撞检测

    • 检测玩家与敌人的碰撞,如果碰撞则游戏结束。
    • 检测子弹与敌人的碰撞,如果碰撞则移除敌人和子弹,并生成爆炸效果,增加分数。
  8. 绘制

    • 绘制背景、玩家、敌人、子弹和爆炸效果。
    • 绘制分数。
  9. 更新屏幕

    • 使用 pygame.display.flip() 更新屏幕。
    • 控制帧率为 60 帧/秒。

运行说明

  • 确保所有图像文件(player.svg, enemy.svg, bullet.svg, explosion.svg, background1.png)和声音文件(sound.wav)存在于 imagessounds 文件夹中。
  • 运行 main() 函数即可启动游戏。
  • 使用方向键控制玩家移动,空格键发射子弹。
  • 游戏目标是击毁尽可能多的敌人,避免被敌人撞到。

运行效果

导出GIF部分1

欢迎大家体验、试用阿里云百炼大模型和阿里云服务产品,链接如下:

阿里云百炼大模型

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

相关文章
|
7月前
|
人工智能 自然语言处理 IDE
基于通义灵码完成 Hello World 上手实操
通过本实践课程,你将在通义灵码智能编码助手的能力下,智能开发一个web服务程序显示Hello World。本实践旨在了解编码助手帮你快速开发0到1的可运行程序,感受AI帮你提效的体验,感受通义灵码文生代码、代码解释、智能问答等功能。
1030 20
|
20天前
|
人工智能
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
|
16天前
|
人工智能 搜索推荐 安全
数百名研发人员用通义灵码,33%新增代码由AI生成,信也科技研发模式焕新升级
目前,信也科技数百名研发人员正在使用通义灵码,周活跃用户占比70%,新增代码中有33%由通义灵码编写,整体研发效率提升了11%,真正实现了数百研发人员开发效能的全面提升。
|
20天前
|
人工智能 数据可视化 Java
通义灵码 AI 盲盒
基于通义灵码的 @workspace 和 @terminal 功能,可显著提升开发效率和体验。@workspace 通过文件导航、代码结构可视化、搜索和注释生成,帮助开发者快速熟悉项目结构和核心逻辑;@terminal 则支持代码片段运行、调试和 AI 代码补全,加速新需求实现和问题排查。这些工具降低了学习成本,简化了开发流程,提升了团队协作效率。
|
27天前
|
人工智能
通义灵码AI编程
首次使用通义灵码AI编程助手,体验了其生成首页、用户界面、内容界面及内容发布界面的功能,整体运行良好,但仍存在一些小问题需解决。
|
1月前
|
人工智能 开发者
通义灵码融入南京大学 AI 编程创新课,让大学生释放想象力
南京大学软件学院副教授钦老师将通义灵码引入了 X 层级课程《人工智能驱动编程》中,通过将通义灵码智能编码实践与传统编程语言教学融合的方式,让学生切身体会人工智能、大模型技术对编程学习方式带来的改变。
|
1月前
|
人工智能 算法 新制造
走进北京科技大学,通义灵码与企业高校共筑 AI 创意课堂
近日,通义灵码有幸参与到一场由伊利集团主办的 AIGC 生态创新大赛路演舞台,与高校专家、企业代表、青年学子共同探讨 AIGC 创意应用,交流企业在数智领域转型、青年开发者科技创新的思路和落地实践。
|
1月前
|
人工智能 自然语言处理 IDE
通义灵码让AI帮你实现自动化编程
通义灵码是由阿里云与通义实验室联合开发的智能编码辅助工具,具备行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答及异常报错排查等功能。该工具支持200多种编程语言,兼容主流IDE,如Visual Studio Code、Visual Studio和JetBrains IDEs。通义灵码在Gartner发布的AI代码助手魔力象限中表现出色,成为唯一进入挑战者象限的中国科技公司。目前,通义灵码下载量已超过470万,每日辅助生成代码超3000万次,被开发者广泛采用。
|
2月前
|
人工智能 开发者
通义灵码一周年数据报:你的 AI 编码助手身份标签是什么?
通义灵码一周年数据报,等你来开AI编码身份标签。
75 3
|
2月前
|
人工智能 运维 自然语言处理
通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
本文介绍了通义灵码个人版中的@workspace和@terminal功能,帮助运维工程师快速理解项目结构、实现需求和执行指令。@workspace通过RAG技术深度感知代码库,支持快速上手新项目和协助实现新需求;@terminal则提供智能指令生成和解释,提升开发效率。
296 5

热门文章

最新文章