码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 关于制作一个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. # 设置定时器,每隔1秒触发ID为USEREVENT + 1的事件
    2. pygame.time.set_timer(USEREVENT + 1, 1)

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

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

    1.2.3 定时器事件的监听:

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

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

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

    2.英雄飞机的设计

    2.1英雄飞机的出场:

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

    2.1.1外观与动画:  

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

     

    1. # 设置颜色
    2. WHITE = (255, 255, 255)
    3. RED = (255, 0, 0)
    4. GREEN = (0, 255, 0)
    5. BLUE = (0, 0, 255)

    2.1.2 初始位置:

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

     

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

    2.1.3控制方式:

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

     

     2.1.4移动边界:

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

     

    1. def update(self):
    2. self.rect.x+=self.speed
    3. self.rect.y+=self.upanddown
    4. #控制飞机不能离开屏幕
    5. if self.rect.x<0:
    6. self.rect.x=0
    7. elif self.rect.x>480-self.rect.width:
    8. self.rect.x=480-self.rect.width
    9. if self.rect.y<0:
    10. self.rect.y=0
    11. elif self.rect.y>700-self.rect.height:
    12. self.rect.y=700-self.rect.height

     

    2.1.5 射击与武器系统

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

     

    2.1.6 碰撞检测:

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

     

    1. # 碰撞检测
    2. def __check_collide(self):
    3. # 子弹与敌机碰撞
    4. ret1 = pygame.sprite.groupcollide(self.hero.bullet_group,
    5. self.enemy_group, True, True)
    6. if ret1:
    7. print(ret1)
    8. # 敌机和英雄碰撞
    9. ret2 = pygame.sprite.groupcollide(self.enemy_group,
    10. self.hero_group, True, True)
    11. if len(ret2):
    12. pygame.quit()

     2.1.7生命值与死亡判定

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

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

  • 相关阅读:
    向量的运算
    论文阅读”Graph attention networks“(ICLR2018)
    Golang recover
    【JavaWeb】之Tomcat介绍、安装与使用
    安防监控/视频汇聚/视频云存储EasyCVR平台v3.3版本AI智能分析网关V3接入教程2.0
    简述ceph文件储存系统
    New的原理
    Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250
    悬镜云鲨SaaS三大核心能力 构筑下一代积极防御体系
    Python_面向对象
  • 原文地址:https://blog.csdn.net/yz_518/article/details/136428159
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号