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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
python端口扫描系统实现方法
Nov 19 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
python发送邮件脚本
May 22 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python创建n行m列数组示例
Dec 02 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
jupyter实现重新加载模块
Apr 16 Python
Django中session进行权限管理的使用
Jul 09 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
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
javascript 函数参数限制说明
2010/11/19 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
简单实现python爬虫功能
2015/12/31 Python
简单谈谈python中的多进程
2016/11/06 Python
Python中异常重试的解决方案详解
2017/05/05 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
全球在线商店:BerryLook
2019/04/14 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
党员培训思想汇报
2014/01/07 职场文书
素质拓展感言
2014/01/29 职场文书
户外婚礼策划方案
2014/02/08 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
装修施工安全责任书
2014/07/24 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers