Я довольно новичок в python и начал работать над моим первым проектом Pygame, это классическая c игра с мячом и ловцом (веслом).
Мне удалось создать прямоугольное манипулятор angular (красного цвета) на экране, однако манипулятор, похоже, не реагирует на нажатия клавиш и, следовательно, вообще не двигается. Кроме того, я реализовал дополнительную клавишу, K_q, чтобы выйти из игры, и она, кажется, реагирует на мои нажатия клавиш, но затвор не реагирует на нажатия K_w (справа) или K_s (слева). Я был бы очень признателен, если бы кто-нибудь мог определить, где я ошибся, и помочь мне с моим кодом ниже:).
Я включил четыре кода:
1) Код весла ( Содержит описание для весла)
2) Код настроек (Содержит описание весла, экрана, скорости)
3) Код игровых функций (Содержит нажатия клавиш)
4) Код ловушки мяча (запускается игра)
Спасибо всем.
Коды:
КОД ПАРЛА :
import pygame
class Paddle():
def __init__(self, bc_settings, screen):
"""Initialize the paddle and set its starting position."""
self.screen = screen
self.bc_settings = bc_settings
# Create a paddle rect at (0, 0) and then set correct position.
self.rect = pygame.Rect(0, 0, bc_settings.paddle_width, bc_settings.paddle_height)
self.screen_rect = screen.get_rect()
# Start each new paddle at the bottom center of the screen.
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
# Movement flag
self.moving_right = False
self.moving_left = False
# Store the paddle's position as a decimal value
self.center_x = float(self.rect.centerx)
def update(self):
"""Update the paddle's position based on the movement flag."""
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center_x += self.bc_settings.paddle_speed_factor
if self.moving_left and self.rect.left > 0:
self.center_x -= self.bc_settings.paddle_speed_factor
# Update rect object of from self.center_x
self.rect.centerx = self.center_x
def draw_rectangle(self, bc_settings, screen):
# Draw the paddle
pygame.draw.rect(screen, bc_settings.red, self.rect)
КОД ПАРАМЕТРОВ
"""Create a modulue that stores all the settings for the game Ball Catcher"""
class Settings():
def __init__(self):
"""Initialize the settings of the game."""
# Screen settings
self.screen_width = 600
self.screen_height = 400
self.screen_clock = 60
# List of colors
self.black = (0, 0, 0)
self.white = (255, 255, 255)
self.dark_blue = (36, 90, 190)
self.light_blue = (0, 176, 240)
self.red = (255, 0, 0)
self.orange = (255, 100, 0)
self.yellow = (255, 255, 0)
# Paddle settings
self.paddle_width = 100
self.paddle_height = 20
self.paddle_x = 200
self.paddle_y = 380
self.paddle_speed_factor = 3
КОД ФУНКЦИЙ ИГРЫ
import sys
import pygame
def check_keydown_events(event, paddle):
"""Respond to keypresses"""
if event.type == pygame.K_w:
paddle.moving_right = True
elif event.type == pygame.K_s:
paddle.moving_left = True
elif event.key == pygame.K_q:
sys.exit()
def check_keyup_events(event, paddle):
"""Respond to key releases."""
if event.type == pygame.K_w:
paddle.moving_right = False
elif event.type == pygame.K_s:
paddle.moving_left = False
def check_events(paddle):
"""Respond to keypresses and mouse events."""
# Watch for keyboard and mouse events.
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event, paddle)
elif event.type == pygame.KEYUP:
check_keyup_events(event, paddle)
def update_screen(bc_settings, screen, clock, paddle):
"""Update screen and flip to the new screen."""
# Redraw the screen settings and the rectangle after each pass through the loop
screen.fill(bc_settings.white)
paddle.draw_rectangle(bc_settings, screen)
# Make the most recently drawn screen visible.
pygame.display.flip()
# Draw the paddle's FPS
clock.tick(bc_settings.screen_clock)
ЛОВЯЩИЙ УДАР КОД
import pygame
from settings import Settings
from paddle import Paddle
import game_functions as gf
def run_game():
"""Initialize pygame, settings and screen object."""
pygame.init()
bc_settings = Settings()
screen = pygame.display.set_mode((bc_settings.screen_width, bc_settings.screen_height))
clock = pygame.time.Clock()
pygame.display.set_caption("Ball Catcher")
# Make a paddle
paddle = Paddle(bc_settings, screen)
# Start the main loop for the game.
while True:
gf.check_events(paddle)
paddle.update()
gf.update_screen(bc_settings, screen, clock, paddle)
run_game()