Python版的文曲星猜数字游戏代码

318次阅读  |  发布于5年以前

复制代码 代码如下:

-- 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._guessA = 0
self._guessB = 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()          

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8