pygame не удается сгенерировать шахматную сетку, не уверен в происхождении ошибки

#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