Python: 练习作品-猜数字游戏
代码说明:
这段小游戏是学了循环和函数后的练习作品,使用python2.7通过eclipse编写,使用def函数封装功能,使用list数组进行数据的临时管理,没有做本地文件保存或数据库操作。也许后面还会对它进行class对象封装改造
游戏规则:
- 程序会随机给出一个999以内的数字
- 玩家输入一个猜测答案看看是否猜中
- 游戏会记录你的猜测成绩,并且可以查询
- 每次猜测游戏通过5种情况来暗示你与答案的差距
- 玩家通过不同的暗示来调整自己的回答,以求最快猜中数字
- 游戏金手指是输入999999直接猜中答案
- 游戏彩蛋是极短次数猜中会增加天才战绩
- 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()