复制代码 代码如下:
# -*- 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()