首页 > 其他分享 >通义灵码实操—飞机大战游戏

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

时间:2024-11-02 13:15:48浏览次数:6  
标签:__ enemy 通义 image 实操 灵码 self rect pygame

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

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

实验步骤

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

参考安装教程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_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() 函数即可启动游戏。
  • 使用方向键控制玩家移动,空格键发射子弹。
  • 游戏目标是击毁尽可能多的敌人,避免被敌人撞到。

运行效果

在这里插入图片描述

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

阿里云百炼大模型

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

标签:__,enemy,通义,image,实操,灵码,self,rect,pygame
From: https://blog.csdn.net/weixin_41905135/article/details/143440250

相关文章

  • python实操案例——小白篇
    目录案例1:简单计算器详细步骤代码示例说明案例2:判断奇偶数并校验输入详细步骤代码示例说明案例3:计算列表平均值详细步骤代码示例说明案例4:查找最大值和最小值详细步骤代码示例说明案例5:统计字符串中的字符详细步骤代码示例说明案例6:生成斐波那契数列详细步骤......
  • Zookeeper 学习的一些资料和实操遇到的问题的记录
    主要参考地址:https://www.cnblogs.com/leeSmall/p/9563547.htmlzookeeper安装问题:https://blog.csdn.net/peng2hui1314/article/details/107255142/注意配置文件多余空格问题,会导致启动失败,认真检查注意不要下载错了版本       标准版本(apache-zookeep......
  • 通义灵码知识库问答增强:知识库构建与管理指南
    作者:垚佳、汐遥通义灵码能够结合企业知识库的私域数据,生成贴合企业特点的回答。充分发挥检索增强技术的优势,构建高质量的企业知识数据以及合理的知识库权限管理是必不可少的。本文将为您详细介绍如何构造与管理一个高质量的企业知识库。前提条件适用版本:通义灵码企业标准版、......
  • 项目管理平台实操:项目经理如何快速生成项目报告?(3分钟教程)
    一、项目管理平台与报告生成的关联项目管理平台在项目管理中起着至关重要的作用。它为项目经理提供了一个集中化的管理工具,能够有效地组织和协调项目的各个方面。首先,项目管理平台可以实现对项目任务的全面管理。通过任务清单功能,项目经理可以清晰地了解每个任务的名称、描述、......
  • 项目管理平台实操:项目经理如何设置并监控10个关键项目阶段?
    一、项目管理的关键流程与重要性介绍项目管理需关注的十个关键流程,阐述这些流程对项目成功的重要性。(一)生命周期与方法论的划定项目的生命周期与方法论如同项目的纪律,为项目的发展划定了清晰的界限。生命周期通常由开始、规划、执行/控制、完成等阶段组成,或者由工作的重复周......
  • 使用OpenSSL生成SANs证书实操
    当初:原来的x.509证书,生成就一行代码,非常方便:opensslreq-x509-nodes-days365-newkeyrsa:2048-keyoutkey.pem-outcert.pem然后按照提示输入机构和dns信息即可。 然而:最近在开发一个websocket项目时,需要使用wss协议,在机器A(win7)上调试没问题,在机器B(win10+go1.22.3......
  • 通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
    1.前言我是一位运维工程师,用通义灵码个人版的@workspace和@terminal的能力做快速了解一个工程、查找工程内的实现逻辑,以及执行指令不知道如何写,或者不清楚某个指令的意思,对比之前没有灵码,现在提效了20%,再也不需要“百度一下”或者“谷歌”了,使用的具体流程如下:想象一下,开发同......
  • 基于Pyecharts的数据可视化开发(二)调用通义千问api分析爬虫数据
            上一篇博客做了关于“广州市2023年天气情况”的数据爬取,并保存为.csv文件。下一步是想用生成的.csv文件,直接调用大模型api进行分析,得出结论。通过调研,阿里云的通义千问大模型qwen-long可以实现对文件数据的分析。        通义千问大模型提供了API,可......
  • 水仙花数c语言程序:实操解答
    水仙花数(Narcissisticnumber)是指一个三位数,其各个位上数字的立方和等于该数本身。比如153就是水仙花数,因为\(1^3+5^3+3^3=153\)。以下是一个C语言程序,用于判断一个三位数是否为水仙花数,并输出100到999范围内的所有水仙花数:```c#include<stdio.h>#include<math.h>......
  • 【干货】arima模型python代码实操演练
    以下是用Python实现ARIMA模型的代码。ARIMA(自回归积分滑动平均模型)是一种常用于时间序列数据预测的统计模型。在Python中,可以使用statsmodels库来实现ARIMA模型。安装依赖库如果还没有安装statsmodels和pandas,可以先安装:pipinstallstatsmodelspandas示例代码import......