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

简介: 在这个实践课程中,你将独立编写一个有趣的小游戏——“飞机大战”。借助通义灵码智能编程助手,你将从零开始,逐步构建一个个性化的游戏,体验编程的创造力和乐趣。通过学习 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

相关文章
|
6月前
|
人工智能 自然语言处理 JavaScript
通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
通义灵码基于自然语言需求,快速生成完整Vue组件。例如,用Vue 2和JavaScript实现贪吃蛇游戏:包含键盘控制、得分系统、游戏结束判定与Canvas动态渲染。AI生成的代码符合规范,支持响应式数据与事件监听,还能进阶优化(如增加启停按钮、速度随分数提升)。传统需1小时的工作量,使用通义灵码仅10分钟完成,大幅提升开发效率。操作简单:安装插件、输入需求、运行项目即可实现功能。
370 4
 通义灵码2.5实战评测:Vue.js贪吃蛇游戏一键生成
|
10月前
|
存储 人工智能 运维
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
554 48
【01】做一个精美的打飞机小游戏,浅尝阿里云通义灵码python小游戏开发AI编程-之飞机大战小游戏上手实践-优雅草央千澈-用ai开发小游戏尝试-分享源代码和游戏包
|
8月前
|
人工智能 开发工具 C++
利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例
本文介绍了如何利用阿里云通义灵码AI程序员的Qwen2.5-Max模型,在VS Code中一键生成扫雷小游戏。通过安装通义灵码插件并配置模型,输入指令即可自动生成包含游戏逻辑与UI设计的Python代码。生成的游戏支持难度选择,运行稳定无Bug。实践表明,AI工具显著提升开发效率,但人机协作仍是未来趋势。建议开发者积极拥抱新技术,同时不断提升自身技能以适应行业发展需求。
22576 18
利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例
|
人工智能 自然语言处理 IDE
基于通义灵码完成 Hello World 上手实操
通过本实践课程,你将在通义灵码智能编码助手的能力下,智能开发一个web服务程序显示Hello World。本实践旨在了解编码助手帮你快速开发0到1的可运行程序,感受AI帮你提效的体验,感受通义灵码文生代码、代码解释、智能问答等功能。
1177 96
|
Python 人工智能
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
289 1
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
|
1月前
|
人工智能 自然语言处理 前端开发
最佳实践2:用通义灵码以自然语言交互实现 AI 高考志愿填报系统
本项目旨在通过自然语言交互,结合通义千问AI模型,构建一个智能高考志愿填报系统。利用Vue3与Python,实现信息采集、AI推荐、专业详情展示及数据存储功能,支持响应式设计与Supabase数据库集成,助力考生精准择校选专业。(239字)
194 12
|
5月前
|
人工智能 IDE 定位技术
通义灵码 AI IDE 上线,第一时间测评体验
通义灵码 AI IDE 重磅上线,开启智能编程新纪元!无需插件,开箱即用,依托通义千问大模型,实现高效、智能的编程体验。支持 MCP 工具链,可快速调用多种服务(如12306余票查询、高德地图标注等),大幅提升开发效率。结合 Qwen3 强大的 Agent 能力,开发者可通过自然语言快速构建功能,如智能选票系统、地图可视化页面等。行间代码预测、AI 规则定制、记忆能力等功能,让 AI 更懂你的编码习惯。Lingma IDE 不仅是工具,更是开发者身边的智能助手,助力 AI 编程落地实践。立即下载体验,感受未来编程的魅力!
765 17
|
3月前
|
人工智能 IDE 开发工具
通义灵码 AI IDE使用体验(3)项目优化及bug修复
本文介绍了使用通义灵码 AI IDE进行项目重构与优化的全过程,涵盖页面调整、UI更新、功能修复等内容,并展示了多次优化后的成果与仍存在的问题。
342 0
|
人工智能 自然语言处理 IDE
通义灵码 AI IDE使用体验(1)项目初创
通义灵码 AI IDE上线,作为AI IDE的重度使用者怎能错过?本文详细体验了从安装到项目开发的全过程,界面友好,操作简便,支持智能问答、文件编辑、智能体三种模式。通过智能体方式快速开发项目,自动规划功能、管理环境,虽在复杂项目中仍有提升空间,但整体体验流畅,适合开发者尝试。
812 0
|
3月前
|
人工智能 IDE 开发工具
通义灵码 AI IDE使用体验(2)项目重构
本文介绍了如何使用灵码IDE将一个简单的CS架构项目重构为BS架构,涉及项目依赖修改、功能迁移、自动开发Web页面等内容,验证了灵码在复杂开发任务中的能力。尽管界面美观度不足,但核心功能已实现。
410 66