如何创建播放器系统?

时间:2018-04-20 17:02:29

标签: python-3.x

我想创建一个国际象棋玩家系统,它返回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!")

无论如何,我可以做得更好吗?

1 个答案:

答案 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()中,而是提供它们以向您展示如何使用播放器对象。