Python код не работает для Pygame шарикового весла? - PullRequest
0 голосов
/ 26 марта 2020

Я довольно новичок в 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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...