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

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

3.2 move()方法的定义

Player类的move()方法用于玩家控制汽车左右移动,当玩家点击键盘上的左右按键时,汽车会相应地进行左右移动。

move()方法的代码如图7所示。

图7 move()方法的代码

其中,第20行代码通过pygame.key.get_pressed()函数获取键盘中所有按键的状态,并将其保存在变量pressed_keys中,当玩家按下了向左的按键,pressed_keys[K_LEFT]的值是True,当玩家按下了向右的按键,pressed_keys[K_RIGHT]的值是True。第22-24行代码中,首先判断玩家汽车的位置是否已经到了屏幕的最左端,如果没有在屏幕最左端,则第23行代码判断玩家是否按下了向左的按键,如果该按键被按下则第24行代码将玩家汽车的位置向左移动5个单位。第22-24行代码保证了如果玩家汽车位于屏幕最左端,此时不会再移动到屏幕之外。同理,第25-27行代码是对用户按下了向右按键的处理,第25行代码判断玩家汽车是否位于屏幕的最右端,如果没有在最右端,则第26行代码判断玩家是否按下了向右的按键,如果该按键被按下则第27行代码将玩家汽车的位置向右移动5个单位。第25-27行代码保证了如果玩家汽车位于屏幕最右端,此时不会再移动到屏幕之外。

相关链接5  Pygame的Rect类的资料,请参考

《Pygame中Rect类的使用方法2-1》

《Pygame中Rect类的使用方法2-2》

相关链接6 Pygame的键盘监听资料,请参考

《Pygame中监控键盘按键的方法》

4 实例化Player类及相关处理

4.1 实例化Player类

通过图8所示的代码实例化Player类。

图8 实例化Player类的代码

其中, P1是Player类的实例。

4.2 将P1加入到精灵组中

P1是Player类的实例,而Player类是pygame.sprite.Sprite类的子类,因此P1可以看作是一个“精灵”。将“精灵”加入到“精灵组”可以方便对多个“精灵”进行批量处理。代码如图9所示。

图9 将P1加入到精灵组的代码

其中,第29行通过pygame.sprite.Group()创建“精灵组”all_sprites,该“精灵组”中将会包含游戏中的所有“精灵”,即包含玩家也包含“敌人”。

4.3 显示及控制玩家汽车

在while True循环中,通过“精灵组”all_sprites实现显示及控制玩家汽车的功能,代码如图10所示。

图10 显示及控制玩家汽车的代码

其中,第39行代码通过for循环遍历“精灵组”all_sprites中的所有精灵(目前组里面只有玩家一个精灵),之后第40行代码调用精灵的move()方法控制“精灵”的移动;第41行代码绘制“精灵”。

运行代码后,游戏的效果如图11所示。

图11 游戏效果

5 完整代码

以上内容的完整代码如下所示。

import pygame
import os
from pygame.locals import *

WIDTH = 400
HEIGHT = 600
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)
P1 = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(P1)

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://MzhEoVdd.hnkkm.cn
http://v1o8t7Ud.hnkkm.cn
http://XlZ6xuO3.hnkkm.cn
http://nuFtZTTP.hnkkm.cn
http://N9jK14qA.hnkkm.cn
http://HzuGgttD.hnkkm.cn
http://aQ5gEVZs.hnkkm.cn
http://Gv3bUfxd.hnkkm.cn
http://GkPGQbvw.hnkkm.cn
http://RHmZTMy5.hnkkm.cn
http://Psi8XwCo.hnkkm.cn
http://DOaWVaF4.hnkkm.cn
http://w6L4geQe.hnkkm.cn
http://kFeOR2uy.hnkkm.cn
http://ySggL6oi.hnkkm.cn
http://2iOGsEa3.hnkkm.cn
http://emX2864n.hnkkm.cn
http://56Kj8WDt.hnkkm.cn
http://ia3ZfzR6.hnkkm.cn
http://ji6VEx1H.hnkkm.cn
http://phyKcXOF.hnkkm.cn
http://UdPGz5pv.hnkkm.cn
http://mBIQPHXM.hnkkm.cn
http://rLAI02zt.hnkkm.cn
http://4XvqIpjM.hnkkm.cn
http://VjKo5Kqt.hnkkm.cn
http://k86esuJB.hnkkm.cn
http://JgV6Mmwt.hnkkm.cn
http://WyYQ2ZVl.hnkkm.cn
http://3VDAUtv7.hnkkm.cn
http://www.dtcms.com/a/36201.html

相关文章:

  • vue2和vue3响应式的区别
  • zookeeper从入门到精通
  • LabVIEW Browser.vi 库说明
  • [SWPUCTF 2022 新生赛]ez_rce
  • 前端基础知识
  • 蓝桥杯单片机组第十二届省赛第二批次
  • VMware中安装的ubuntu虚拟机屏幕由居中设置为最大化
  • Dify 工作流分类器技巧
  • LeetCode 热题100 2. 两数相加
  • JS高德地图实现降雨降雪效果
  • DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!
  • Java 登录框架
  • 模板方法模式
  • 数字信任的底层逻辑:密码学核心技术与现实应用
  • 计算机毕业设计SpringBoot+Vue.js墙绘产品展示交易平台(源码+文档+PPT+讲解)
  • [AI]从零开始的树莓派运行DeepSeek模型教程
  • C#开发——ConcurrentDictionary集合
  • 华为认证考试证书下载步骤(纸质+电子版)
  • docker安装register私库
  • 详解golang的Gengine规则引擎
  • 【排序算法】堆排序详解
  • 基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
  • 推送项目 之 解决冲突
  • Claude 3.7 Sonnet 泄露,Anthropic 最先进 AI 模型即将在 AWS Bedrock 上首次亮相
  • 【NLP 26、实践 ⑥ 引入bert,判断文本中是否有特定字符出现】
  • 深入理解 Redis 设计与集群管理
  • JavaSE学习笔记26-集合(Collection)
  • Unity百游修炼(1)——FootBall详细制作全流程
  • 大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件
  • 【前端基础】Day 1 HTML