我写了一个模拟田纳西游戏的程序。我从0-4开始计算积分,得到4分可以赢得比赛,我这样做只是作为一个临时解决方案。现在我差不多完成了,我不知道如何把分数改为0,15,30,40
这是我的班级:
class Players: #define class players
ratio = 0
def __init__(self, name, winningProb, wonGames, playedGames):
self.name = name
self.winningProb = winningProb
self.wonGames = wonGames
self.playedGames = playedGames
if playedGames == 0:
self.ratio = 0
else:
self.ratio = self.wonGames/self.playedGames
self.score = 0
def showPlayerInfo(self):
print(self.name, self.wonGames, self.playedGames, self.winningProb)
def playerInfo(self, position):
return [str(position), self.name, str(self.wonGames), str(self.playedGames), str(self.winningProb)]
def getWinningProb(self):
return self.winningProb
def getScore(self):
return self.score
def setScore(self, score):
self.score = score
def getName(self):
return self.name
def getWonGames(self):
return self.wonGames
def getPlayedGames(self):
return self.playedGames
定义游戏的函数:
def playGame(players, displayBoardPerBall, displayBoardPerGame, flag, pauseAfterBalls):
ballCounter = 0
while True:
if flag == 1:
flag = 2
if isWonTheBall(players[0]):
players[0].setScore(players[0].getScore() + 1)
else:
players[1].setScore(players[1].getScore() + 1)
elif flag == 2:
flag == 1
if isWonTheBall(players[1]):
players[1].setScore(players[1].getScore() + 1)
else:
players[0].setScore(players[0].getScore() + 1)
ballCounter += 1
if displayBoardPerBall:
print("\nBall scores until now")
print(players[0].name, players[0].getScore())
print(players[1].name, players[1].getScore())
print()
if pauseAfterBalls == ballCounter:
ballCounter = 0
nothing = input("Game Paused. Enter Any Letter To Continue.")
#whoWon stores 0 if nobody won
whoWon = checkGameWinner(players)
if whoWon!=0:
print("\n\nPlayer",whoWon+1,"won this game.")
players[0].setScore(0)
players[1].setScore(0)
return whoWon
if players[0].getScore() == 3 and players[1].getScore() == 3:
print("\nDEUCE!!\n")
不确定此功能是否有用,但它只是检查谁赢得了游戏:
def checkGameWinner(players):
if players[0].getScore() == 4 and players[1].getScore() <= 2:
return 1
if players[1].getScore() == 4 and players[0].getScore() <= 2:
return 2
if players[1].getScore() > 2 and players[0].getScore() > 2:
if players[1].getScore() >= players[0].getScore()+2:
return 2
elif players[0].getScore() >= players[1].getScore()+2:
return 1
return 0
感谢您的帮助!我试着算出一个方程式,这样它可以数到0,15,30,40,但无法算出一个可行的方程式
如果你有更多的代码,也许是主要的功能,只是评论,我会张贴它
如果您不想更改任何内部代码,可以编写一个简单的函数将分数转换为显示值
定义将分数转换为分数的函数
比如说
使用列表查找要显示的分数,在内部,您可以在每次得分时增加一个计数器
更好的实现还可以检查无效分数,以防止读取超过数组末尾,但如果在类中实现,则应该在set/increment score方法中执行此操作
使用类的优点是封装逻辑,对使用类的代码隐藏逻辑。要保持分数,可以将此代码的逻辑移入类中:
将
setScore
方法替换为incrementScore
,因为对象已经知道其当前分数然后,您可以从更改您的分数代码
对此
此代码不处理'deuce'和'advantage'的情况,但由于可以在python数组中混合字符串和整数,因此可以在玩家的分数增加时将它们添加到
display_score
列表和一些额外的逻辑中。我把它留给你去试一下通过删除
setScore
方法,可以防止有人将玩家分数更改为某个愚蠢的值(如-10或236),从而简化对无效分数的检查。一旦删除了分数设置,您还需要使用reset_score
等方法将分数设置为零,以便下一场比赛目前,您的类是一组方法,可以直接访问成员变量,转而使用方法对对象执行一些操作,这有助于抽象。您可能会发现这篇关于why getter and setter methods are evil的文章很有趣,它是关于Java编写的,但该原则适用于所有面向对象语言
相关问题 更多 >
编程相关推荐