Python版的文曲星猜数字游戏代码
admin
2023-07-31 02:02:27
0

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

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...