Posted in Python onSeptember 02, 2013
# -*- coding: utf-8 -*- import random #数字类 class NumberItem: #数字个数 _GUESS_NUMBER_COUNT_ = 4 def __init__(self): self._num_ = [] #长度是否标准 def IsFormat(self): return self._num_.__len__() == self._GUESS_NUMBER_COUNT_ #生成随机数 def RestRandomNumber(self): allNum = range(10) for index in range(self._GUESS_NUMBER_COUNT_): self._num_.append(allNum.pop(random.randrange(10-index))) #校验输入数 def CheckNumber(self, input_number): result = NumberCheckResult() for index in range(self._GUESS_NUMBER_COUNT_): if (input_number._num_[index] == self._num_[index]): result.Add_A() elif(input_number._num_[index] in self._num_): result.Add_B() return result #返回字符串 def GetNumber(self): return self._num_ #竞猜结果 xAxB class NumberCheckResult: def __init__(self): self._guess_A_ = 0 self._guess_B_ = 0 def GetCheckResult(self): return '%d A %d B' % (self._guess_A_, self._guess_B_) def Add_A(self): self._guess_A_ += 1 def Add_B(self): self._guess_B_ += 1 #竞猜历史项 class GuessHisItem: def __init__(self): self._guessNum_ = NumberItem() self._guessResult_ = NumberCheckResult() def ShowItem(self): print self._guessNum_.GetNumber() , ' - ' , self._guessResult_.GetCheckResult() #游戏类 class GuessNumberGame(): #机会次数 _MAX_GUESS_TIMES_ = 8 def __init__(self): self.ResetGameDate() #重置游戏数据 def ResetGameDate(self): self._guessNum_ = NumberItem() self._guessHis_ = [] def GetGuessTimes(self): return self._guessHis_.__len__() #输入字符串的格式转换 def ChangeInputNumberFormat(self, numberStr): parseNum = NumberItem() if (numberStr.isdigit()): for eachNum in numberStr: parseNum._num_.append(int(eachNum)) return parseNum #打印竞猜历史 def ShowGuessHis(self): print '' print '你已经猜了 %d次, 总共%d次机会' % (self.GetGuessTimes(), self._MAX_GUESS_TIMES_) print '' for eachItem in self._guessHis_: eachItem.ShowItem() print '' def ShowHelp(self): print '' print '输入 \'help\' 显示命令列表.' print '输入 \'his\' 显示竞猜历史' print '输入 \'cheat\' 显示作弊结果' print '输入 \'quit\' 结束游戏' print '' def ShowCheat(self): print '' print '要猜的数字是 ', self._guessNum_.GetNumber() print '' def StartOneGame(self): self.ResetGameDate() print '开始猜数字游戏!' self._guessNum_.RestRandomNumber() print '随机号码 [*' + ',*'*(self._guessNum_._GUESS_NUMBER_COUNT_-1) + ']已经生成,你有%d次机会!' % self._MAX_GUESS_TIMES_ #猜中标志 guess_result = False quit_flag = False while (self.GetGuessTimes() < self._MAX_GUESS_TIMES_ and guess_result != True and quit_flag != True): print '你还剩%d次机会,输入你猜的数字:' % (self._MAX_GUESS_TIMES_- self.GetGuessTimes()) input_str = raw_input(); if (input_str == 'help'): self.ShowHelp() elif(input_str == 'his'): self.ShowGuessHis() elif(input_str == 'cheat'): self.ShowCheat() elif(input_str == 'quit'): quit_flag = True else: #转换输入并校验 hisItem = GuessHisItem() hisItem._guessNum_ = self.ChangeInputNumberFormat(input_str) if (hisItem._guessNum_.IsFormat() != True): print '数字格式错误, 重新输入!' else: #竞猜历史 hisItem._guessResult_ = self._guessNum_.CheckNumber(hisItem._guessNum_) self._guessHis_.append(hisItem) hisItem.ShowItem() #猜中 if (hisItem._guessResult_._guess_A_ == NumberItem._GUESS_NUMBER_COUNT_): guess_result = True print '恭喜,你猜中了数字' , self._guessNum_.GetNumber() , ' 用了%d次机会' % self.GetGuessTimes() elif(self.GetGuessTimes() == self._MAX_GUESS_TIMES_ ): print '' print '挑战失败,你已经猜了%d次,' % self.GetGuessTimes(), '正确的数字是', self._guessNum_.GetNumber() return quit_flag def StartGame(self): quit_flag = False while(quit_flag != True): quit_flag = self.StartOneGame() if (quit_flag != True): print '' print '再玩一局?(Y/N)' input_str = raw_input(); if (input_str != 'Y'): quit_flag = True print '再见!' ###### MAIN ####### if __name__ == '__main__': game = GuessNumberGame() game.StartGame()
Python版的文曲星猜数字游戏代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@