回顾一下我们的游戏:
#建立游戏的核心玩法类 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);
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-29 03:38:02