python及pygame雷霆战机游戏项目实战01 控制飞机
2021/11/15 22:14:18
本文主要是介绍python及pygame雷霆战机游戏项目实战01 控制飞机,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
入门
在这个系列中,将制作一个雷霆战机游戏。
首先,将游戏设置修改一下:
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)
运动/控制
这是一个键盘控制的游戏,所以希望玩家在按下Left
或Right
箭头键时移动精灵。
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试图移动到超过屏幕左边缘或右边缘的位置,它将停止。
整合到一起
以下是此步骤的完整代码:
# 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()
这篇关于python及pygame雷霆战机游戏项目实战01 控制飞机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门