помогите как сделать чтобы ракетка не уходила за пределы экрана в pygames

Dan11l

Новичок
Пользователь
Авг 24, 2023
2
1
3
не понимаю как сделать чтоб ракет не уходила за экран.
мне говорили что можно сделать через проверку координат , но не совсем понимаю как это реализовать


Python:
import pygame


pygame.init()
import random

WIDTH = 1000
HEIGHT = 670
fps = 60
# Цвета
BLACK = "#000000"       # Черный
WHITE = "#FFFFFF"       # Белый
RED = "#FF0000"         # Красный
GREEN = "#008000"       # Зеленый
BLUE = "#0000FF"        # Синий
CYAN = "#00FFFF"        # Голубой

icon = pygame.image.load("media/icon.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Arkanoid")
screen = pygame.display.set_mode((WIDTH, HEIGHT))

smail = pygame.image.load("media/smile.png")
smail_rect = smail.get_rect()
smail_rect.center = (WIDTH // 2, HEIGHT // 2)

racket = pygame.image.load("media/racket.png")
racket_rect = racket.get_rect()
racket_rect.center = (WIDTH // 2, HEIGHT - 150)

speed_x = 5
speed_y = 5


timer = pygame.time.Clock()

run = True


while run:
    timer.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                run = False

    key = pygame.key.get_pressed()
    if key[pygame.K_RIGHT]:
        racket_rect.x += 10
    elif key[pygame.K_LEFT]:
        racket_rect.x -= 10



    smail_rect.x += speed_x
    smail_rect.y += speed_y
    if smail_rect.right >= WIDTH:
        speed_x = -5
    elif smail_rect.left <= 0:
        speed_x = 5
    if smail_rect.bottom >= HEIGHT:
        speed_y = - 5
    elif smail_rect.top <= 0:
        speed_y = 5





    collide = smail_rect.colliderect(racket_rect)
    if collide:
        speed_y = - 5



    screen.fill(CYAN)
    screen.blit(smail, smail_rect)
    screen.blit(racket, racket_rect)
    pygame.display.update()
pygame.quit()
 
Последнее редактирование:
  • Ха-ха!
Реакции: 4olshoy_blen

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
не понимаю как сделать чтоб ракет не уходила за экран.
мне говорили что можно сделать через проверку координат , но не совсем понимаю как это реализовать


Python:
import pygame

pygame.init()
import random

WIDTH = 1000
HEIGHT = 670
fps = 60
# Цвета
BLACK = "#000000" # Черный
WHITE = "#FFFFFF" # Белый
RED = "#FF0000" # Красный
GREEN = "#008000" # Зеленый
BLUE = "#0000FF" # Синий
CYAN = "#00FFFF" # Голубой

icon = pygame.image.load("media/icon.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Arkanoid")
screen = pygame.display.set_mode((WIDTH, HEIGHT))

smail = pygame.image.load("media/smile.png")
smail_rect = smail.get_rect()
smail_rect.center = (WIDTH // 2, HEIGHT // 2)

racket = pygame.image.load("media/racket.png")
racket_rect = racket.get_rect()
racket_rect.center = (WIDTH // 2, HEIGHT - 150)

speed_x = 5
speed_y = 5

timer = pygame.time.Clock()

run = True


while run:
timer.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
run = False

key = pygame.key.get_pressed()
if key[pygame.K_RIGHT]:
racket_rect.x += 10
elif key[pygame.K_LEFT]:
racket_rect.x -= 10


smail_rect.x += speed_x
smail_rect.y += speed_y
if smail_rect.right >= WIDTH:
speed_x = -5
elif smail_rect.left <= 0:
speed_x = 5
if smail_rect.bottom >= HEIGHT:
speed_y = - 5
elif smail_rect.top <= 0:
speed_y = 5



collide = smail_rect.colliderect(racket_rect)
if collide:
speed_y = - 5



screen.fill(CYAN)
screen.blit(smail, smail_rect)
screen.blit(racket, racket_rect)
pygame.display.update()
pygame.quit()
а теперь попробуйте скопировать свой код, и запустить его...
 

Dan11l

Новичок
Пользователь
Авг 24, 2023
2
1
3
а теперь попробуйте скопировать свой код, и запустить его...
исправил, почему-то при копировании слетели отступы
 

Форум IT Специалистов