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

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

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

实验步骤

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

参考安装教程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_imageself.rect = self.image.get_rect()self.rect.topleft = (screen_width // 2, screen_height - 100)self.speed = 5def move(self, keys):if keys[pygame.K_LEFT] and self.rect.left > 0:self.rect.x -= self.speedif keys[pygame.K_RIGHT] and self.rect.right < screen_width:self.rect.x += self.speedif keys[pygame.K_UP] and self.rect.top > 0:self.rect.y -= self.speedif keys[pygame.K_DOWN] and self.rect.bottom < screen_height:self.rect.y += self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Enemy:def __init__(self):self.image = enemy_imageself.rect = self.image.get_rect()self.rect.topleft = (randint(0, screen_width - self.rect.width), -self.rect.height)self.speed = 2def move(self):self.rect.y += self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Bullet:def __init__(self, x, y):self.image = bullet_imageself.rect = self.image.get_rect()self.rect.centerx = xself.rect.centery = yself.speed = 10def move(self):self.rect.y -= self.speeddef draw(self, surface):surface.blit(self.image, self.rect)class Explosion:def __init__(self, x, y):self.image = explosion_imageself.rect = self.image.get_rect()self.rect.centerx = xself.rect.centery = yself.duration = 50  # 爆炸持续时间(毫秒)def draw(self, surface):surface.blit(self.image, self.rect)def update(self):self.duration -= 1return self.duration <= 0def main():clock = pygame.time.Clock()player = Player()enemies = []bullets = []explosions = []enemy_spawn_time = 0score = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/465199.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lora训练模型 打造个人IP

准备工作 下载秋叶炼丹器整理自己的照片下载底膜 https://rentry.org/lycoris-experiments 实操步骤 解压整合包 lora-scripts,先点击“更新” 训练图片收集 比如要训练一个自己头像的模型&#xff0c;就可以拍一些自己的照片&#xff08;20-50张&#xff0c;最少15张&…

Caffeine 手动策略缓存 put() 方法源码解析

BoundedLocalManualCache put() 方法源码解析 先看一下BoundedLocalManualCache的类图 com.github.benmanes.caffeine.cache.BoundedLocalCache中定义的BoundedLocalManualCache静态内部类。 static class BoundedLocalManualCache<K, V> implements LocalManualCache&…

Spring Boot框架下的教育导师匹配系统

第一章 绪论 1.1 选题背景 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;尽管身边每时每刻都在产生大量信息&#xff0c;这些信息也都会在短时间内得到处理&#xff0c;并迅速传播。因为很多时候&#xff0c;管理层决策需要大量信…

Unity SRP学习笔记(二)

Unity SRP学习笔记&#xff08;二&#xff09; 主要参考&#xff1a; https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考&#xff08;可选&#xff09;&#xff1a; https://tuncle.blog/c…

2024年10款超好用的企业防泄密软件|企业文件加密防泄密必备!

随着信息技术的迅速发展&#xff0c;企业面临的数据泄露风险越来越高。为了保护企业的敏感信息&#xff0c;防止数据泄露&#xff0c;企业防泄密软件应运而生。以下是2024年值得关注的10款企业防泄密软件&#xff0c;帮助企业有效保障数据安全。 1.安秉网盾 安秉网盾防泄密是一…

K8S flannel网络模式对比

K8S flannel网络模式对比 VXLAN 模式Host-GW 模式如何查看 Flannel 的网络模式?如何修改 Flannel 的网络模式?如何修改flannel vxlan端口?Flannel 是一个 Kubernetes 中常用的网络插件,用于在集群中的节点之间提供网络连接。Flannel 提供了多种后端实现方式,vxlan 和 host…

计算机网络:网络层 —— 移动 IP 技术

文章目录 IPv6IPv6 的诞生背景主要优势IPv6引进的主要变化 IPv6数据报的基本首部IPv6数据报首部与IPv4数据报首部的对比 IPv6数据报的拓展首部IPv6地址IPv6地址空间大小IPv6地址的表示方法 IPv6地址的分类从IPv4向IPv6过渡使用双协议栈使用隧道技术 网际控制报文协议 ICMPv6ICM…

大客户营销数字销售实战讲师培训讲师唐兴通专家人工智能大模型销售客户开发AI大数据挑战式销售顾问式销售专业销售向高层销售业绩增长创新

唐兴通 销售增长策略专家、数字销售实战导师 专注帮助企业构建面向AI数字时代新销售体系&#xff0c;擅长运用数字化工具重塑销售流程&#xff0c;提升销售业绩。作为《挑战式销售》译者&#xff0c;将全球顶尖销售理论大师马修狄克逊等理论导入中国销售业界。 核心专长&…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

css中pointer-events:none属性对div里面元素的鼠标事件的影响

文章目录 前倾提要当没有设置属性pointer-events时候结果 当子元素设置了pointer-events: none修改后的代码结果如下所示 当父元素设置了pointer-events: none若两个div同级也就是兄弟级 前倾提要 在gis三维开发的地图组件上放一个背景图片&#xff0c;左右两侧的颜色渐变等&a…

Vue:计算属性

Vue&#xff1a;计算属性 计算属性getset 在模板中&#xff0c;有时候填入的值要依赖于多个属性计算得出。 例如使用姓和名拼出全名&#xff1a; 以上效果可以通过以下代码实现&#xff1a; <div id"root">姓&#xff1a;<input type"text" v-m…

就业市场变革:AI时代,我们将如何评估人才?

内容概要 在这个充满变革的时代&#xff0c;就业市场正被人工智能&#xff08;AI&#xff09;技术深刻改变。随着技术的进步&#xff0c;传统的人才评估方式逐渐显示出其局限性。例如&#xff0c;过去依赖于纸质简历和面试评估的方式在快速变化的环境中难以准确识别真实的人才…

网站504错误出现的原因以及如何修复

504网关超时错误意味着上游服务器未能在规定时间内完成请求&#xff0c;导致无法传递网站内容。当您访问某个网站时&#xff0c;浏览器会向该网站的服务器发出请求。如果请求处理成功&#xff0c;服务器会返回200 OK状态码&#xff1b;但如果服务器响应超时&#xff0c;浏览器可…

学习RocketMQ(记录了个人艰难学习RocketMQ的笔记)

目录 一、部署单点RocketMQ 二、原理篇 三、实操篇 1、引入依赖 2、启动自动装配 3、配置application.yml 4、启动类 5、编写一个统一格式的消息对象 6、生产者 ​编辑 7、定义一个constant 8、多/单个消费者订阅一个主题 1.实现消费者 2.编写接口发送消息 3.接口…

安全关键型嵌入式系统设计模式整理及应用实例

本文提供了对安全关键型嵌入式系统设计模式的全面概述&#xff0c;这些模式旨在提高系统在面临潜在故障时的安全性和可靠性。文中详细介绍了15种设计模式&#xff0c;包括同质冗余&#xff08;HmD&#xff09;、异质冗余&#xff08;HtD&#xff09;、三模冗余&#xff08;TMR&…

京东零售推荐系统可解释能力详解

作者&#xff1a;智能平台 张颖 本文导读 本文将介绍可解释能力在京东零售推荐系统中的应用实践。主要内容包括以下几大部分&#xff1a;推荐系统可解释定义、系统架构、排序可解释、模型可解释、流量可解释。 推荐系统可解释定义 推荐系统可解释的核心包括三部分&#xff0…

java项目之校园周边美食探索及分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园周边美食…

stack和queue --->容器适配器

不支持迭代器&#xff0c;迭代器无法满足他们的性质 边出边判断 实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stack> #include<queue> using namespace std; int main() {stack<int> st;st.push(1);st.push(2);st.push(3);…

vue3动态监听div高度案例

案例场景 场景描述&#xff1a;现在左边的线条长度需要根据右边盒子的高度进行动态变化 实践代码案例 HTML部分 <div v-for"(device, index) in devices" :key"index"><!-- 动态设置 .left-bar 的高度 --><div class"left-bar"…

华为OD机试真题(Python/JS/C/C++)- 考点 - 细节

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。