用python在pygame中制作一个8\*8的棋盘

新手上路,请多包涵

我想用 python 在 pygame 中制作一个棋盘。只有带有 for 循环的棋盘。我尝试了几种方法来做到这一点,但我没有弄清楚它到底是什么。这是我的代码:

 import pygame
pygame.init()

#set color with rgb
white,black,red = (255,255,255),(0,0,0),(255,0,0)

#set display
gameDisplay = pygame.display.set_mode((800,600))

#caption
pygame.display.set_caption("ChessBoard")

#beginning of logic
gameExit = False

lead_x = 20
lead_y = 20

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

#For loop for chessboard

#draw a rectangle
gameDisplay.fill(white)
pygame.draw.rect(gameDisplay, black, [lead_x,lead_y,20,20])
pygame.display.update()

#quit from pygame & python
pygame.quit()
quit()

现在我需要专家建议 python 代码会是什么。我只想在我的屏幕上显示一个棋盘。就是这样。

原文由 user7670579 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

可能的解决方案,也许不是最优雅的,但您可以循环创建正方形

#Size of squares
size = 20

#board length, must be even
boardLength = 8
gameDisplay.fill(white)

cnt = 0
for i in range(1,boardLength+1):
    for z in range(1,boardLength+1):
        #check if current loop value is even
        if cnt % 2 == 0:
            pygame.draw.rect(gameDisplay, white,[size*z,size*i,size,size])
        else:
            pygame.draw.rect(gameDisplay, black, [size*z,size*i,size,size])
        cnt +=1
    #since theres an even number of squares go back one value
    cnt-=1
#Add a nice boarder
pygame.draw.rect(gameDisplay,black,[size,size,boardLength*size,boardLength*size],1)

pygame.display.update()

原文由 DJK 发布,翻译遵循 CC BY-SA 3.0 许可协议

更有效的方法是在初始化时绘制一次板,然后只 blit 那个表面:

 cellSize = 20
board = Surface((cellSize * 8, cellSize * 8))
board.fill((255, 255, 255))
for x in range(0, 8, 2):
    for y in range(0, 8, 2):
        pygame.draw.rect(board, (0,0,0), (x*size, y*size, size, size))

然后在你的循环中你首先绘制板面:

 gameDisplay.blit(board, board.get_rect())
# Draw your game pieces

原文由 wyattis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题