我正在使用库 pygame
在python中制作一个跳棋游戏,我相对较新 . 但是我遇到了程序的问题,其中创建了太多的红色和黑色部分并且它们的布局不正确 .
这些碎片只是用红色或黑色绘制的圆圈 . 为了获得碎片的布局,我在函数 newGameBoard()
中创建了一个2D数组,它放置了碎片的位置,但是当我在函数中迭代游戏板时, drawPieces()
在板的每一侧创建了一个24块的块,而不是片段在游戏板的位置创建 .
这是当前的代码:
import pygame
newGame=True
loggedIn=False
miniGame=False
black=(0,0,0)
white=(255,255,255)
red=(255,0,0)
greyBackground =(203, 206, 203)
# This sets the WIDTH and HEIGHT of each grid location
width=65
height=65
radius=30
margin=0# This sets the margin between each cell
xDistanceFromEdge=220
pygame.init()
gameBoard=[[None]*8]*8
windowSize= [960, 640]
screen = pygame.display.set_mode(windowSize)
pygame.display.set_caption("Draughts Game")
done = False
clock = pygame.time.Clock()
# -------- Main Program Loop -----------
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
# Change the x/y screen coordinates to grid coordinates
column = (pos[0]-xDistanceFromEdge) // (width+margin)
row = pos[1] // (height+margin)
screen.fill(greyBackground)
def boardGui(black,white):
for boardRow in range(8):
for boardColumn in range(8):
xCoordinate=((margin+width) * boardColumn + margin)+xDistanceFromEdge
yCoordinate=(margin+height) * boardRow + margin
if boardRow%2==0 and boardColumn%2==0:
currentColour = black
if boardRow%2!=0 and boardColumn%2==0:
currentColour = white
if boardRow%2==0 and boardColumn%2!=0:
currentColour = white
if boardRow%2!=0 and boardColumn%2!=0:
currentColour = black
pygame.draw.rect(screen,currentColour,[xCoordinate,yCoordinate, width, height])
def piecesGameBoard(gameBoard):
if newGame==True:
newGameBoard(gameBoard)
def newGameBoard(gameBoard):
for x in range(8):
for y in range(3):
if ((x%2!=0) and (y%2==0)) or ((x%2==0) and (y%2!=0)):
gameBoard[x][y]="NormalBlack"
for y in range(5,8):
if ((x%2==0) and (y%2==0)) or ((x%2!=0) and (y%2!=0)):
gameBoard[x][y]="NormalRed"
print(gameBoard)
drawPieces(gameBoard,black,red)
def drawPieces(gameBoard,black,red):
for x in range(8):
for y in range(8):
xCoordinate=((margin+width) * x + margin+32)+xDistanceFromEdge
yCoordinate=(margin+height) * y + margin+33
if gameBoard[x][y]=="NormalBlack":
pygame.draw.circle(screen,black,(xCoordinate,yCoordinate),radius)
if gameBoard[x][y]=="kingBlack":
pygame.draw.circle(screen,black,(xCoordinate,yCoordinate),radius)
#-----put letter k in the middle-----#
if gameBoard[x][y]=="NormalRed":
pygame.draw.circle(screen,red,(xCoordinate,yCoordinate),radius)
if gameBoard[x][y]=="KingRed":
pygame.draw.circle(screen,red,(xCoordinate,yCoordinate),radius)
#----put letter k in the middle---#
boardGui(black,white)
piecesGameBoard(gameBoard)
clock.tick(60)
pygame.display.flip()
pygame.quit()
我试图在 newGameBoard()
函数中创建但确实有效的部分 . 有了这个程序, gameBoard
在每次移动后都会改变,这就是为什么我希望程序以 gameBoard
变量的格式创建碎片 .
1 回答
这是我认为你的代码的一个版本 . 我认为主要的问题是你如何初始化
gameboard
变量:我改为:
因此,它会为每一行创建一个新的
None
值列,而不是在每一行中放置相同的列表 . 这是一个常见的Python新手"gotcha" .我还尝试在某种程度上清理,简化和组织代码结构 . 一个值得注意的变化是我将所有这些函数定义移到了主循环之外 - 因为没有理由不止一次这样做,它只会减慢执行速度 .
还有许多其他的优化可以完成,但是因为你还不适合这里 - 有另一个名为Code Review的网站用于那种事情),我没有实现其中的任何一个......
棋盘格显示: