您的位置:首页 > 编程语言 > Python开发

零基础学python-3.6 根据模块结构 改进我们的游戏

2015-08-16 00:22 716 查看
回顾一下我们的游戏:

#建立游戏的核心玩法类
class core(object):
version=1.0
def guessNum(self):
try:
secret=random.randint(1,100)#生成随机数
#print (secret)
time=6#猜数字的次数
guess=0#输入的数字
minNum=0#最小随机数
maxNum=100#最大随机数
print("---------欢迎来到猜数字的地方,请开始---------")
print("提示:输入-1可以随时退出游戏")
while guess!=secret and time>=0:#条件
guess=int(input("*数字区间0-100,请输入你猜的数字:"))
print("你输入数字是:",guess)
if guess==secret:
return (7-time)#为什么是7,因为我们上面的条件是0-6,所以是7次
print("猜对了,真厉害")
elif guess==-1:
print("提示:你强行退出,这一次不记录成绩")
return 'exit'
else:
#当不等于的时候,还需要打印出相应的区间,让用户更容易使用
if guess<secret:
if minNum<guess:
minNum=guess
print("提示:你的猜数小于正确答案")
print("提示:正确的数字区间是:",minNum,"-",maxNum)
else:
if maxNum>guess:
maxNum=guess
print("提示:你的猜数大于正确答案")
print("提示:正确的数字区间是:",minNum,"-",maxNum)
print("太遗憾,你猜错了,你还有",time,"次机会")
guess=0
time-=1
except TypeError as e:
print("你输入有误,成绩作废")
return 'exit'
except ValueError as e:
print("你输入有误,成绩作废")
return 'exit'

class User(object):
userName=""#用户名
resultDict={}#结果列表
playTime=1#玩的次数
def setUserName(self,name='ray'):
self.userName=name
def setResultDict(self,guessTime):
self.resultDict[self.playTime]=guessTime
self.playTime+=1

#下面是运行代码,类似于java的main函数
import random
import datetime

exitAllTag=0#记录是否全部退出游戏,1:退出
exitGameTag=0#记录是否退出个人游戏部分,1:退出
userDict={}#记录用户组数据
result=''#猜数字游戏返回的结果
#处理逻辑:
#1.先输入名称,如果不是退出,可以直接进入游戏
#2.进行游戏的过程中,可以一直玩,也可以强退,强退没成绩
#3.當用戶進行完遊戲,記錄用戶的成績
#4.噹所有的用戶都退出後,打印所有的成績
while exitAllTag!=1:
userName=input("请输入你的名字:")
#设置用户的名字
user=User()
user.setUserName(userName)
exitGameTag=0
if userName=='exit':
exitAllTag=1
break;
else:
#进行游戏
while exitGameTag!=1:
result=core().guessNum()#这里存在性能问题,最好使用单例模式
if result=='exit':
exitGameTag=1
#当用户退出时,把成绩记录下来
userDict[userName]=user.resultDict;
break
else:
#设置用户的结果
user.setResultDict(result)
for e in user.resultDict:
print(e,user.resultDict[e])
print("游戏结束")
#输出所有人的成绩
for name in userDict:
print("用户的名字:"+name)
for e in userDict[name]:
print(e,userDict[name][e])
try:
handler=open("results.txt",'w')
for name in userDict:
now = now.strftime("%Y-%m-%d %H:%M:%S")
handler.write("记录的时间:"+now)
handler.write("用户的名字:"+name)
for e in userDict[name]:
handler.write(e)
handler.write(userDict[name][e])
handler.close()
except IOError as e:
print(e)


改进的地方:

1. 把打印成绩封装成函数

2.把持久化成绩封装成函数

3.在类与函数的地方加上文档字符串,使得更加清晰

'GuessNum.py--猜数字游戏'

import random
import time

#建立游戏的核心玩法类
class core(object):
'core -- 核心类'
version=1.0
def guessNum(self):
'guessNum -- 猜数字核心方法'
try:
secret=random.randint(1,100)#生成随机数
#print (secret)
time=6#猜数字的次数
guess=0#输入的数字
minNum=0#最小随机数
maxNum=100#最大随机数
print("---------欢迎来到猜数字的地方,请开始---------")
print("提示:输入-1可以随时退出游戏")
while guess!=secret and time>=0:#条件
guess=int(input("*数字区间0-100,请输入你猜的数字:"))
print("你输入数字是:",guess)
if guess==secret:
return (7-time)#为什么是7,因为我们上面的条件是0-6,所以是7次
print("猜对了,真厉害")
elif guess==-1:
print("提示:你强行退出,这一次不记录成绩")
return 'exit'
else:
#当不等于的时候,还需要打印出相应的区间,让用户更容易使用
if guess<secret:
if minNum<guess:
minNum=guess
print("提示:你的猜数小于正确答案")
print("提示:正确的数字区间是:",minNum,"-",maxNum)
else:
if maxNum>guess:
maxNum=guess
print("提示:你的猜数大于正确答案")
print("提示:正确的数字区间是:",minNum,"-",maxNum)
print("太遗憾,你猜错了,你还有",time,"次机会")
guess=0
time-=1
except TypeError as e:
print(e)
print("你输入有误,成绩作废")
return 'exit'
except ValueError as e:
print(e)
print("你输入有误,成绩作废")
return 'exit'

class User(object):
'User -- 记录用户数据'
userName=""#用户名
resultDict={}#结果列表
playTime=1#玩的次数
def setUserName(self,name='ray'):
self.userName=name
def setResultDict(self,guessTime):
self.resultDict[self.playTime]=guessTime
self.playTime+=1

def printResults(userDict):
'printResults --输出所有人的成绩'
for name in userDict:
print("用户的名字:"+name)
for e in userDict[name]:
print(e,userDict[name][e])

def persistResults(fileName,userDict):
'持久化成绩'
try:
handler=open(fileName,'w')
for name in userDict:
now = time.strftime("%Y-%m-%d %H:%M:%S")
handler.write("记录的时间:"+now)
handler.write("用户的名字:"+name)
for e in userDict[name]:
handler.write(e)
handler.write(userDict[name][e])
handler.close()
except IOError as e:
print(e)

if __name__=='__main__':
'下面是主程序'
exitAllTag=0#记录是否全部退出游戏,1:退出
exitGameTag=0#记录是否退出个人游戏部分,1:退出
userDict={}#记录用户组数据
result=''#猜数字游戏返回的结果
#处理逻辑:
#1.先输入名称,如果不是退出,可以直接进入游戏
#2.进行游戏的过程中,可以一直玩,也可以强退,强退没成绩
#3.當用戶進行完遊戲,記錄用戶的成績
#4.噹所有的用戶都退出後,打印所有的成績
while exitAllTag!=1:
userName=input("请输入你的名字:")
#设置用户的名字
user=User()
user.setUserName(userName)
exitGameTag=0
if userName=='exit':
exitAllTag=1
break;
else:
#进行游戏
while exitGameTag!=1:
result=core().guessNum()#这里存在性能问题,最好使用单例模式
if result=='exit':
exitGameTag=1
#当用户退出时,把成绩记录下来
userDict[userName]=user.resultDict;
break
else:
#设置用户的结果
user.setResultDict(result)
for e in user.resultDict:
print(e,user.resultDict[e])
print("游戏结束")
#输出所有人的成绩
printResults(userDict);
#持久化成绩
persistResults("results.txt",userDict);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: