迷宫由一堆红色方块组成,以便作为迷宫来吸引人,我取了边界中所有正方形的坐标,并在边界下标记了它们。我希望玩家#1和#2不能走到例如左边,如果那里有边界,但是我已经尝试了2种方法来解决。两者都不成功。首先要说的是,他搬家后,如果他处于其中之一,他会搬回去。第二是如果有障碍物,则阻止其移动。我真的可以帮忙!
import pygame
import sys
import random
pygame.init()
width = 800
height = 800
white = (255,255,255)
blue = (0,0,255)
light_blue = (0,255,255)
red = (255,0,0)
black = (0,0,0)
player_pos = (50,50)
player_size = (50)
player_speed = (50)
player2_pos = (700,700)
border = ((50, 300) or (50, 350) or (50, 400) or (100, 50) or (100, 100) or (100, 150) or (100, 200) or (100, 300) or (100, 350) or (100, 400) or (100, 500) or (100, 550) or (100, 600) or (100, 650) or (150, 300) or (150, 400) or (150, 500) or (150, 650) or (200, 100) or (200, 150) or (200, 200) or (200, 250) or (200, 300) or (200, 400) or (200, 500) or (200, 600) or (200, 650) or (250, 400) or (250, 500) or (300, 50) or (300, 100) or (300, 200) or (300, 250) or (300, 300) or (300, 350) or (300, 400) or (300, 500) or (300, 550) or (300, 600) or (300, 650) or (350, 650) or (400, 50) or (400, 100) or (400, 150) or (400, 200) or (400, 300) or (400, 350) or (400, 400) or (400, 450) or (400, 500) or (400, 550) or (400, 600) or (400, 650) or (450, 200) or (450, 300) or (500, 100) or (500, 200) or (500, 300) or (500, 400) or (500, 450) or (500, 500) or (500, 550) or (500, 600) or (500, 650) or (550, 100) or (550, 200) or (550, 300) or (550, 550) or (600, 100) or (600, 300) or (600, 400) or (600, 450) or (600, 550) or (600, 650) or (650, 100) or (650, 150) or (650, 200) or (650, 250) or (650, 300) or (650, 400) or (650, 450) or (650, 550) or (650, 650) or (650, 700) or (650, 750) or (700, 450) or (0, 0) or (50, 0) or (100, 0) or (150, 0) or (200, 0) or (250, 0) or (300, 0) or (350, 0) or (400, 0) or (450, 0) or (500, 0) or (550, 0) or (600, 0) or (650, 0) or (700, 0) or (750, 0) or (0, 50) or (0, 100) or (0, 150) or (0, 200) or (0, 250) or (0, 300) or (0, 350) or (0, 400) or (0, 450) or (0, 500) or (750, 50) or (750, 100) or (750, 150) or (750, 200) or (750, 250) or (750, 300) or (750, 350) or (750, 400) or (750, 450) or (750, 500) or (750, 550) or (750, 600) or (750, 650) or (750, 700) or (50, 750) or (100, 750) or (150, 750) or (200, 750) or (250, 750) or (300, 750) or (350, 750) or (400, 750) or (450, 750) or (500, 750) or (550, 750) or (600, 750) or (650, 750) or (700, 750) or (750, 750) or (0, 200) or (0, 250) or (0, 300) or (0, 350) or (0, 400) or (0, 450) or (0, 500) or (0, 550) or (0, 600) or (0, 650) or (0, 700) or (0, 750))
screen = pygame.display.set_mode((width, height))
game_over = False
clock = pygame.time.Clock()
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
a = player2_pos[0]
b = player2_pos[1]
if event.key == pygame.K_LEFT:
x -= player_speed
if player_pos == border:
x += player_speed
elif event.key == pygame.K_RIGHT:
x += player_speed
elif event.key == pygame.K_UP:
y -= player_speed
elif event.key == pygame.K_DOWN:
y += player_speed
elif event.key == pygame.K_a:
a -= player_speed
elif event.key == pygame.K_d:
a += player_speed
elif event.key == pygame.K_w:
b -= player_speed
elif event.key == pygame.K_s:
b += player_speed
player_pos = [x,y]
player2_pos = [a,b]
print(event)
screen.fill(black)
pygame.draw.rect(screen, blue, (player_pos[0], player_pos[1], player_size, player_size))
pygame.draw.rect(screen, light_blue, (player2_pos[0], player2_pos[1], player_size, player_size))
pygame.draw.rect(screen, red, (50, 300, player_size, player_size))
pygame.draw.rect(screen, red, (50, 350, player_size, player_size))
pygame.draw.rect(screen, red, (50, 400, player_size, player_size))
pygame.draw.rect(screen, red, (100, 50, player_size, player_size))
pygame.draw.rect(screen, red, (100, 100, player_size, player_size))
pygame.draw.rect(screen, red, (100, 150, player_size, player_size))
pygame.draw.rect(screen, red, (100, 200, player_size, player_size))
pygame.draw.rect(screen, red, (100, 300, player_size, player_size))
pygame.draw.rect(screen, red, (100, 350, player_size, player_size))
pygame.draw.rect(screen, red, (100, 400, player_size, player_size))
pygame.draw.rect(screen, red, (100, 500, player_size, player_size))
pygame.draw.rect(screen, red, (100, 550, player_size, player_size))
pygame.draw.rect(screen, red, (100, 600, player_size, player_size))
pygame.draw.rect(screen, red, (100, 650, player_size, player_size))
pygame.draw.rect(screen, red, (150, 300, player_size, player_size))
pygame.draw.rect(screen, red, (150, 400, player_size, player_size))
pygame.draw.rect(screen, red, (150, 500, player_size, player_size))
pygame.draw.rect(screen, red, (150, 650, player_size, player_size))
pygame.draw.rect(screen, red, (200, 100, player_size, player_size))
pygame.draw.rect(screen, red, (200, 150, player_size, player_size))
pygame.draw.rect(screen, red, (200, 200, player_size, player_size))
pygame.draw.rect(screen, red, (200, 250, player_size, player_size))
pygame.draw.rect(screen, red, (200, 300, player_size, player_size))
pygame.draw.rect(screen, red, (200, 400, player_size, player_size))
pygame.draw.rect(screen, red, (200, 500, player_size, player_size))
pygame.draw.rect(screen, red, (200, 600, player_size, player_size))
pygame.draw.rect(screen, red, (200, 650, player_size, player_size))
pygame.draw.rect(screen, red, (250, 400, player_size, player_size))
pygame.draw.rect(screen, red, (250, 500, player_size, player_size))
pygame.draw.rect(screen, red, (300, 50, player_size, player_size))
pygame.draw.rect(screen, red, (300, 100, player_size, player_size))
pygame.draw.rect(screen, red, (300, 200, player_size, player_size))
pygame.draw.rect(screen, red, (300, 250, player_size, player_size))
pygame.draw.rect(screen, red, (300, 300, player_size, player_size))
pygame.draw.rect(screen, red, (300, 350, player_size, player_size))
pygame.draw.rect(screen, red, (300, 400, player_size, player_size))
pygame.draw.rect(screen, red, (300, 500, player_size, player_size))
pygame.draw.rect(screen, red, (300, 550, player_size, player_size))
pygame.draw.rect(screen, red, (300, 600, player_size, player_size))
pygame.draw.rect(screen, red, (300, 650, player_size, player_size))
pygame.draw.rect(screen, red, (350, 650, player_size, player_size))
pygame.draw.rect(screen, red, (400, 50, player_size, player_size))
pygame.draw.rect(screen, red, (400, 100, player_size, player_size))
pygame.draw.rect(screen, red, (400, 150, player_size, player_size))
pygame.draw.rect(screen, red, (400, 200, player_size, player_size))
pygame.draw.rect(screen, red, (400, 300, player_size, player_size))
pygame.draw.rect(screen, red, (400, 350, player_size, player_size))
pygame.draw.rect(screen, red, (400, 400, player_size, player_size))
pygame.draw.rect(screen, red, (400, 450, player_size, player_size))
pygame.draw.rect(screen, red, (400, 500, player_size, player_size))
pygame.draw.rect(screen, red, (400, 550, player_size, player_size))
pygame.draw.rect(screen, red, (400, 600, player_size, player_size))
pygame.draw.rect(screen, red, (400, 650, player_size, player_size))
pygame.draw.rect(screen, red, (450, 200, player_size, player_size))
pygame.draw.rect(screen, red, (450, 300, player_size, player_size))
pygame.draw.rect(screen, red, (500, 100, player_size, player_size))
pygame.draw.rect(screen, red, (500, 200, player_size, player_size))
pygame.draw.rect(screen, red, (500, 300, player_size, player_size))
pygame.draw.rect(screen, red, (500, 400, player_size, player_size))
pygame.draw.rect(screen, red, (500, 450, player_size, player_size))
pygame.draw.rect(screen, red, (500, 500, player_size, player_size))
pygame.draw.rect(screen, red, (500, 550, player_size, player_size))
pygame.draw.rect(screen, red, (500, 600, player_size, player_size))
pygame.draw.rect(screen, red, (500, 650, player_size, player_size))
pygame.draw.rect(screen, red, (550, 100, player_size, player_size))
pygame.draw.rect(screen, red, (550, 200, player_size, player_size))
pygame.draw.rect(screen, red, (550, 300, player_size, player_size))
pygame.draw.rect(screen, red, (550, 550, player_size, player_size))
pygame.draw.rect(screen, red, (600, 100, player_size, player_size))
pygame.draw.rect(screen, red, (600, 300, player_size, player_size))
pygame.draw.rect(screen, red, (600, 400, player_size, player_size))
pygame.draw.rect(screen, red, (600, 450, player_size, player_size))
pygame.draw.rect(screen, red, (600, 550, player_size, player_size))
pygame.draw.rect(screen, red, (600, 650, player_size, player_size))
pygame.draw.rect(screen, red, (650, 100, player_size, player_size))
pygame.draw.rect(screen, red, (650, 150, player_size, player_size))
pygame.draw.rect(screen, red, (650, 200, player_size, player_size))
pygame.draw.rect(screen, red, (650, 250, player_size, player_size))
pygame.draw.rect(screen, red, (650, 300, player_size, player_size))
pygame.draw.rect(screen, red, (650, 400, player_size, player_size))
pygame.draw.rect(screen, red, (650, 450, player_size, player_size))
pygame.draw.rect(screen, red, (650, 550, player_size, player_size))
pygame.draw.rect(screen, red, (650, 600, player_size, player_size))
pygame.draw.rect(screen, red, (650, 650, player_size, player_size))
pygame.draw.rect(screen, red, (650, 700, player_size, player_size))
pygame.draw.rect(screen, red, (650, 750, player_size, player_size))
pygame.draw.rect(screen, red, (700, 450, player_size, player_size))
pygame.draw.rect(screen, red, (0, 0, player_size, player_size))
pygame.draw.rect(screen, red, (50, 0, player_size, player_size))
pygame.draw.rect(screen, red, (100, 0, player_size, player_size))
pygame.draw.rect(screen, red, (150, 0, player_size, player_size))
pygame.draw.rect(screen, red, (200, 0, player_size, player_size))
pygame.draw.rect(screen, red, (250, 0, player_size, player_size))
pygame.draw.rect(screen, red, (300, 0, player_size, player_size))
pygame.draw.rect(screen, red, (350, 0, player_size, player_size))
pygame.draw.rect(screen, red, (400, 0, player_size, player_size))
pygame.draw.rect(screen, red, (450, 0, player_size, player_size))
pygame.draw.rect(screen, red, (500, 0, player_size, player_size))
pygame.draw.rect(screen, red, (550, 0, player_size, player_size))
pygame.draw.rect(screen, red, (600, 0, player_size, player_size))
pygame.draw.rect(screen, red, (650, 0, player_size, player_size))
pygame.draw.rect(screen, red, (700, 0, player_size, player_size))
pygame.draw.rect(screen, red, (750, 0, player_size, player_size))
pygame.draw.rect(screen, red, (0, 50, player_size, player_size))
pygame.draw.rect(screen, red, (0, 100, player_size, player_size))
pygame.draw.rect(screen, red, (0, 150, player_size, player_size))
pygame.draw.rect(screen, red, (0, 200, player_size, player_size))
pygame.draw.rect(screen, red, (0, 250, player_size, player_size))
pygame.draw.rect(screen, red, (0, 300, player_size, player_size))
pygame.draw.rect(screen, red, (0, 350, player_size, player_size))
pygame.draw.rect(screen, red, (0, 400, player_size, player_size))
pygame.draw.rect(screen, red, (0, 450, player_size, player_size))
pygame.draw.rect(screen, red, (0, 500, player_size, player_size))
pygame.draw.rect(screen, red, (750, 50, player_size, player_size))
pygame.draw.rect(screen, red, (750, 100, player_size, player_size))
pygame.draw.rect(screen, red, (750, 150, player_size, player_size))
pygame.draw.rect(screen, red, (750, 200, player_size, player_size))
pygame.draw.rect(screen, red, (750, 250, player_size, player_size))
pygame.draw.rect(screen, red, (750, 300, player_size, player_size))
pygame.draw.rect(screen, red, (750, 350, player_size, player_size))
pygame.draw.rect(screen, red, (750, 400, player_size, player_size))
pygame.draw.rect(screen, red, (750, 450, player_size, player_size))
pygame.draw.rect(screen, red, (750, 500, player_size, player_size))
pygame.draw.rect(screen, red, (750, 550, player_size, player_size))
pygame.draw.rect(screen, red, (750, 600, player_size, player_size))
pygame.draw.rect(screen, red, (750, 650, player_size, player_size))
pygame.draw.rect(screen, red, (750, 700, player_size, player_size))
pygame.draw.rect(screen, red, (50, 750, player_size, player_size))
pygame.draw.rect(screen, red, (100, 750, player_size, player_size))
pygame.draw.rect(screen, red, (150, 750, player_size, player_size))
pygame.draw.rect(screen, red, (200, 750, player_size, player_size))
pygame.draw.rect(screen, red, (250, 750, player_size, player_size))
pygame.draw.rect(screen, red, (300, 750, player_size, player_size))
pygame.draw.rect(screen, red, (350, 750, player_size, player_size))
pygame.draw.rect(screen, red, (400, 750, player_size, player_size))
pygame.draw.rect(screen, red, (450, 750, player_size, player_size))
pygame.draw.rect(screen, red, (500, 750, player_size, player_size))
pygame.draw.rect(screen, red, (550, 750, player_size, player_size))
pygame.draw.rect(screen, red, (600, 750, player_size, player_size))
pygame.draw.rect(screen, red, (650, 750, player_size, player_size))
pygame.draw.rect(screen, red, (700, 750, player_size, player_size))
pygame.draw.rect(screen, red, (750, 750, player_size, player_size))
pygame.draw.rect(screen, red, (0, 200, player_size, player_size))
pygame.draw.rect(screen, red, (0, 250, player_size, player_size))
pygame.draw.rect(screen, red, (0, 300, player_size, player_size))
pygame.draw.rect(screen, red, (0, 350, player_size, player_size))
pygame.draw.rect(screen, red, (0, 400, player_size, player_size))
pygame.draw.rect(screen, red, (0, 450, player_size, player_size))
pygame.draw.rect(screen, red, (0, 500, player_size, player_size))
pygame.draw.rect(screen, red, (0, 550, player_size, player_size))
pygame.draw.rect(screen, red, (0, 600, player_size, player_size))
pygame.draw.rect(screen, red, (0, 650, player_size, player_size))
pygame.draw.rect(screen, red, (0, 700, player_size, player_size))
pygame.draw.rect(screen, red, (0, 750, player_size, player_size))
clock.tick(20)
pygame.display.update()
答案 0 :(得分:2)
border = ((50, 300) or (50, 350) or (50, 400) or ...)
不是一组元素,它是一个表达式语句。
相反,创建职位列表:
border = [(50, 300), (50, 350), (50, 400), (100, 50), ...]
通过该列表,您可以评估职位是否在(例如if (x, y) in border:
)中。当刨床移动时,然后计算玩家的下一个位置。如果新位置在border
列表中,请放弃机芯:
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
a = player2_pos[0]
b = player2_pos[1]
if event.key == pygame.K_LEFT:
x -= player_speed
elif event.key == pygame.K_RIGHT:
x += player_speed
# [...]
if not (x, y) in border:
player_pos = [x,y]
if not (a, b) in border:
player2_pos = [a,b]
请注意,由于边界存储在列表中,因此可以在for
循环中绘制迷宫:
while not game_over:
# [...]
screen.fill(black)
pygame.draw.rect(screen, blue, (player_pos[0], player_pos[1], player_size, player_size))
pygame.draw.rect(screen, light_blue, (player2_pos[0], player2_pos[1], player_size, player_size))
for bpos in border:
pygame.draw.rect(screen, red, (*bpos, player_size, player_size))
pygame.display.update()
完整的示例代码:
import pygame
import sys
import random
pygame.init()
width = 800
height = 800
white = (255,255,255)
blue = (0,0,255)
light_blue = (0,255,255)
red = (255,0,0)
black = (0,0,0)
player_pos = (50,50)
player_size = (50)
player_speed = (50)
player2_pos = (700,700)
border = [
(50, 300), (50, 350), (50, 400), (100, 50), (100, 100), (100, 150), (100, 200), (100, 300), (100, 350), (100, 400), (100, 500),
(100, 550), (100, 600), (100, 650), (150, 300), (150, 400), (150, 500), (150, 650), (200, 100), (200, 150), (200, 200), (200, 250), (200, 300),
(200, 400), (200, 500), (200, 600), (200, 650), (250, 400), (250, 500), (300, 50), (300, 100), (300, 200), (300, 250),
(300, 300), (300, 350), (300, 400), (300, 500), (300, 550), (300, 600), (300, 650), (350, 650), (400, 50), (400, 100),
(400, 150), (400, 200), (400, 300), (400, 350), (400, 400), (400, 450), (400, 500), (400, 550), (400, 600), (400, 650),
(450, 200), (450, 300), (500, 100), (500, 200), (500, 300), (500, 400), (500, 450), (500, 500), (500, 550), (500, 600),
(500, 650), (550, 100), (550, 200), (550, 300), (550, 550), (600, 100), (600, 300), (600, 400), (600, 450), (600, 550),
(600, 650), (650, 100), (650, 150), (650, 200), (650, 250), (650, 300), (650, 400), (650, 450), (650, 550), (650, 650),
(650, 700), (650, 750), (700, 450), (0, 0), (50, 0), (100, 0), (150, 0), (200, 0), (250, 0), (300, 0),
(350, 0), (400, 0), (450, 0), (500, 0), (550, 0), (600, 0), (650, 0), (700, 0), (750, 0), (0, 50),
(0, 100), (0, 150), (0, 200), (0, 250), (0, 300), (0, 350), (0, 400), (0, 450), (0, 500), (750, 50),
(750, 100), (750, 150), (750, 200), (750, 250), (750, 300), (750, 350), (750, 400), (750, 450), (750, 500), (750, 550),
(750, 600), (750, 650), (750, 700), (50, 750), (100, 750), (150, 750), (200, 750), (250, 750), (300, 750), (350, 750),
(400, 750), (450, 750), (500, 750), (550, 750), (600, 750), (650, 750), (700, 750), (750, 750), (0, 200), (0, 250),
(0, 300), (0, 350), (0, 400), (0, 450), (0, 500), (0, 550), (0, 600), (0, 650), (0, 700), (0, 750)]
screen = pygame.display.set_mode((width, height))
game_over = False
clock = pygame.time.Clock()
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
a = player2_pos[0]
b = player2_pos[1]
if event.key == pygame.K_LEFT:
x -= player_speed
elif event.key == pygame.K_RIGHT:
x += player_speed
elif event.key == pygame.K_UP:
y -= player_speed
elif event.key == pygame.K_DOWN:
y += player_speed
elif event.key == pygame.K_a:
a -= player_speed
elif event.key == pygame.K_d:
a += player_speed
elif event.key == pygame.K_w:
b -= player_speed
elif event.key == pygame.K_s:
b += player_speed
if not (x, y) in border:
player_pos = [x,y]
if not (a, b) in border:
player2_pos = [a,b]
screen.fill(black)
pygame.draw.rect(screen, blue, (player_pos[0], player_pos[1], player_size, player_size))
pygame.draw.rect(screen, light_blue, (player2_pos[0], player2_pos[1], player_size, player_size))
for bpos in border:
pygame.draw.rect(screen, red, (*bpos, player_size, player_size))
pygame.display.update()
clock.tick(20)