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()