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 相关文章推荐
用Python设计一个经典小游戏
May 15 Python
python监控linux内存并写入mongodb(推荐)
Sep 11 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
Python基础之操作MySQL数据库
May 06 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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 5.5版本的array_column()函数
2014/10/24 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python实现list反转实例汇总
2014/11/11 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
python多线程抽象编程模型详解
2019/03/20 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
校园安全检查制度
2014/02/03 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
新学期开学标语
2014/06/30 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python