Python: 练习作品-猜数字游戏

代码说明:

这段小游戏是学了循环和函数后的练习作品,使用python2.7通过eclipse编写,使用def函数封装功能,使用list数组进行数据的临时管理,没有做本地文件保存或数据库操作。也许后面还会对它进行class对象封装改造

游戏规则:

  • 程序会随机给出一个999以内的数字
  • 玩家输入一个猜测答案看看是否猜中
  • 游戏会记录你的猜测成绩,并且可以查询
  • 每次猜测游戏通过5种情况来暗示你与答案的差距
  • 玩家通过不同的暗示来调整自己的回答,以求最快猜中数字
  • 游戏金手指是输入999999直接猜中答案
  • 游戏彩蛋是极短次数猜中会增加天才战绩
如何运行它?保存为py文件后,
  • Windows - 电脑安装有python2.7,打开idle并执行py文件
  • Android - 请安装Qpython后运行py文件即可
  • Linux/Mac - 大部分自带python,如果版本正好是2.7,直接在终端运行py文件
#! /usr/bin/python
#    coding:utf8
'''
功能:猜数字游戏0.2版
编写人:AT
修改日期:160226
概要设计:修复退出print变量错误,次数消耗完错误,IDLE与Linux与Android共用一个unix版本 
'''
import random,time
#variable
num0=10            #随机数字
num1=11            #猜测数字
maxtimes=20        #允许猜测最大次数
guessno=0          #猜测次数
grade=[]           #战绩表
gradegreat=0       #天才猜测次数
gradecount=0       #猜数字总次数
#fuction
def main():
    global i0,i1,name,num0,num1,guessno,grade,gradegreate,gradecount
    guide()                                    #游戏说明
    databuild()                                #玩家数据
    if name!="quit" and name!="QUIT":
        i0=0
        while i0==0:
            numberrandom()                    #产生随机整数
            inviteplayer()                    #邀请玩家猜测
            i1=0
            while i1==0 and maxtime>0:        #maxtime在numberrundle
                numberguess_input()           #玩家输入数字
                if num1==0:
                    i1=1
                    i0=1
                    quit()
                elif num1==1:
                    i1=1
                    dataquery()                #战绩信息查询
                elif num1==999999:
                    print "金手指开启!",
                    print "犹如天助,直接正确了!!"
                    num1=num0
                    numberguess_check()
                elif num1>=10 and num1<=999:
                    numberguess_check()        #验证答案
                else:
                    print "该菜单未开发。。。"
            dataappend()                       #写入本次成绩
    else:
        print "=======游戏结束!==========="        
def guide():
    print "==================================="
    print "==       猜数字游戏 0.1版 "
    print "==	神秘数字 10~999"
    print "==	错的离谱 距离答案500以上"
    print "==	差距较大 距离答案200以上"
    print "==	正在接近 距离答案100以上"
    print "==	非常接近 距离答案20以上"
    print "==	近在眼前 距离答案20以内"
    print "==		    --AT 16-02-24"
    print "==================================="
def databuild():
    global name,grade    
    name=raw_input("请输入你的名字开始游戏:(quit则退出)")#玩家名字
    grade.append(name)
def numberrandom():
    global num0,guessno,maxtime,numcheckold
    numcheckold=999
    maxtime=maxtimes
    guessno=0
    num0=random.randint(10,999)
    print "提示:神秘数字已经产生!!"
def inviteplayer():
    global num1
    print "提示:猜数字游戏开始!"
    print "提示:输入10-999之间的整数。"
    print "提示:0为退出 1为查询战绩"
def wait():
    temp01=raw_input("-----回车继续----:  ")
def numberguess_input():
    global num1,maxtime
    i2=0
    while i2==0:
        try:
            i2=1
            num1=int(raw_input("你猜是什么数字?: "))
        except ValueError:
            i2=0
            print "输入错误!请输入数字: "
def numberguess_check():
    global i1,num0,num1,numold,numcheckold,maxtime,guessno,gradegreat,gradecount
    numcheck=abs(num1-num0)
    maxtime=maxtime-1
    guessno=guessno+1
    if maxtime>0:
        if guessno>1 and numcheck>0:#第二次开始告诉玩家比上次猜测更远或更近
            if numcheckold<numcheck:
                print "唉,越猜越远,",
            elif numcheckold==numcheck and numold<>num1:#产生会心一击
                print "!!! 您猜出了会心一击!答案就在两次猜测数字正中间!"
                print "恭喜!天才猜测战绩+1 !!"
                gradegreat=gradegreat+1
            elif numcheckold>numcheck:
                print "哈!近了一步!",
            elif num1==numold:
                print "任性!重复了!",
        elif guessno==1:
            print "天才的第一步:",
        if numcheck>500 :#再告诉玩家本次猜测距离答案的大概差距
            print ("错得离谱!!!!!剩余%d次")%maxtime
        elif numcheck>200 and numcheck<=500:
            print ("差距较大>>>>>剩余%d次")%maxtime
        elif numcheck>100 and numcheck<=200:
            print ("正在接近>>>  剩余%d次")%maxtime
        elif numcheck>20 and numcheck<=100:
            print ("非常接近>>   剩余%d次")%maxtime
        elif numcheck>0 and numcheck<=20:
            print ("近在眼前,即将成功!剩余%d次")%maxtime
        elif numcheck==0:
            print ("恭喜 %s !你猜对了数字,答案正是%d!!")%(name,num0)
            print ("恭喜 %s !本次猜测一共用了%d次!")%(name,guessno)
            if (20-maxtime)<10 and (20-maxtime)>5:#对猜测成功的战绩进行评价
                print ("恭喜 %s !这是一次天才般的表现!你的智商与运气俱佳!")%name
                print ("恭喜 %s !天才猜测战绩+1 !")%name
                gradegreat=gradegreat+1
            elif (20-maxtime)<=5:
                print ("恭喜 %s !你的表现另人惊叹!你的智商如同妖孽一般,气运逼人!!")%name
                print ("恭喜 %s !天才猜测战绩+3 !!!")%name
                gradegreat=gradegreat+3
            gradecount=gradecount+1
            i1=1
            print ("本次猜数字完成,请迎接下一波挑战……")
            wait()
    else:
        print ("失败! %s 你的机会已耗尽!正确答案是[ %d ]")%(name,num0)
        wait()
    numcheckold=numcheck
    numold=num1
def dataappend():
    global num0,guessno,grade,gradecount
    if numcheckold==0:
        runtime=time.strftime("%H:%M", time.localtime()) 
        dictgrade={"NO":gradecount,
                   "Result":num0,
                   "Used":guessno,
                   "Time":runtime}
        grade.append(dictgrade)
def dataquery():
    global guessno,gradegreat,gradecount
    print ("====== 玩家 %s 战绩表   =====")%grade[0]
    if len(grade)>1:
        for i in range(len(grade)-1):
            i=i+1
            print ("第%d次,猜数字%d,耗费%d次,于%s完成")%(grade[i]["NO"],grade[i]["Result"],grade[i]["Used"],grade[i]["Time"])
    print ("统计:天才战绩%d分,总成功猜测%d次")%(gradegreat,gradecount)    
    wait()
def quit():
    global name,gradegreat,gradecount
    if gradecount==0:
        print ("%s您一共猜了%d次,获得天才猜测%d分,灵光率为%d%%....")%(name,gradecount,gradegreat,gradecount)
    else:
        print ("%s您一共猜了%d次,获得天才猜测%d分,灵光率为%d%%....")%(name,gradecount,gradegreat,gradegreat*100/gradecount)
    print "=======游戏结束!==========="    
#call
main()