当前位置: 首页 > news >正文

Python游戏编程之赛车游戏6-4

2 实例化“敌人”汽车类以及对实例进行处理

2.1 实例化“敌人”汽车类

实例化“敌人”汽车类的代码如图4所示。

图4 实例化“敌人”汽车类的代码

2.2 将“敌人”汽车类的实例加入到all_sprites “精灵组”中

将“敌人”汽车类的实例加入到all_sprites “精灵组”中的代码如图5所示。

图5 将“敌人”汽车类的实例加入到“精灵组”中的代码

相关链接1  all_sprites“精灵组”的相关资料,请参考

《Python游戏编程之赛车游戏2》

2.3 将“敌人”汽车类的实例加入到Enemies“精灵组”中

将“敌人”汽车类的实例加入到Enemies“精灵组”中的代码如图6所示。

图6 将“敌人”汽车类的实例加入到Enemies“精灵组”中的代码

与“2.2 将“敌人”汽车类的实例加入到all_sprites “精灵组”中”中的all_sprites “精灵组”不同,Enemies“精灵组”中并不是游戏的所有精灵,而是只包括敌人汽车精灵(后续增加游戏难度时,可以加入多个敌人)。all_sprites “精灵组”主要用于与玩家的碰撞检测。

2.4 显示并移动“敌人”汽车类

因为已经将“敌人”汽车类的实例加入到all_sprites “精灵组”中,此时可以使用《Python游戏编程之赛车游戏2》中图10所示的代码显示并移动“敌人”汽车类,无需再写新的代码。

3 游戏运行效果

游戏运行效果如图7所示。

图7 游戏运行效果

4 完整代码

游戏的完整代码如下所示。

import pygame
import os
from pygame.locals import *
import random

WIDTH = 400
HEIGHT = 600
SPEED = 5
SCORE = 0

pygame.init()
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('赛车游戏')

background = pygame.image.load("AnimatedStreet.png")

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__() 
        self.image = pygame.image.load("Player.png")
        self.rect = self.image.get_rect()
        self.rect.center = (160, 520)
    def move(self):
        pressed_keys = pygame.key.get_pressed()
        
        if self.rect.left > 0:
              if pressed_keys[K_LEFT]:
                  self.rect.move_ip(-5, 0)
        if self.rect.right < WIDTH:        
              if pressed_keys[K_RIGHT]:
                  self.rect.move_ip(5, 0)

class Enemy(pygame.sprite.Sprite):
      def __init__(self):
        super().__init__() 
        self.image = pygame.image.load("Enemy.png")
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(40,WIDTH-40), 0)

      def move(self):
        global SCORE
        self.rect.move_ip(0,SPEED)
        if (self.rect.bottom > HEIGHT):
            SCORE += 1
            self.rect.top = 0
            self.rect.center = (random.randint(40, WIDTH - 40), 0)

P1 = Player()
E1 = Enemy()
all_sprites = pygame.sprite.Group()
all_sprites.add(P1)
all_sprites.add(E1)
enemies = pygame.sprite.Group()
enemies.add(E1)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            os.sys.exit()
    
    screen.blit(background, (0,0))
    for entity in all_sprites:
        entity.move()
        screen.blit(entity.image, entity.rect)
    pygame.display.update()

http://www.dtcms.com/a/36558.html

相关文章:

  • **模式的好处 (设计模式)
  • ArcGIS Pro中创建最低成本路径的详尽教程
  • 科普:HTTP端口80和HTTPS端口443
  • 浅谈 Redis 主从集群原理(一)
  • Figure自研模型Helix发布,人形机器人迈向新纪元?
  • 《一起打怪兽吧》——自制一款Python小游戏
  • 一文讲解Redis中的数据一致性问题
  • Linux红帽:RHCSA认证知识讲解(二)配置网络与登录本地远程Linux主机
  • Qt在Linux嵌入式开发过程中复杂界面滑动时卡顿掉帧问题分析及解决方案
  • 策略模式介绍和代码示例
  • Megatron-LM:使用模型并行训练数十亿参数的语言模型
  • 【SpringBoot+Vue】博客项目开发一:基础框架搭建
  • Python游戏编程之赛车游戏6-3
  • java23种设计模式-桥接模式
  • 【关于seisimic unix中使用suedit指令无法保存问题】
  • 网络 - Socket编程
  • Go 协程池完整解析(原理+实践+性能分析
  • 第二章-续:辅助功能
  • EX_25/2/22
  • 第5章 软件工程(二)
  • Crack SmartGit
  • vue3中Watch和WatchEffect的用法和区别
  • 调用DeepSeek API 增强版纯前端实现方案,支持文件上传和内容解析功能
  • sam2 windows 编译安装
  • springboot单机支持1w并发,需要做哪些优化
  • 国产编辑器EverEdit - 如何在EverEdit中创建工程?
  • 使用Uni-app实现语音视频聊天(Android、iOS)
  • 漏洞文字版表述一句话版本(漏洞危害以及修复建议),通常用于漏洞通报中简洁干练【持续更新中】
  • JavaWeb-在idea中配置Servlet项目
  • Linux下网络运维命令总结