中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 猜数字游戏[game's over] 上一主题 | 下一主题
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『楼 主』:  猜数字游戏[game's over] 使用 LLM 解释/回答一下

写个猜数字的游戏,不知有没有人玩过,家里电话有这游戏,玩了好多次了
我自己也在写,7788,没完善好,想看下大家有没更好的思路。
在论坛里感觉没挑战的高手都可以出来讨论下了,谢谢啊``

规则:

1. 游戏开始会随机获取四位不重复的0-9的数字(第一位可以为0)

2. 玩家首先进行猜测,输入四位不重复的0-9的数字

3. 将游戏一开始获取的数字跟玩家输入的数字进行对比:

假如有一位的数字和位置完全匹配的话,设置标志 A1

假如有一位的数字匹配,但是位置不匹配的话,设置标志B1

假如数字和位置均不匹配的话,设置标志B0

数字和位置完全匹配只设置标志A,跟B无关

例如: 答案是 4690 若我猜 0679 则 提示为 A1B2

若提示 A0B0 则表示所猜的数字在答案中完全没出现过

若提示 A0B4 则表示所猜的数字完全匹配,但是位置全错了

A4B0 就是正确答案了。

4. 只有10机会

大概思路:

* 必须验证随机答案

验证随机获取的数字是否四位,每一位是否有重复

* 必须验证玩家的输入规范

验证玩家输入的是否是纯数字,是否有重复,是否是4位,否则给出相应提示然后跳回重新输入

* 记录历史记录

第一次用户输入了什么,得到的提示是什么,必须在第二次猜测的时候显示出来供参考

* 记录使用次数

猜了多少次,剩下多少次,跟历史记录一起显示

* 必须有重玩的机会

玩家使用完10次之后还没猜出来必须要有重玩机会,或者一次就猜出来了,也要有重玩机会

-------------------------------------------------------------------------------------------
最终答案见 7楼、9楼、11楼、16楼
结帖!

Last edited by dosmania on 2007-9-26 at 09:32 PM ]


2007-9-21 15:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

我狂汗啊``怎么没人研究啊``


2007-9-24 15:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

这个挺有意思的;
只是这段时间比较忙没时间;

十一放假;一定写出来贴上来;


2007-9-24 16:55
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

很早就有人写了个猜数字的游戏,在那个上面稍微修改下就可以的


2007-9-24 16:57
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

我以前写了个C语言版的
有时间把它转成批处理


2007-9-24 21:43
查看资料  发短消息  网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

re bjsh:
期待版主的思路吖````

re vkill:

是有人写过,但截然不同,差很多呢,那游戏够假
我说的这个可是真实存在我家固定电话里的游戏。
我提到的一些必要的验证也是和你说的那个区别开来。

re HAT:

把代码贴上来


2007-9-25 03:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

楼主说的是这个游戏吧
http://www.cn-dos.net/forum/viewthread.php?tid=32554


   此帖被 +2 点积分    点击查看详情   
评分人:【 dosmania 分数: +2  时间:2007-9-26 21:33


2007-9-25 11:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

re qzwqzw:

拜读了一下你的贴子``反猜解太慢了,等了N 久``
其实现实存在的那个猜数字游戏是猜10次,而不是8次。
我测试了你的release 1 版,出现的问题也贴到你贴子里了`自己去看``
感觉你的代码N 多```


2007-9-25 14:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

@echo off
setlocal enabledelayedexpansion
::::::::::::::::::::::::::: 猜数字游戏 :::::::::::::::::::::::::::
:::::::::::::::::::::::::::{s11ss 2007-9-25}:::::::::::::::::::::::::::
:Begin
set/a counter=1
:GetStr
echo 请输入一个四位数:
set/p str=
if "%str%"=="" goto :GetStr
call set one=%%str:~3,1%%
if "%one%" equ "" (echo 位数一定为四!& goto :GetStr)
call set one=%%str:~4,1%%
if not "%one%" equ "" (echo 位数一定为四!& goto :GetStr)
set/a len=0
:IsAllNum
call set word=%%str:~%len%,1%%
if not "%word%"=="" (
set isnum=False
for /l %%a in (0,1,9) do (
if "%word%"=="%%a" (
set/a len+=1
set isnum=True
goto :IsAllNum
)
)
)
if "%isnum%"=="False" (echo 怎么会有非数字出现呢? & goto :GetStr)
set state=chkinput
call :CheckSameNum n %str%
if not !counter! equ 1 goto :CheckAnswer
goto :CreateRandom
:CheckSameNum
set s=%2
for /l %%a in (0,1,3) do call set %1%%a=%%s:~%%a,1%%
set/a i=0
:ci
set/a j=!i!+1
:cj
if !%1%j%! equ !%1%i%! (
if !state! equ chkinput (
echo 各位数字要各不相同!& goto :GetStr
) else (goto :CreateRandom)
)
set/a j+=1
if not !j! gtr 3 goto :cj
set/a i+=1
if not !i! gtr 2 goto :ci
goto :eof
:CreateRandom
set/a answer=%random%
call set one=%%answer:~3,1%%
if "%one%" equ "" (goto :CreateRandom)
call set one=%%answer:~4,1%%
if not "%one%" equ "" (goto :CreateRandom)
set state=chkrandom
call :CheckSameNum y %answer%
::下一句可以显示出答案:
::echo %answer%
:CheckAnswer
set/a aa=0,bb=0
if not !counter! equ 11 (
for /l %%a in (0,1,3) do (
for /l %%i in (0,1,3) do (
if !n%%i! equ !y%%a! (
if %%i equ %%a (
set/a aa+=1
) else (set/a bb+=1)
)
)
)
set r%counter%=A!aa!B!bb!
set str%counter%=!str!
for /l %%a in (1,1,!counter!) do echo 第%%a次猜测:!str%%a!,结果:!r%%a!
set/a remain=10-!counter!
echo 共猜了!counter!次,还剩!remain!次。
set/a counter+=1
if not !aa! equ 4 (
goto :GetStr
) else (
echo 答对了,答案就是!str%counter%!,中秋节快乐!
goto :Replay
)
)
echo 已经猜了10次!
:Replay
set/p q=要重玩么?(y/n)
if not "%q%" equ "y" (
if not "%q%" equ "Y" (
echo 按任意键退出...
pause>nul
goto :eof
)
)
goto :Begin


Last edited by s11ss on 2007-9-25 at 02:44 PM ]


   此帖被 +2 点积分    点击查看详情   
评分人:【 dosmania 分数: +2  时间:2007-9-26 21:34


2007-9-25 14:37
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

dosmania:
我承认那个猜解算法确实有些蹩脚
毕竟只是一个闲暇之余的R1而已

可惜当时没人对此感兴趣
没有形成讨论的气氛
后来我也失去了这方面的兴趣

你若有新的算法那就贴出来
也许会重新激发我的兴趣也不一定
------------------------------------------------------
至于猜8次还是猜10次问题
我认为那不是问题
最初我就设定了10次
后来因为显示版面和日志的原因改成了8次

真要说起来
我接触的此类游戏中
游戏机和电视机的是不限次数的
录像机是限制了8次,并且不使用数字9和0
电脑的就很多样了

一个优秀的猜解算法
穷举算法应该就是次数最少的算法
但不是效率最高的
平均猜解次数应该是小于6次吧
设定8次也算中级难度吧

------------------------------------------------------

“感觉你的代码N 多``` ”
不明白,可以解释一下吗

Last edited by qzwqzw on 2007-9-25 at 03:05 PM ]


2007-9-25 14:50
查看资料  发短消息  网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

批处理我是写不出来了,发一个VBS的吧

dim a,b,cs,s
msgbox "游戏方法:" _
& vbcrlf & " 电脑随机产生一个四位十进制数字(开头的可以为0),猜10次。" _
& vbcrlf & " 每次返回AaBb" _
& vbcrlf & " A表示数字正确并且位置正确" _
& vbcrlf & " B表示数字正确但位置不正确" _
& vbcrlf & " 如:假设要猜的数字是1234" _
& vbcrlf & " 如果游戏者猜0134即返回A2B1(3、4为A,1为B)",4096+32,"猜数游戏"
do
a=0:b=0:cs=0:sm=""
while not pd(s)
randomize
s1=Int(10 * Rnd)
s2=Int(10 * Rnd)
s3=Int(10 * Rnd)
s4=Int(10 * Rnd)
s=s1 & s2 & s3 & s4
wend
'msgbox s
do until cs=10
do
n=inputbox(sm & "请输入猜测数:(还有" & 10-cs & "次机会)","猜数游戏")
if n=false then wscript.quit
if len(n)<>4 then
msgbox "位数不正确,请重新输入!",16+4096,"错误"
elseif pdsz(n)=false then
msgbox "输入的不是数字,请重新输入!",16+4096,"错误"
elseif not pd(n) then
msgbox "不能有重复的数字,请重新输入!",16+4096,"错误"
else
cs=cs+1:exit do
end if
loop
call jg(n)
if cs=10 and n<>s then msgbox "电脑随机数为:" & s & vbcrlf & "很遗憾,没有猜对,继续努力!",4096,"结果"
if n=s then msgbox "电脑随机数为:" & s & vbcrlf & "第" & cs & "次猜测:" & n & vbcrlf & "结果:" & "A" & a & "B" & b,4096+48,"恭喜你,猜对了!":exit do
sm=sm & "第" & cs & "次猜测:" & n & vbcrlf & "结果:" & "A" & a & "B" & b & vbcrlf & vbcrlf
loop
s=""
loop until msgbox("是否再来一遍?",vbyesno,"游戏结束")=vbno
function pd(a)
my1=mid(a,1,1)
my2=mid(a,2,1)
my3=mid(a,3,1)
my4=mid(a,4,1)
pd=my1<>my2 and my1<>my3 and my1<>my4 and my2<>my3 and my2<>my4 and my3<>my4
end function

sub jg(r)
a=0:b=0
for i=1 to 4
m=mid(r,i,1)
h=mid(s,i,1)
if m=h then
a=a+1
else
if instr(s,m)<>0 then b=b+1
end if
next
end sub

function pdsz(a)
l=len(a)
for i=1 to l
if isNumeric(mid(a,i,1)) then
pdsz=true
else
pdsz=false:exit function
end if
next
end function


Last edited by jmz573515 on 2007-9-25 at 04:09 PM ]


   此帖被 +2 点积分    点击查看详情   
评分人:【 dosmania 分数: +2  时间:2007-9-26 21:34


2007-9-25 15:56
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

呵呵``jmz573515 厉害,VBS互动性N 好
if len(n)<>4 靠``根本不能比嘛```VBS这个就搞定了位数``
不知jmz573515 对s1 s2 s3 s4 的重复可能性进行考虑没有```?


2007-9-26 14:31
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

re s11ss:
你的代码也完全符合要求```不知你对随机数重复的验证是哪些``


2007-9-26 14:53
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

dosmania:
if len(n)<>4 靠``根本不能比嘛```VBS这个就搞定了位数``
不知你说的是不能比是什么意思,我认为可以限定在4位啊??

不知jmz573515 对s1 s2 s3 s4 的重复可能性进行考虑没有```?

重复的可能性不知道你指的是什么?(你是说可能性有多大?还是说有可能重复?)
这里我只考虑了有可能重复所以做了判断,如果重复的话重新生成随机数,并没有考虑他的可能性有多大,也许效率不高...)


2007-9-26 15:31
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 15 楼』:   使用 LLM 解释/回答一下

Originally posted by dosmania at 2007-9-26 02:53 PM:
re s11ss:
你的代码也完全符合要求```不知你对随机数重复的验证是哪些``


随机数重复?
不明白你的具体意思.

反正我的代码是让随机数的4位数字不重复,至于随机数与随机数之间是否重复我并未控制,不过题目里好象也没有要求啊


2007-9-26 16:52
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: