python小游戏——猜数字2.0

  前天完成了首个python小游戏,今天给它升级了下,加入了排名功能。用的次数少,排名在前十的,可以排到排行榜中。没有用数据库,太小,还用不上,写到了个文本文件中。

====================================================
gameMain.py 文件:

#_*_ coding: utf-8 _*_
from gameStart import gameStart
from scoreList import *
def showMenu() :
print '''
[ 猜数字游戏菜单 ]
==================================

<1> 开始游戏
<2> 高分排行榜
<3> 退出游戏
'''   

def selectAct() :
yourAct = raw_input(">> 请输入您想要执行的操作,并按回车键确认 :")
if yourAct == "1" :
gameStart()   
elif yourAct == "2" :
showScoreList()   
elif yourAct == "3" :
print ">> 游戏结束,谢谢您的参与。\n==================================="
else :
print ">> 没有指定的选项。"
selectAct()

def init():
showMenu()
selectAct()

init()

gameStart.py:

#_*_ coding: utf-8 _*_
import random,scoreList
def gameStart() :
>>print '''
[猜数字游戏开始]
==================================
'''
goalNum = random.randint(0,99)
tip = ">> 请您猜一个数字,此数字介于0~99之间:"
guessCount = 0
while True :
while True:
try:
yourNum = raw_input(tip)
yourNum = int(yourNum)
break
except:
print ">> 您输入的不是数字。"
tip = ">> 请您再猜:"
guessCount += 1
if yourNum < goalNum :
print ">> (您猜的数小了 T_T)"
elif yourNum > goalNum :
print ">> (您猜的数大了 T_T)"
else :
print ">> (恭喜您猜中了 ^0^ , 您共猜了 %s 次猜中了结果)" % guessCount
break

scoreList.updateScoreList(guessCount)
while True:
continueFlag = raw_input(">> 游戏结束。您还想再玩一次吗? y | n : ")
if continueFlag == "y" :
gameStart()
break
elif continueFlag == "n" :
print ">> 游戏结束,谢谢您的参与。\n==================================="
break
else :
print ">> 请您输入y或n"

scoreList.py:

#_*_ coding:utf-8 _*_
import os
scoreListFile = "scoreList.txt"
def showScoreList() :
print '''
[ 高分排行榜 ]
=================================

排名     姓名     次数
------------'''
if not os.path.exists(scoreListFile) :
for i in range(1,11) :
print "<%s>     暂缺     x" % formatNum(i)
else :
f = open(scoreListFile)
try :
lines = f.readlines();
for i in lines :
print i
finally :
f.close()

def updateScoreList(count) :
if os.path.exists(scoreListFile) :
f = open(scoreListFile,"r")
try :
lines = f.readlines()
i = 0;
for x in lines :
i += 1
if count < int(x.split()[2]) :
name = raw_input(">> 恭喜您进入前十的排名,请输入您的尊姓大名(不超过三个字): ")
name = name[:3]
string = "<%s>     %s     %s\n" % (formatNum(i),name,count)
lines[i-1] = string
f.close()
f = open(scoreListFile,"w")
f.writelines(lines)
f.flush()
break
else :
pass
finally :
f.close()       
else :
name = raw_input(">> 恭喜您进入前十的排名,请输入您的尊姓大名(不超过三个字): ")
name = name[:3]
string = "<%s>     %s     %s" % (formatNum(1),name,count)
for i in range(2,11) :
string += "\n<%s>     暂缺     9999" % formatNum(i)
f = open(scoreListFile,"w")
f.write(string)
f.flush()
f.close()

def formatNum(n) :
n = int(n)
if n < 10 :
return "0" + str(n)
else :
return n
====================================================

一点心得:
1) python中对文件的读写操作是分开的,要么是读要么是写,不能又读又写,如果想写先读后写,需要先open(file),然后在close(),再然后open(file,"w"),要关闭以前是不能进行写操作的。

2)  用write()方法写,有的时候还要注意调flush()方法将缓冲区的内容写到磁盘上,不然有可能会产生问题。

转载于:https://www.cnblogs.com/cly84920/archive/2010/07/14/4426739.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值