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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
python实现的系统实用log类实例
Jun 30 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
numpy linalg模块的具体使用方法
May 26 Python
使用python模拟命令行终端的示例
Aug 13 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python中使用.py配置文件的方法详解
Nov 23 Python
python复合条件下的字典排序
Dec 18 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分页示例代码
2007/03/19 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
js常见表单应用技巧
2008/01/09 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
python实现小球弹跳效果
2019/05/10 Python
Python登录系统界面实现详解
2019/06/25 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
python的列表List求均值和中位数实例
2020/03/03 Python
Python多线程多进程实例对比解析
2020/03/12 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
python数字图像处理实现图像的形变与缩放
2022/06/28 Python