Добрый день. Осваиваю pygame. В данном коде есть статичный блок и тот которым можно управлять. У меня получилось реализовать следующую механику - при соприкосновении блоков статичный блок удаляется.
Хотелось бы понять, как можно сделать так, чтобы при соприкосновении блоков, статичный блок менял цвет с красного на зеленый, а при повторном соприкосновении с зеленого, ну например на желтый.
Хотелось бы понять, как можно сделать так, чтобы при соприкосновении блоков, статичный блок менял цвет с красного на зеленый, а при повторном соприкосновении с зеленого, ну например на желтый.
Код:
import pygame
pygame.init()
WIDTH, HEIGHT = 800, 600
FPS = 60
TILE = 50
window = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
DIRECTS = [[0, -1], [1, 0], [0, 1], [-1, 0]]
class BlockGo:
def __init__(self, color, px, py, direct, keyList, damage):
objects.append(self)
self.type = 'blockgo'
self.color = color
self.rect = pygame.Rect(px, py, TILE, TILE)
self.direct = direct # направление
self.moveSpeed = 2
self.damage = damage
self.keyLEFT = keyList[0]
self.keyRIGHT = keyList[1]
self.keyUP = keyList[2]
self.keyDOWN = keyList[3]
def update(self):
oldX, oldY = self.rect.topleft
if keys[self.keyLEFT]:
self.rect.x -= self.moveSpeed
self.direct = 3
elif keys[self.keyRIGHT]:
self.rect.x += self.moveSpeed
self.direct = 1
elif keys[self.keyUP]:
self.rect.y -= self.moveSpeed
self.direct = 0
elif keys[self.keyDOWN]:
self.rect.y += self.moveSpeed
self.direct = 2
for obj in objects:
if obj != self and self.rect.colliderect(obj.rect):
self.rect.topleft = oldX, oldY
for objcr in objectscrash:
if self.rect.colliderect(objcr.rect):
objectscrash.remove(objcr.rect)
def draw(self):
pygame.draw.rect(window, self.color, self.rect)
x = self.rect.centerx + DIRECTS[self.direct][0] * 30
y = self.rect.centerx + DIRECTS[self.direct][0] * 30
class Block:
def __init__(self, color, px, py, size):
objectscrash.append(self)
self.type = 'block'
self.color = color
self.rect = pygame.Rect(px, py, size, size)
def update(self):
pass
def draw(self):
pygame.draw.rect(window, self.color, self.rect)
objectscrash = []
objects = []
BlockGo('blue', 100, 275, 0, (pygame.K_a, pygame.K_d, pygame.K_w, pygame.K_s), 1)
Block('red', 200, 100, TILE)
play = True
while play:
for event in pygame.event.get():
if event.type == pygame.QUIT:
play = False
keys = pygame.key.get_pressed()
for objcr in objectscrash: objcr.update()
for obj in objects: obj.update()
window.fill('black')
for objcr in objectscrash: objcr.draw()
for obj in objects: obj.draw()
pygame.display.update()
clock.tick(FPS)
pygame.quit()