#python #pygame
#питон #pygame
Вопрос:
для проекта я нахожусь в точке, где я в настоящее время рисую доску, у меня есть окно pygame, однако квадраты не будут отображаться поверх команды заполнения экрана, я пытался избавиться от команды, изменив цвета, но я не знаю, почему квадраты просто не будут отображаться в окне. Любая помощь будет признательна
import pygame as p import chessEngine p.init() WIDTH = HEIGHT = 512 #400 is another option DIMENSION = 8 #dimensions of a chess board are 8x8 SQ_SIZE = HEIGHT//DIMENSION MAX_FPS = 30 #for animations IMAGES = {} def loadImages(): pieces = ['wp','wR','wN','wB','wK','wQ','bp','bR','bN','bB','bK','bQ'] for piece in pieces: IMAGES[piece] = p.transform.scale(p.image.load("images/" piece ".png"), (SQ_SIZE, SQ_SIZE)) #Note: we can access an image by saying 'IMAGES['wp']' def main(): p.init() screen = p.display.set_mode((WIDTH, HEIGHT)) clock = p.time.Clock() screen.fill(p.Color("white")) gs = chessEngine.GameState() loadImages() running = True while running: for e in p.event.get(): if e.type == p.QUIT: running = False clock.tick(MAX_FPS) p.display.flip() def drawGameState(screen, gs): drawBoard(screen) drawPieces(screen, gs.board) def drawBoard(screen): colors = [p.Color("white"), p.Color("gray")] for r in range(DIMENSION): for c in range(DIMENSION): color = colors[((r c) % 2)] p.draw.rect(screen, color, p.Rect(c*SQ_SIZE, r*SQ_SIZE, SQ_SIZE, SQ_SIZE)) def drawPieces(screen, board): pass if __name__ == "__main__": main() drawGameState()```
Ответ №1:
Ваш основной должен вызывать drawGameState, и он не должен вызываться вне основного
def main(): p.init() screen = p.display.set_mode((WIDTH, HEIGHT)) clock = p.time.Clock() screen.fill(p.Color("white")) gs = ChessEngine.GameState() print(gs.board) load_images() # only operated once running = True while running: for e in p.event.get(): if e.type == p.QUIT: running = False drawGameState((screen, gs)) clock.tick(MAX_FPS) p.display.flip()
Ответ №2:
Вы должны вызвать drawGameState()
цикл приложения вместо завершения приложения:
def main(): # [...] while running: for e in p.event.get(): if e.type == p.QUIT: running = False drawGameState(screen, gs) # lt;--- INSERT p.display.flip() clock.tick(MAX_FPS) # [...] if __name__ == "__main__": main() # drawGameState() lt;--- DELETE