Поэтому я хочу создать базовую 2d-игру, в которой вы управляете прямоугольником, и если вы коснетесь стены, вы умрете. Я создал несколько стен Изображение
но я застрял сейчас. Я действительно не знаю, как выглядит код, хотя я смотрел документацию. И, во-вторых, я не уверен, как создать "Sprite". Как сделать свой прямоугольник как "спрайт", или это не имеет значения, и он может оставаться только обычным прямоугольником, который движется?
import pygame
pygame.init()
win = pygame.display.set_mode((1200, 600))
pygame.display.set_caption("My Game")
x = 40
y = 45
width = 30
height = 30
vel = 4
black = (0,0,0)
run = True
while run:
pygame.time.delay(15)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
win.fill((255,255,255))
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and x > 0:
x -= vel
if keys[pygame.K_RIGHT] and x < 1200 - width:
x += vel
if keys[pygame.K_UP] and y > 0:
y -= vel
if keys[pygame.K_DOWN] and y < 600 - height:
y += vel
pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
# Boundaries
pygame.draw.rect(win, (black), (0, 0, 1200, 20))
pygame.draw.rect(win, (black), (0, 0, 20, 600))
pygame.draw.rect(win, (black), (0, 580, 1200, 20))
pygame.draw.rect(win, (black), (1180, 0, 20, 600))
# Obstacle walls
pygame.draw.rect(win, (black), (300, 0, 20, 530))
pygame.draw.rect(win, (black), (20, 100, 230, 20))
pygame.draw.rect(win, (black), (70, 200, 230, 20))
pygame.draw.rect(win, (black), (20, 300, 230, 20))
pygame.draw.rect(win, (black), (70, 400, 230, 20))
# Middle Wall
pygame.draw.rect(win, (black), (600, 100, 20, 500))
pygame.display.update()
pygame.quit()
Вам не нужны pygame sprites и группы спрайтов для обнаружения столкновений, вы можете просто использовать pygame.Rect
. Я поместил все стены в список и сделаю их pygame.Rect
объекты, тогда можно использовать colliderect
rects для коллизий. Вам также нужен прямоугольник для игрока (просто замените x, y, width, height
с помощью rect). Итерации над walls
списка с for
петель, чтобы проверить, если один сталкивается с игрока прямоугольником, а также привлечь их.
import pygame
pygame.init()
win = pygame.display.set_mode((1200, 600))
clock = pygame.time.Clock() # A clock to limit the frame rate.
BLACK = (0, 0, 0)
WHITE = (255,255,255)
RED = (255, 0, 0)
# The player variables have been replaced by a pygame.Rect.
player = pygame.Rect(40, 45, 30, 30)
vel = 4
# The walls are now pygame.Rects as well. Just put them into a list.
walls = [
pygame.Rect(0, 0, 1200, 20), pygame.Rect(0, 0, 20, 600),
pygame.Rect(0, 580, 1200, 20), pygame.Rect(1180, 0, 20, 600),
pygame.Rect(300, 0, 20, 530), pygame.Rect(20, 100, 230, 20),
pygame.Rect(70, 200, 230, 20), pygame.Rect(20, 300, 230, 20),
pygame.Rect(70, 400, 230, 20), pygame.Rect(600, 100, 20, 500),
]
run = True
while run:
# Handle the events.
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
# Update the player coordinates.
if keys[pygame.K_LEFT] and player.x > 0:
player.x -= vel
if keys[pygame.K_RIGHT] and player.x < 1200 - player.width:
player.x += vel
if keys[pygame.K_UP] and player.y > 0:
player.y -= vel
if keys[pygame.K_DOWN] and player.y < 600 - player.height:
player.y += vel
# Game logic.
for wall in walls:
# Check if the player rect collides with a wall rect.
if player.colliderect(wall):
print('Game over')
# Then quit or restart.
# Draw everything.
win.fill(WHITE)
pygame.draw.rect(win, RED, player)
# Use a for loop to draw the wall rects.
for wall in walls:
pygame.draw.rect(win, BLACK, wall)
pygame.display.update()
clock.tick(60) # Limit the frame rate to 60 FPS.
pygame.quit()