파이썬 2.7을 사용하고 있습니다. 문자열 기반 수준을 다시 그리는 데 문제가 있습니다. 첫 번째 프레임에서는 괜찮 았지만 이후에는 더 이상 그려지지 않습니다. 나는 잠시 동안 고쳐지려고 노력 중이다.파이 게임 문자열 기반 레벨 그리기가 한번 사라집니다.
import pygame
from pygame.locals import *
xScan = 0
yScan = 0
level = "WWWWWWWW" \
"WSSSSSSW" \
"WSSSSSSW" \
"WSSSSSSW" \
"WSSSSSSW" \
"WWWWWWWW"
class Player():
def __init__(self, color, x, y, width, height, outline_size):
self.color = color
self.x = x
self.y = y
self.width = width
self.height = height
self.outline_size = outline_size
def draw(self):
pygame.draw.rect(screen, self.color, [self.x * 80, self.y * 80, self.width * 80, self.height * 80], self.outline_size)
def draw_level():
for tile in level:
global xScan, yScan
if tile == "W":
pygame.draw.rect(screen, [0, 0, 0], [xScan * 80, yScan * 80, 80, 80], 0)
elif tile == "S":
pygame.draw.rect(screen, [120, 120, 120], [xScan * 80, yScan * 80, 80, 80], 1)
if xScan >= 0 and xScan < 7:
xScan += 1
elif xScan == 7:
xScan = 0
yScan += 1
elif yScan == 5 and xScan == 7:
xScan = 0
yScan = 0
def update():
screen.fill([255, 255, 255])
draw_level()
player.draw()
pygame.display.flip()
pygame.init()
screen = pygame.display.set_mode([640, 480])
pygame.display.set_caption("Squares n' Tiles!")
player = Player([0, 100, 255], 1, 1, 1, 1, 0)
running = True
while running:
clock = pygame.time.Clock()
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == K_ESCAPE:
running = False
if event.key == K_UP and player.y * 80 >= 160:
player.y -= 1
if event.key == K_DOWN and player.y * 80 < 320:
player.y += 1
if event.key == K_LEFT and player.x * 80 >= 160:
player.x -= 1
if event.key == K_RIGHT and player.x * 80 < 480:
player.x += 1
if event.key == K_c or event.key == K_r:
player.x = 1
player.y = 1
if event.type == pygame.QUIT:
running = False
update()
pygame.quit()
나는 문제가 코드의이 부분 내에있는 생각 :
def draw_level():
for tile in level:
global xScan, yScan
if tile == "W":
pygame.draw.rect(screen, [0, 0, 0], [xScan * 80, yScan * 80, 80, 80], 0)
elif tile == "S":
pygame.draw.rect(screen, [120, 120, 120], [xScan * 80, yScan * 80, 80, 80], 1)
if xScan >= 0 and xScan < 7:
xScan += 1
elif xScan == 7:
xScan = 0
yScan += 1
elif yScan == 5 and xScan == 7:
xScan = 0
yScan = 0
내가 이전 부분의 후반의 숫자 장난 해봤 여기에 전체 소스 코드입니다.
if xScan >= 7:
xScan = 0
yScan += 1
elif yScan == 6:
xScan = 1
yScan = 0
else:
xScan += 1
위의 코드 유일한 문제는 왼쪽 상단 타일 그릴하지 않는다는 것입니다 : 여기에 (그 형식은 매우 일치하지 않습니다 불구하고) 대부분 문제가 해결되는 하나의 변형이다. 제대로 작동하도록 코드를 어떻게 바꿀 수 있습니까? 모든 프레임에서 화면을 흰색으로 채우고 수준을 다시 그려서 플레이어가 다시 그려지며 화면이 뒤집혀지기를 바랍니다. 모든 도움을 미리 감사드립니다. 또한 코드 구조에 대한 조언을 주시면 감사하겠습니다.
elif yScan == 5 and xScan == 7:
xScan = 0
yScan = 0
당신이 level
문자열의 각 문자를 통해 반복하고 있기 때문입니다, 그래서 도달 한 최대 값이 XSCAN = 6, yScan = 5 :
감사합니다. 감사합니다. – Mikeureko