我想创建一个国际象棋玩家系统,它返回1或0与plauers转弯相反,例如: 1为白色,0为黑色。
这是我目前创建的内容:
def PlayerTurn(self):
WhitePlayer = True
BlackPlayer = False
#while not TurnNotFinshed == False
while True:
if WhitePlayer == True:
BlackPlayer == False
print("White Players Turn!")
elif BlackPlayer == True:
WhitePlayer == False
print("Black Players Turn!")
无论如何,我可以做得更好吗?
答案 0 :(得分:0)
首先,你有一个无限循环。如果您打算在该功能中玩整个游戏,则应将其重命名为PlayGame
。我假设您每回合都会调用一次该函数,并且循环的唯一原因是用户输入了非法输入并且您正在重试它。
这是一种做你上面做过的事情的方法。
class Chessgame:
white_turn = False
def PlayerTurn(self):
self.white_turn = not self.white_turn
done = False
while not done:
if self.white_turn:
print("White Player's turn")
else
print("Black Player's turn")
... logic to get and verify player's input here ...
done = True
但那并不是你所要求的,这是一个根据轮到它返回0或1的函数。这里的代码允许你调用一个函数告诉你轮到它(但没有0或1),你可以多次调用该函数,另一个函数可以前进到下一个玩家:< / p>
class Chessgame:
turn = 1
def whiteTurn(self):
return (self.turn & 1) == 1
def endTurn(self):
turn += 1
whiteTurn
如果是白色,则返回True,如果黑色则返回,则返回False。每当当前玩家的回合结束时,请致电endTurn()
。 (turn & 1
如果转为奇数则求值为1,否则求零。&
是按位AND运算符。)
另一个改进是拥有Player对象,如下所示:
class Player:
def __init__(self, color):
self.color = color
def __str__(self):
return self.color
class Chessgame:
players = (Player("white"), Player("black"))
turn = 0
def player(self):
return self.players[self.turn & 1]
def endTurn(self):
print("Turn over for", self.player())
self.turn += 1
print("Turn starts for", self.player())
我实际上不会将打印语句放在endTurn()
中,而是提供它们以向您展示如何使用播放器对象。