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


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 相关文章推荐
Django在win10下的安装并创建工程
Nov 20 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
tensorflow识别自己手写数字
Mar 14 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
Python3字符串encode与decode的讲解
Apr 02 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python中字符串List按照长度排序
Jul 01 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
Python生成器next方法和send方法区别详解
May 30 Python
django中websocket的具体使用
Jan 22 Python
pytyon 带有重复的全排列
Aug 13 #Python
python不带重复的全排列代码
Aug 13 #Python
python在多玩图片上下载妹子图的实现代码
Aug 13 #Python
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 #Python
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 #Python
python 合并文件的具体实例
Aug 08 #Python
python备份文件以及mysql数据库的脚本代码
Jun 10 #Python
You might like
PHP默认安装产生系统漏洞
2006/10/09 PHP
PHP脚本的10个技巧(8)
2006/10/09 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
浅谈layui里的上传控件问题
2019/09/26 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
《谁的本领大》教后反思
2014/04/25 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
如何才能写好调研报告?
2019/07/03 职场文书