代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
猜数字游戏
作者:
EU软件工作室
/ 发布于
2013/3/18
/
609
# -*- coding: utf-8 -*- """名称:猜数字 All by EU软件工作室(http://t.qq.com/euoffice) 规则:系统自动生成一个不包含重复数字的四位数整数,在提示符下玩家输入一个不包含重复数字的四位数整数,根据系统提示调整输入,最终猜出目标数字。 提示:2对3有,说明刚输入的数字中有3个数包含在目标数字中,且有2个数字位置也正确。 数字命令: + 0000:显示闯关记录。 + 1000:重过当前关卡。 + 1111:跳关。 + 9999:退出程序。 """ import random,pickle history=[] __author__='EU软件工作室' def isRepeat(s): '''检查参数是否包含重复数字''' b=False w1=s//1000 w2=(s-w1*1000)//100 w3=(s-w1*1000-w2*100)//10 w4=s-w1*1000-w2*100-w3*10 if w1==w2 or w1==w3 or w1==w4 or w2==w3 or w2==w4 or w3==w4:b=True return b def getTarget(): '''获得一个不含重复数字的四位数整数.''' random.seed t=random.randint(1023,9876) while isRepeat(t): t=random.randint(1023,9876) return t def listAll(): '''列出所有符合游戏规则的数字。''' print([a for a in range(1023,9876) if not isRepeat(a)]) if __name__=='__main__': try: run=True retry=False target=0 level=oldlevel=0 gCount=0 bChanged=False#是否需要保存文件 cHis=[] #当前关卡输入记录 print(__doc__) print("----------------------------------------------------") #读取过关历史记录 try: print("读取过关历史记录...") f=open("csz_history.log",'rb') history=pickle.load(f) except FileNotFoundError: print("游戏历史记录文件不存在,如果有将其移动到当前路径下。") print("创建游戏历史记录文件...\n完成。\n提示:复制游戏文件时,请将 csz_history.log 文件一起复制。") f=open("csz_history.log",'wb') except EOFError: pass finally: level=oldlevel=len(history) if level>0: print("完毕,已经闯过%d关." % level) else: print("没有闯关记录。") f.close print("----------------------------------------------------") while run: if target==0: target=getTarget() print("目标数字已经产生:xxxx(4位整数,1023-9876)。\n查看目标数字是否已经过关,请稍候...") for a in history: if a[0]==target: target=0 retry=True break if retry:continue print("完毕!无记录,开始游戏。") level+=1;print('第%d关! 开始!!\n' % level) gCount+=1 print("第%d次:" % gCount,) sguess=input('请输入:') sguess=sguess.strip() while sguess=="" \ or sguess.isnumeric()==False \ or sguess[0]=='0' \ or len(sguess)!=4 \ or isRepeat(int(sguess)): if sguess=='1000': print("\n\n目标数字是%d,重新开始第%d关。" % (target,level)) target=0 gCount=0 level-=1 break elif sguess=='1111': print('\n跳关无耻!目标数字是%d。' % target) history.append((-1,-1)) bChanged=True#需要保存文件 target=0 gCount=0 break elif sguess=='0000':#打印闯关记录,并退出程序. if len(history)>0: print('过关记录:', [h[0] for h in history]) else: print('无过关记录。\n') break elif sguess=='9999': print('\n取消游戏,本次共闯过%d关。' % (level-oldlevel-1)) run=False break else: sguess=input('非法内容,重新输入:') if run==False:break if sguess=='1111' or sguess=='0000':continue guess=int(sguess) cHis.append(guess)#保存猜数历史记录 if guess==target: print("猜对了!!目标数字正是%d,共%d次完成,第%d关通过。\n" % (target,gCount,level)) #保存闯关记录,过关后将刚目标数字保存下来,退出程序时将其保存到文件中 if not target in history: history.append((target,gCount,tuple(cHis))) target=0 gCount=0 bChanged=True#需要保存文件 elif 1022<guess<9877: i=0 you=0 dui=0 sguess=str(guess) starget=str(target) while i<4: if sguess[i] in starget: you+=1 if sguess[i]==starget[i]: dui+=1 i+=1 print("%d,%d对%d有。\n" % (guess,dui,you)) except EOFError: pass except KeyboardInterrupt: pass except ValueError: pass except SystemExit: pass finally: #退出程序前将历史记录保存到文件。 if bChanged: print("将游戏记录保存到文件...") f = open("csz_history.log",'wb') pickle.dump(history, f) #dump the history to a file f.close() else: print("无需保存文件。") print("\n运行结束。")
试试其它关键字
猜数字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
EU软件工作室
贡献的其它代码
(
1
)
.
猜数字游戏
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3