python及pygame雷霆战机游戏项目实战01 控制飞机

入门

在这个系列中,将制作一个雷霆战机游戏。

GIF.gif

首先,将游戏设置修改一下:

WIDTH = 480
HEIGHT = 600
FPS = 60

玩家精灵

要添加的第一件事是代表玩家的精灵。最终,这将是一艘雷霆战机。但是当你第一次开始时,忽略图形会更简单,只需对所有精灵使用普通矩形。

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 40))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0

为Player选择了50x40像素的大小,将其定位矩形rect放在屏幕的底部中心。还定义了一个speedx属性,可以跟踪玩家在x方向上移动的速度(从一侧到另一侧)。

对于update()方法,这是将在游戏的每一次循环调用的函数,x坐标向右移动speedx个像素:

    def update(self):
        self.rect.x += self.speedx

创建精灵,加入精灵组:

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

运动/控制

这是一个键盘控制的游戏,所以希望玩家在按下LeftRight箭头键时移动精灵。

def update(self):
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -8
        if keystate[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx

上面代码会将speedx每帧设置为0,然后检查键是否已被按下。在pygame.key.get_pressed()返回一个字典keystate,如果某个键被按下,那么字典中该键对应的值是True。

边界检查

最后,需要确保精灵不会离开屏幕。将向Player类的update()方法添加以下内容:

        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

现在,如果Player试图移动到超过屏幕左边缘或右边缘的位置,它将停止。

image.png

整合到一起

以下是此步骤的完整代码:

# Shmup game - part 1
# Video link: https://www.youtube.com/watch?v=nGufy7weyGY
# Player sprite and movement
import pygame
import random

WIDTH = 480
HEIGHT = 600
FPS = 60

# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)

# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shmup!")
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 40))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0

    def update(self):
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -8
        if keystate[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

# Game loop
running = True
while running:
    # keep loop running at the right speed
    clock.tick(FPS)
    # Process input (events)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False

    # Update
    all_sprites.update()

    # Draw / render
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # *after* drawing everything, flip the display
    pygame.display.flip()

pygame.quit()
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pygame是一个用于开发2D游戏Python库。它提供了一系列功能强大的工具和函数,使开发者能够轻松创建游戏。下面是对Pygame的介绍: 1. 游戏循环:Pygame提供了一个主循环,用于处理游戏的逻辑和更新游戏状态。开发者可以在主循环中处理用户输入、更新游戏对象的位置和状态,并在每一帧中绘制游戏画面。 2. 精灵和精灵组:Pygame中的精灵是游戏中的可移动对象,如角色、敌人等。精灵组是一种方便管理和操作多个精灵的方式,可以实现碰撞检测、碰撞反应等功能。 3. 图像和动画:Pygame支持加载和显示图像,可以使用图像作为游戏中的背景、角色等元素。此外,Pygame还提供了动画功能,可以实现平滑的移动效果和过渡动画。 4. 声音和音乐:Pygame可以播放声音和音乐文件,可以为游戏添加音效和背景音乐,提升游戏的体验。 5. 键盘和鼠标输入:Pygame可以捕获键盘和鼠标事件,开发者可以根据用户的输入来控制游戏对象的行为。 6. 碰撞检测:Pygame提供了简单的碰撞检测功能,可以检测精灵之间的碰撞,并根据需要进行相应的处理。 7. 文字和字体:Pygame支持在游戏中显示文字,可以使用不同的字体和样式来呈现游戏信息和提示。 8. 扩展性:Pygame是一个开源库,拥有庞大的社区支持和丰富的扩展库。开发者可以利用这些扩展库来增加游戏的功能和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值