关于制作一个Python小游戏(三)

目录

前言:

在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现

1.敌机的设计:

1.1敌机出场的实现:

1.1.1游戏启动后,每个一秒钟出现一架敌方飞机

1.1.2每架敌机向屏幕下方飞行,飞行速度随机

1.1.3每架敌机出现的水平位置不同(0, 480-敌机宽度)

1.1.4当敌机从屏幕下方飞出,不再飞回屏幕

1.2.定时器:

1..2.1而我们常用pygame.time.set_timer()来定义定时器

1.2.2用set_timer去创建一个事件,在游戏循环中监听这个事件,然后做出响应(每隔一秒钟,创建敌机)

1.2.3 定时器事件的监听:

2.英雄飞机的设计

2.1英雄飞机的出场:

2.1.1外观与动画: 

2.1.2 初始位置:

2.1.3控制方式:

 2.1.4移动边界:

2.1.5 射击与武器系统

2.1.6 碰撞检测:

 2.1.7生命值与死亡判定

结语:今天我先告诉大家关于如何设计敌机,和英雄飞机的前期工作,到后面几篇开始我们就会今日到关于实际代码的操作和运行,以上的内容都是来自于个人学习的成果,也欢迎大家给我提一点建议,或者给我的文章哪里还有问题,也欢迎大家斧正


前言:

在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现

1.敌机的设计:

1.1敌机出场的实现:

首先我们先明确一下需求,这是我们想要敌机达到的效果

1.1.1游戏启动后,每个一秒钟出现一架敌方飞机

1.1.2每架敌机向屏幕下方飞行,飞行速度随机

1.1.3每架敌机出现的水平位置不同(0, 480-敌机宽度)

1.1.4当敌机从屏幕下方飞出,不再飞回屏幕

1.2.定时器:

每隔一段时间,去执行一些代码

1..2.1而我们常用pygame.time.set_timer()来定义定时器

# 设置定时器,每隔1秒触发ID为USEREVENT + 1的事件  
pygame.time.set_timer(USEREVENT + 1, 1) 

1.2.2用set_timer去创建一个事件,在游戏循环中监听这个事件,然后做出响应(每隔一秒钟,创建敌机)

# 设置定时器事件,每隔1000毫秒(1秒)触发一次 
ENEMY_CREATE_EVENT = pygame.USEREVENT + 1  
pygame.time.set_timer(ENEMY_CREATE_EVENT, 1000)  

1.2.3 定时器事件的监听:

pygame中,定时器事件是通过pygame.event.get()函数来监听的,就像监听其他任何事件一样。当定时器到达设定的时间间隔时,它会将一个自定义事件(在这个例子中是ENEMY_CREATE_EVENT)添加到事件队列中。然后,你可以在游戏的主循环中遍历这个事件队列,检查是否有定时器事件被触发,并相应地执行代码 

# 游戏主循环  
running = True  
while running:  # 处理事件队列  for event in pygame.event.get():  if event.type == pygame.QUIT:  running = False  # 检查定时器事件  elif event.type == ENEMY_CREATE_EVENT:  # 创建敌机并添加到列表中  enemies.append(Enemy())  

这里先讲到敌机的设计,接下来就关于英雄飞机,玩家的飞机了

2.英雄飞机的设计

2.1英雄飞机的出场:

先设计好对英雄飞机的操作要求:

2.1.1外观与动画:  

  • 设计一个独特且符合游戏风格的飞机模型。

 

# 设置颜色  
WHITE = (255, 255, 255)  
RED = (255, 0, 0)  
GREEN = (0, 255, 0)  
BLUE = (0, 0, 255)  

2.1.2 初始位置

  • 确定英雄飞机在游戏屏幕上的初始出现位置,通常是屏幕底部中央或稍偏左/右。
  • 设置飞机的初始速度、方向和生命值。

 

  def __init__(self):  # 通过调用函数来实现print('游戏初始化')# 1要创建游戏窗口self.screen = pygame.display.set_mode((480, 700)

2.1.3控制方式

  • 使用键盘方向键或←→↑↓键来控制飞机的上下左右移动。
  • 可以添加特殊按键来控制特殊技能或武器的发射(如鼠标右键发射子弹)。
 # 事件监听def __event_handler(self):# 获取按键keypressed = pygame.key.get_pressed()if keypressed[pygame.K_RIGHT]:  # 右键self.hero.speed = 2  # 将飞机的速度改为2elif keypressed[pygame.K_LEFT]:  # 左键self.hero.speed = -2elif keypressed[pygame.K_UP]:  # 上键self.hero.upanddown = -2elif keypressed[pygame.K_DOWN]:  # 下键self.hero.upanddown = 2

 

 2.1.4移动边界

  • 设置游戏屏幕的边界,确保飞机不会移动到屏幕之外。
  • 当飞机触及屏幕边缘时,应平滑地停止移动或反弹。

 

  def update(self):self.rect.x+=self.speedself.rect.y+=self.upanddown#控制飞机不能离开屏幕if self.rect.x<0:self.rect.x=0elif self.rect.x>480-self.rect.width:self.rect.x=480-self.rect.widthif self.rect.y<0:self.rect.y=0elif self.rect.y>700-self.rect.height:self.rect.y=700-self.rect.height

 

2.1.5 射击与武器系统

  • 设计飞机的射击方式,如连续射击、蓄力射击或特殊技能射击。
  • 确定子弹的速度、伤害值和射击频率。
  • 可以为飞机添加多种武器或升级系统,以增强其攻击力。。
#子弹类
class Bullet(GameSprites):#调用父类方法,设置图片和初始速度def __init__(self):super().__init__('images/bullet1.png',-2)def update(self):#调用父类方法,让子弹沿垂直方向飞行super().update()#飞出屏幕就死掉if self.rect.y<0-self.rect.height:self.kill()#KILL仅仅是把他从精灵组中删除def __del__(self):#直接消除对象,还是内置函数print('子弹被销毁')

 

2.1.6 碰撞检测

  • 实现飞机与敌机或障碍物之间的碰撞检测逻辑。
  • 当发生碰撞时,根据碰撞对象的类型(敌机、障碍物等)执行相应的动作(如减少生命值、触发爆炸效果等)。

 

  # 碰撞检测def __check_collide(self):# 子弹与敌机碰撞ret1 = pygame.sprite.groupcollide(self.hero.bullet_group,self.enemy_group, True, True)if ret1:print(ret1)# 敌机和英雄碰撞ret2 = pygame.sprite.groupcollide(self.enemy_group,self.hero_group, True, True)if len(ret2):pygame.quit()

 2.1.7生命值与死亡判定

  • 设置飞机的初始生命值以及受到伤害时生命值的减少方式。
  • 当生命值耗尽时,触发飞机的死亡动画并结束游戏或重新开始

结语:今天我先告诉大家关于如何设计敌机,和英雄飞机的前期工作,到后面几篇开始我们就会今日到关于实际代码的操作和运行,以上的内容都是来自于个人学习的成果,也欢迎大家给我提一点建议,或者给我的文章哪里还有问题,也欢迎大家斧正

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

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

相关文章

九章云极DataCanvas公司出席WBBA 2024宽带发展大会

2024年2月27日&#xff0c;由全球云网宽带产业协会&#xff08;World Broadband Association, WBBA&#xff09;主办的全球宽带产业盛会——宽带发展大会&#xff08;Broadband Development Congress, BDC&#xff09;&#xff0c;与全球云网宽带产业合作伙伴相约巴塞罗那。九章…

【爬虫】单首音乐的爬取(附源码)

以某狗音乐为例 import requests import re import time import hashlibdef GetResponse(url):# 模拟浏览器headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0}# 发送请求…

Milvus 向量数据库实践 - 1

假定你已经安装了docker、docker-compose 环境 参考的文档如下&#xff1a; Milvus技术探究 - 知乎 MilvusClient() - Pymilvus v2.3.x for Milvus 一文带你入门向量数据库milvus 一、在docker上安装单机模式milvus数据库 1、 进入milvus官网&#xff1a; Install Milvus Stand…

LeetCode:1976. 到达目的地的方案数(spfa + 记忆化 Java)

目录 1976. 到达目的地的方案数 原题链接 题目描述&#xff1a; 实现代码与解析&#xff1a; spfa 记忆化 原理思路&#xff1a; 1976. 到达目的地的方案数 原题链接 1976. 到达目的地的方案数 题目描述&#xff1a; 你在一个城市里&#xff0c;城市由 n 个路口组成&a…

html 文字滚动

<marquee> 标签 创建文字滚动的标签 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>wzgd</title></head><body><marquee direction"left" height"30" width"600&q…

Qt Creator配置MSVC编译环境、调试环境

在windows上开发&#xff0c;一般使用Qt Creator自带mingw编译器&#xff0c;编译和调试都很方便&#xff0c;安装Qt时勾选后&#xff0c;自动配置完毕。 但是有时候我们需要使用MSVC的编译器&#xff0c;这个时候我们没法直接使用&#xff0c;需要配置环境才能使用&#xff0…

十秒学会Ubuntu命令行:从入门到进阶

一、引言 在使用Ubuntu操作系统时&#xff0c;命令行界面&#xff08;CLI&#xff09;是不可或缺的一部分。对于初学者来说&#xff0c;掌握基本的命令行操作可以帮助他们更高效地管理系统和软件。 本文将介绍一些常见的Ubuntu命令以及如何解决与命令行相关的问题。 目录 一、…

基于umdf2的驱动程序

源码下载&#xff1a;https://download.csdn.net/download/mao0514/88915667 win10 64位系统vs2019wdk inf安装&#xff1a; VOID UMDF2Driver1EvtIoDeviceControl(_In_ WDFQUEUE Queue,_In_ WDFREQUEST Request,_In_ size_t OutputBufferLength,_In_ size_t InputBufferLen…

BUUCTF-Misc-百里挑一

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件&#xff1a; 全是在传图片时候的流量&#xff0c;先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

工业网关、物联网网关与PLC网关是什么?

网关是什么&#xff1f; 网关是一种用于连接不同网络的网络设备&#xff0c;其作用是实现网络之间的通信和数据交换。它负责将一个网络的数据转发到另一个网络&#xff0c;并且可以进行路由、转换和过滤等处理。通常用于连接局域网和广域网之间&#xff0c;可以是硬件设备或者软…

7、Linux-防火墙和配置静态ip

一、防火墙&#xff08;防火墙服务名firewalld&#xff09; 防火墙配置命令&#xff1a;firewall-cmd firewall-cmd --help&#xff1a;防火墙帮助firewall-cmd --state&#xff1a;查看防火墙状态firewall-cmd --zonepublic --list-ports&#xff1a;查看所有打开的端口firew…

html实体字符,已拿offer入职

面试知识点 主要内容包括html&#xff0c;css&#xff0c;前端基础&#xff0c;前端核心&#xff0c;前端进阶&#xff0c;移动端开发&#xff0c;计算机基础&#xff0c;算法与数据结构&#xff0c;设计模式&#xff0c;项目等等。 html 1.浏览器页面有哪三层构成&#xff0c…

ES-ES性能优化

缓存优化&#xff1a; 功能优化&#xff1a; 访问多&#xff1a;热层 访问少&#xff1a;温层 极少访问&#xff1a;第三方

【2024年最新】294地级市-地理相邻矩阵(名称版、行政代码版)

数据为同省下城市之间的相邻矩阵&#xff0c;表示同一省份内各个城市相互之间邻近关系。如果同一省份下两个城市相邻&#xff0c;矩阵中对应的矩阵值为1&#xff0c;否则&#xff0c;矩阵值为0 一、数据介绍 数据名称&#xff1a;地级市-地理相邻矩阵 数据范围&#xff1a;地…

leetcode刷题(javaScript)——二叉树、平衡二叉树相关场景题总结

二叉树的知识点很多&#xff0c;在算法刷题中需要有想象力的数据结构了。主要是用链表存储&#xff0c;没有数组更容易理解。在刷二叉树相关算法时&#xff0c;需要注意以下几点&#xff1a; 掌握二叉树的基本概念&#xff1a;了解二叉树的基本概念&#xff0c;包括二叉树的定义…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…

[JavaWeb学习日记]JSP+Cookie+Filter与登录+CRUD案例

目录 一.JSP 二.EL表达式与JSTL标签 三.Cookie 四.Session 五.Filter 六. 登录CRUD:品牌增删改查案例 Demo一览 1.导包 2.构建包结构 3.创建数据库表tb_brand与user 4.创建实体类 5.mybatis的配置文件和logback配置文件 6.写接口 7.工具类&#xff1a;生成图片与…

信息抽取技术:电商领域的智能化革命与市场策略优化

一、引言 在当今快速发展的互联网电商领域&#xff0c;信息抽取技术的应用已经成为商家优化供应链、降低成本、提高响应速度的关键手段。随着消费者需求的日益多样化和个性化&#xff0c;电子商务平台需要更高效、智能的数据处理能力来应对市场的挑战。从供应商管理到库存优化…

Image Fusion via Vision-Language Model【文献阅读】

阅读目录 文献阅读AbstractIntroduction3. Method3.1. Problem Overview3.2. Fusion via Vision-Language Model 4. Vision-Language Fusion Datasets5. Experiment5.1Infrared and Visible Image Fusion 6. Conclusion个人总结 文献阅读 原文下载&#xff1a;https://arxiv.or…

HTML入门:简单了解 HTML 和浏览器

你好&#xff0c;我是云桃桃。今天来简单了解一下 HTML 以及浏览器。 HTML 是什么&#xff1f; HTML&#xff08;全称&#xff1a;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于创建和呈现网页的结构和内容。 它由一系列标签&#xff08;或称为元素…