注册 登录
编程论坛 VB6论坛

35+男爸,以前学的是basic,看到个智力小游戏,用Qbasic实现了(提供源程序),求用VB实现它,感谢!(在线等)

yahooglz 发布于 2012-10-18 20:49, 2755 次点击
源程序如下:忘了从哪个地方看见的游戏了,用QBasic生成的exe文件用起来太麻烦了,还要调用Dosbox,中文用TW实现,下面附图。求用VB做个XP下可用的,方便好看点的东东用。感谢!(真的懒再去学VB了)
2 CLS
COLOR 6
LOCATE 3, 10
PRINT "   欢迎您,让我们来玩猜数字游戏吧!现在我有一个四位数,您可以猜8次。"
PRINT "   记住,这个四位数每个数位上的数字是不相同的。"
PRINT "   还有,您每猜测一次,我都会给出一个提示的,好好利用提示,"
PRINT "   您肯定会胜利的,把脑筋动起来吧!"
PRINT "   提示方法:A和B,A表示您猜的数字中有一个数位上的数字与答案的"
PRINT "   数位相同,数字也相同。B表示您猜的数字中有一个数字与答案中的一个"
PRINT "   数字相同,但数位不对。"
PRINT "   例子:比如答案是1234,你猜5243,我给出的提示就是1A2B,1A表示有一个数字对了(指百位上的2),"
PRINT "   2B表示有两个数字对了(指3和4),但数位不对,您明白了吗?"
COLOR 7
PRINT "   那让我们开始吧!"
10 RANDOMIZE TIMER
a = 0
b = 0
c = 0
d = 0
k = 0
a = INT(RND * 10)
b = INT(RND * 10)
c = INT(RND * 10)
d = INT(RND * 10)
IF a <> b AND a <> c AND a <> d AND b <> c AND b <> d AND c <> d THEN e = 1000 * a + 100 * b + 10 * c + d ELSE GOTO 10
COLOR 11
PRINT "   现在我有这个四位数了。"
5 k = k + 1
IF k = 9 THEN GOTO 100
20 PRINT "   这是您第"; k; "次猜数,您猜猜是多少?"
COLOR 11
INPUT z
IF z < 1000 OR z > 9999 THEN PRINT "   您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GOTO 20
IF z = e THEN PRINT "   您太聪明能干了,您猜对了,这个数字就是"; e; "。": GOTO 150
a1 = 0
b1 = 0
c1 = 0
d1 = 0
a1 = INT(z / 1000)
b1 = INT((z - a1 * 1000) / 100)
c1 = INT((z - a1 * 1000 - b1 * 100) / 10)
d1 = z - a1 * 1000 - b1 * 100 - c1 * 10
IF a1 = b1 OR a1 = c1 OR a1 = d1 OR b1 = c1 OR b1 = d1 OR c1 = d1 THEN PRINT "您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GOTO 20
n = 0
m = 0
q = 0
w = 0
o = 0
r = 0
t = 0
y = 0
IF a1 = a THEN m = 1 ELSE IF a1 = b THEN n = 1 ELSE IF a1 = c THEN n = 1 ELSE IF a1 = d THEN n = 1
IF b1 = a THEN q = 1 ELSE IF b1 = b THEN w = 1 ELSE IF b1 = c THEN q = 1 ELSE IF b1 = d THEN q = 1
IF c1 = a THEN o = 1 ELSE IF c1 = b THEN o = 1 ELSE IF c1 = c THEN r = 1 ELSE IF c1 = d THEN o = 1
IF d1 = a THEN t = 1 ELSE IF d1 = b THEN t = 1 ELSE IF d1 = c THEN t = 1 ELSE IF d1 = d THEN y = 1
m1 = 0
n1 = 0
m1 = m + w + r + y
n1 = n + q + o + t
PRINT "   这是您第"; k; "次猜数,可惜了,不对,这次的提示是"; m1; "A"; n1; "B"
GOTO 5
100 PRINT "   不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是"; e; "。"
150 INPUT "   重玩一次请输入(Y/y),不想玩了请输入(N/n)"; h$
IF h$ = "Y" OR h$ = "y" THEN GOTO 2 ELSE IF h$ = "N" OR h$ = "n" THEN GOTO 200 ELSE PRINT "您输入错误,请重新输入!": GOTO 150
200 END

下面是附图:
只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录
37 回复
#2
yahooglz2012-10-18 20:55
忘了写了,如果改好了,请发给我邮箱:yahooglz@ 最好能说一下,附点说明就最好了,拜上!
#3
yahooglz2012-10-18 21:43
好吧。提供QBasic生成的cai.EXE文件和天汇汉字系统TW.exe,用DOSBOX(自个下载)支持DOS 先调用TW 再调用EXE文件可以玩了。我用BAT文件直接玩的。
只有本站会员才能查看附件,请 登录


#4
yahooglz2012-10-18 21:47
好吧。提供QBasic生成的cai.EXE文件和天汇汉字系统TW.exe,用DOSBOX(自个下载)支持DOS 先调用TW 再调用EXE文件可以玩了。我用BAT文件直接玩的。
只有本站会员才能查看附件,请 登录


#5
yahooglz2012-10-18 21:52
小智力游戏,还是不错的,挺考逻辑的,最好谁谁能把它转去安卓那边,做个在安卓上能用的小Game就最好了,我好象就是哪个旧手机上看见的。
#6
yahooglz2012-10-18 22:55
附上说明吧。

2 CLS                                 --清屏
COLOR 6                               --取颜色6
LOCATE 3, 10                          --文字起始定位
PRINT "   欢迎您,让我们来玩猜数字游戏吧!现在我有一个四位数,您可以猜8次。"         --下面文字都是游戏说明
PRINT "   记住,这个四位数每个数位上的数字是不相同的。"
PRINT "   还有,您每猜测一次,我都会给出一个提示的,好好利用提示,"
PRINT "   您肯定会胜利的,把脑筋动起来吧!"
PRINT "   提示方法:A和B,A表示您猜的数字中有一个数位上的数字与答案的"
PRINT "   数位相同,数字也相同。B表示您猜的数字中有一个数字与答案中的一个"
PRINT "   数字相同,但数位不对。"
PRINT "   例子:比如答案是1234,你猜5243,我给出的提示就是1A2B,1A表示有一个数字对了(指百位上的2),"
PRINT "   2B表示有两个数字对了(指3和4),但数位不对,您明白了吗?"
COLOR 7                                                                        --取颜色7
PRINT "   那让我们开始吧!"
10 RANDOMIZE TIMER                                                          --可以使用随机函数RND
a = 0                                                --定义四个数位上的数字为a b c d   k为判断猜的次数用
b = 0
c = 0
d = 0
k = 0
a = INT(RND * 10)        --随机生成一个个位数a RND是生成0~1之间的一个随机数 乘以10后再取整 得一个个位数a
b = INT(RND * 10)        
c = INT(RND * 10)
d = INT(RND * 10)
IF a <> b AND a <> c AND a <> d AND b <> c AND b <> d AND c <> d THEN e = 1000 * a + 100 * b + 10 * c + d ELSE GOTO 10       --判断 a b c d 四个数不相同 如果相同 则返回行号10行 重新取值 不相同则用加法加出结果数为e
COLOR 11             --取颜色11
PRINT "   现在我有这个四位数了。"   
5 k = k + 1                    --k值进1
IF k = 9 THEN GOTO 100         --用k值判断猜的次数,超过8次跳到行号100行
20 PRINT "   这是您第"; k; "次猜数,您猜猜是多少?"
COLOR 11
INPUT z                        --z为你猜的数
IF z < 1000 OR z > 9999 THEN PRINT "   您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GOTO 20               --对z值大小判断,小于1000或大于9999 则跳回行号20行 重新输入
IF z = e THEN PRINT "   您太聪明能干了,您猜对了,这个数字就是"; e; "。": GOTO 150    --判断结果z=e 对了跳到行号150行 重玩判断
a1 = 0         --先定a1 b1 c1 d1 为0
b1 = 0
c1 = 0
d1 = 0
a1 = INT(z / 1000)                     --a1 b1 c1 d1 为你猜的数z 用减法和取整拆出的各个数位上的数字
b1 = INT((z - a1 * 1000) / 100)
c1 = INT((z - a1 * 1000 - b1 * 100) / 10)
d1 = z - a1 * 1000 - b1 * 100 - c1 * 10
IF a1 = b1 OR a1 = c1 OR a1 = d1 OR b1 = c1 OR b1 = d1 OR c1 = d1 THEN PRINT "您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GOTO 20       --判断你输入的四位数上四个数字没有相同的 否则跳回重新输入
n = 0
m = 0
q = 0
w = 0
o = 0
r = 0
t = 0
y = 0
IF a1 = a THEN m = 1 ELSE IF a1 = b THEN n = 1 ELSE IF a1 = c THEN n = 1 ELSE IF a1 = d THEN n = 1
IF b1 = a THEN q = 1 ELSE IF b1 = b THEN w = 1 ELSE IF b1 = c THEN q = 1 ELSE IF b1 = d THEN q = 1
IF c1 = a THEN o = 1 ELSE IF c1 = b THEN o = 1 ELSE IF c1 = c THEN r = 1 ELSE IF c1 = d THEN o = 1
IF d1 = a THEN t = 1 ELSE IF d1 = b THEN t = 1 ELSE IF d1 = c THEN t = 1 ELSE IF d1 = d THEN y = 1
m1 = 0       --上面多重判断a b c d 和 a1 b1 c1 d1 相比较 相同则进1 最后下面加起来得数 m1 和 n1
n1 = 0
m1 = m + w + r + y
n1 = n + q + o + t
PRINT "   这是您第"; k; "次猜数,可惜了,不对,这次的提示是"; m1; "A"; n1; "B"    --给出提示 m1 “A” 和 n1 “B”
GOTO 5      --返回 k值进1
100 PRINT "   不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是"; e; "。"
150 INPUT "   重玩一次请输入(Y/y),不想玩了请输入(N/n)"; h$
IF h$ = "Y" OR h$ = "y" THEN GOTO 2 ELSE IF h$ = "N" OR h$ = "n" THEN GOTO 200 ELSE PRINT "您输入错误,请重新输入!": GOTO 150   --重玩判断
200 END


这样能快点吧....
#7
wube2012-10-19 00:18
一开始还真被骗到开始写
写到一半突然想到我有"大绝招"
谷歌关键字搜索:

VB6 猜数字 源码 代码

http://tw.knowledge.
http://www.
........
........
........
一大堆还真不少
#8
yahooglz2012-10-19 00:45
骗?
不是吧。
上面的地址,第一个我打不开。

再说了我要一个可以在XP下执行的exe,感谢了,快写
#9
wube2012-10-19 04:03
以下是引用yahooglz在2012-10-19 00:45:10的发言:

骗?
不是吧。
上面的地址,第一个我打不开。

再说了我要一个可以在XP下执行的exe,感谢了,快写


此骗非彼骗
是太老实认真的意思
直接照你的字义去做而不思考其他变通方法
你误会了

有现成的干嘛要自己写
太闲吗?也要上班的
等放假有空再帮你做-个
#10
yahooglz2012-10-19 08:06
这么简单的小东东,要很长时间嘛?
#11
风吹过b2012-10-19 10:10
新建工程:
   添加一个模块,移除窗体。

   关键的难点在于:
1、找到所用到的所有变量。
2、把 goto 命令 改为 DO ... Loop 循环。
3、把 INPUT 改为 InputBox ,把 Print 改为 MsgBox
其它都原样照抄。
这个程序没有优化好。可读性很差。
如果是 Qbasic 代码的话,已支持 sub 子过程及Function子函数了,也建议变量定义,不建议使用 GOTO 命令。
但想不出是什么代码。 GWBASIC 要求全程行号;BASICA ,不支持中文汉字平台。TURBO BASIC 也是要求全程行号。

程序代码:
Option Explicit


Public Sub Main()


'2 Cls
'
Color 6
'
LOCATE 3, 10
'
Print "   欢迎您,让我们来玩猜数字游戏吧!现在我有一个四位数,您可以猜8次。"
'
Print "   记住,这个四位数每个数位上的数字是不相同的。"
'
Print "   还有,您每猜测一次,我都会给出一个提示的,好好利用提示,"
'
Print "   您肯定会胜利的,把脑筋动起来吧!"
'
Print "   提示方法:A和B,A表示您猜的数字中有一个数位上的数字与答案的"
'
Print "   数位相同,数字也相同。B表示您猜的数字中有一个数字与答案中的一个"
'
Print "   数字相同,但数位不对。"
'
Print "   例子:比如答案是1234,你猜5243,我给出的提示就是1A2B,1A表示有一个数字对了(指百位上的2),"
'
Print "   2B表示有两个数字对了(指3和4),但数位不对,您明白了吗?"
'
Color 7
'
Print "   那让我们开始吧!"

Dim s As String
Dim s1 As String
Dim s3 As String
Dim s2 As String


Dim a As Integer, b As Integer, c As Integer, d As Integer, k As Integer
Dim e As Integer
Dim z As Integer

Dim a1 As Integer, b1 As Integer, c1 As Integer, d1 As Integer
Dim n As Integer, m As Integer, q As Integer, w As Integer, o As Integer, r As Integer, t As Integer
Dim y As Integer

Dim m1 As Integer, n1 As Integer




s = "欢迎您,让我们来玩猜数字游戏吧!现在我有一个四位数,您可以猜8次。"
s = s & vbCrLf & "记住,这个四位数每个数位上的数字是不相同的。"
s = s & vbCrLf & "还有,您每猜测一次,我都会给出一个提示的,好好利用提示,"
s = s & vbCrLf & "您肯定会胜利的,把脑筋动起来吧!"
s = s & vbCrLf & "提示方法:A和B,A表示您猜的数字中有一个数位上的数字与答案的"
s = s & vbCrLf & "数位相同,数字也相同。B表示您猜的数字中有一个数字与答案中的一个"
s = s & vbCrLf & "数字相同,但数位不对。"
s = s & vbCrLf & "例子:比如答案是1234,你猜5243,我给出的提示就是1A2B,1A表示有一个数字对了(指百位上的2),"
s = s & vbCrLf & "2B表示有两个数字对了(指3和4),但数位不对,您明白了吗?"

MsgBox s, , "提示"

'10 Randomize Timer
Randomize Timer

'a = 0
'
b = 0
'
c = 0
'
d = 0
'
k = 0
'
a = Int(Rnd * 10)
'
b = Int(Rnd * 10)
'
c = Int(Rnd * 10)
'
d = Int(Rnd * 10)

Do
a = 0
b = 0
c = 0
d = 0
k = 0

Do
a = Int(Rnd * 10)
b = Int(Rnd * 10)
c = Int(Rnd * 10)
d = Int(Rnd * 10)

'If a <> b And a <> c And a <> d And b <> c And b <> d And c <> d Then e = 1000 * a + 100 * b + 10 * c + d Else GoTo 10

Loop Until a <> b And a <> c And a <> d And b <> c And b <> d And c <> d

e = 1000 * a + 100 * b + 10 * c + d

s1 = "现在我有这个四位数了。"

Do
'20 Print "   这是您第"; k; "次猜数,您猜猜是多少?"

'Color 11
'
Print "   现在我有这个四位数了。"
'
5 k = k + 1

'If k = 9 Then GoTo 100
'
Color 11

k = k + 1
s3 = s1 & vbCrLf & "这是您第" & k & "次猜数,您猜猜是多少?"


Do
'INPUT z
'
a1 = 0
'
b1 = 0
'
c1 = 0
'
d1 = 0
'
a1 = Int(z / 1000)
'
b1 = Int((z - a1 * 1000) / 100)
'
c1 = Int((z - a1 * 1000 - b1 * 100) / 10)
'
d1 = z - a1 * 1000 - b1 * 100 - c1 * 10

'If z < 1000 Or z > 9999 Then Print "   您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GoTo 20
   
    s2 = InputBox(s3, "输入")
   
    s2 = Trim(s2)         '去掉空格
   
    If Len(s2) = 0 Then
        End                 '按取消后,返回为空值
    End If
   
    '此节重写,以适应 随便输入
   
    If IsNumeric(s2) Then
    If Len(s2) = 4 Then
   
z = Val(s2)
a1 = Int(z / 1000)
b1 = Int((z - a1 * 1000) / 100)
c1 = Int((z - a1 * 1000 - b1 * 100) / 10)
d1 = z - a1 * 1000 - b1 * 100 - c1 * 10
        
        If a1 <> b1 And a1 <> c1 And a1 <> d1 and b1 <> c1 and b1 <> d1 and c1 <> d1 Then
            Exit Do
        End If
    End If
    End If
   
MsgBox "您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!", vbCritical, "输入错误"

Loop

'If z = e Then Print "   您太聪明能干了,您猜对了,这个数字就是"; e; "。": GoTo 150

If z = e Then
    MsgBox "您太聪明能干了,您猜对了,这个数字就是" & e & "", vbInformation, "胜利"
    Exit Do
Else

End If

'n = 0
'
m = 0
'
q = 0
'
w = 0
'
o = 0
'
r = 0
'
t = 0
'
y = 0
'
If a1 = a Then m = 1 Else If a1 = b Then n = 1 Else If a1 = c Then n = 1 Else If a1 = d Then n = 1
'
If b1 = a Then q = 1 Else If b1 = b Then w = 1 Else If b1 = c Then q = 1 Else If b1 = d Then q = 1
'
If c1 = a Then o = 1 Else If c1 = b Then o = 1 Else If c1 = c Then r = 1 Else If c1 = d Then o = 1
'
If d1 = a Then t = 1 Else If d1 = b Then t = 1 Else If d1 = c Then t = 1 Else If d1 = d Then y = 1
'
m1 = 0
'
n1 = 0
'
m1 = m + w + r + y
'
n1 = n + q + o + t

n = 0
m = 0
q = 0
w = 0
o = 0
r = 0
t = 0
y = 0
If a1 = a Then m = 1 Else If a1 = b Then n = 1 Else If a1 = c Then n = 1 Else If a1 = d Then n = 1
If b1 = a Then q = 1 Else If b1 = b Then w = 1 Else If b1 = c Then q = 1 Else If b1 = d Then q = 1
If c1 = a Then o = 1 Else If c1 = b Then o = 1 Else If c1 = c Then r = 1 Else If c1 = d Then o = 1
If d1 = a Then t = 1 Else If d1 = b Then t = 1 Else If d1 = c Then t = 1 Else If d1 = d Then y = 1
m1 = 0
n1 = 0
m1 = m + w + r + y
n1 = n + q + o + t

'Print "   这是您第"; k; "次猜数,可惜了,不对,这次的提示是"; m1; "A"; n1; "B"
'
GoTo 5

s1 = s1 & vbCrLf & "您第" & k & "次猜:" & z & ",可惜错了,提示:" & m1 & "A" & n1 & "B"
's1 = s1 & "可惜了,提示" & m1 & "A" & n1 & "B"

Loop While k < 8

'100 Print "   不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是"; e; "。"
'
150 INPUT "   重玩一次请输入(Y/y),不想玩了请输入(N/n)"; h$

If k >= 8 Then
    s1 = s1 & vbCrLf & "不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是" & e & ""
Else
    s1 = "恭喜您猜对啦!"
End If

s1 = s1 & vbCrLf & vbCrLf & "重玩一次?"

'If h$ = "Y" Or h$ = "y" Then GoTo 2 Else If h$ = "N" Or h$ = "n" Then GoTo 200 Else Print "您输入错误,请重新输入!": GoTo 150


If MsgBox(s1, vbYesNo, "重玩?") = vbNo Then
    Exit Do
End If

Loop

'200 End

End Sub


重写了 对输入判断部分。需要严格限制。否则很容易导致超过 整数范围。

[ 本帖最后由 风吹过b 于 2012-10-19 11:28 编辑 ]
#12
yahooglz2012-10-19 10:35
泪奔,虽然是很感激了,可是,兄弟,求给个可执行文件,难道要我去下VB6,安装起来,再去学学导入模块,生成文件?
#13
风吹过b2012-10-19 10:42
我是 WIN7环境,为了写这个代码,临时去下个 VB6 ,然后写这个代码,然后发贴,然后不保存本在代码。

更。。。。。。。。。。。。。。。。。。


只有本站会员才能查看附件,请 登录


更新 胜利时的BUG。

[ 本帖最后由 风吹过b 于 2012-10-19 10:53 编辑 ]
#14
风吹过b2012-10-19 10:46
相对 前面 发的代码 ,只 改短了 每次 的提示,以便适应  inputbox 的固定宽度。
更新了 胜利时的提示 错误的 BUG

[ 本帖最后由 风吹过b 于 2012-10-19 10:54 编辑 ]
#15
yahooglz2012-10-19 10:47
好人啊,所以感激你。谢了,终于完成个小心愿。
#16
yahooglz2012-10-19 10:52
恩,刚试了下,有个小bug 在第4次就猜对了,跳出成功提示了,但接着没跳回重玩。还在第五次输入提示下
#17
风吹过b2012-10-19 10:54
回复 16楼 yahooglz
重下吧。刚更新过了。 前面是直接仿写的,没测试这部分。
#18
yahooglz2012-10-19 10:55
输入大于9999的数会出错,跳出
#19
风吹过b2012-10-19 11:08
那再改吧。我知道问题所在了。


只有本站会员才能查看附件,请 登录
#20
yahooglz2012-10-19 11:11
ok了。兄弟,不错,程序不错,人也不错,但我老了,眼花啊,能把窗体放大点嘛,关键是字要大点啊。
#21
风吹过b2012-10-19 11:13
我晕。     

如果要那么做的话,整个程序需要重写  。。。。。。。。。。。。。。。。。。。。。。。。
这是使用系统自带的控件在显示的提示的。

等下有机会吧。如果是那样,整个程序的构架都最好要变动。
#22
yahooglz2012-10-19 11:14





无限感激!我可以给我儿子玩。。。。练一练逻辑
#23
风吹过b2012-10-19 11:23
以下是引用yahooglz在2012-10-19 11:11:55的发言:

ok了。兄弟,不错,程序不错,人也不错,但我老了,眼花啊,能把窗体放大点嘛,关键是字要大点啊。


你不一定就比我大。
#24
wube2012-10-19 11:51
以下是引用风吹过b在2012-10-19 11:23:43的发言:



你不一定就比我大。

没错
也许这位版友算小弟了
那么年轻就懒得学了
我刚学VB6的时候可能比你还大
#25
wube2012-10-19 12:13
以下是引用yahooglz在2012-10-19 00:45:10的发言:

骗?
不是吧。
上面的地址,第一个我打不开。

再说了我要一个可以在XP下执行的exe,感谢了,快写


你们国家的服务器很有问题阿
奇摩明明是中资的怎你们打不开
照抄+拉控件5分钟...
只有本站会员才能查看附件,请 登录
#26
yahooglz2012-10-19 12:13
以下是引用wube在2012-10-19 11:51:34的发言:

 
没错
也许这位版友算小弟了
那么年轻就懒得学了
我刚学VB6的时候可能比你还大
人身攻击啊?
1976年生人
能大我多少?
#27
wube2012-10-19 12:15
以下是引用yahooglz在2012-10-19 12:13:38的发言:

人身攻击啊?
1976年生人
能大我多少?


看来找到失散多年的兄弟了
几月?
#28
yahooglz2012-10-19 12:16
二月.....
#29
wube2012-10-19 12:19
阿....输了.....
但是反而有点高兴
难得有比我老的
也差不多都是这年纪的会QBASIC
#30
wube2012-10-19 12:25
哥阿~要加油勒
杂这年纪的不能让人看扁
VB很简单的
#31
风吹过b2012-10-19 14:10
二月.....

我比你大几天。。。。。。。
#32
yahooglz2012-10-19 14:59
风吹过b兄,经测试,还有点小问题。
1、如果刚好是第8次猜出来,会出现
"不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是" 这句话,8次以内猜对没问题。
2、一开始随机生成的数字会有 0519 这个可能,没有对四位数进行判断.
3、求你了,用窗体,用Text.做吧,我百度了,VB下了,细细看了,亮瞎了!!!全是响应!!!
#33
lowxiong2012-10-20 16:34
一个最接近原效果的带窗体的
原程序算法完全一样,只做了个仿qb中input效果的iInput函数(本想也做个仿locate和color的),为照顾楼主,把窗体的字体设为4号字,应该足够了,楼主也可以在设计时更改字体大小。
新建一工程,窗体大小为width=12300,height=6705(可更改),在窗体中放一个timer控件timer1,一个textbox控件text1,拷贝下列代码,编译运行即可。

Dim kAsc As Integer, startY As Integer

Private Sub Form_KeyPress(KeyAscii As Integer)
  kAsc = KeyAscii
End Sub

Private Sub Form_Load()
  Me.BackColor = 0
  Me.ForeColor = &HFFFFFF
  kAsc = -1
  Timer1.Interval = 500
  Text1.FontSize = Me.FontSize
  Text1.Height = Text1.FontSize * 15
End Sub
Function abcd()
loop2: Cls
'Color 6
'LOCATE 3, 10
Print "   欢迎您,让我们来玩猜数字游戏吧!现在我有一个四位数,您可以猜8次。"
Print "   记住,这个四位数每个数位上的数字是不相同的。"
Print "   还有,您每猜测一次,我都会给出一个提示的,好好利用提示,"
Print "   您肯定会胜利的,把脑筋动起来吧!"
Print "   提示方法:A和B,A表示您猜的数字中有一个数位上的数字与答案的"
Print "   数位相同,数字也相同。B表示您猜的数字中有一个数字与答案中的一个"
Print "   数字相同,但数位不对。"
Print "   例子:比如答案是1234,你猜5243,我给出的提示就是1A2B,1A表示有一个数字对了(指百位上的2),"
Print "   2B表示有两个数字对了(指3和4),但数位不对,您明白了吗?"
'Color 7
Print "   那让我们开始吧!"
loop10: Randomize Timer
a = 0
b = 0
c = 0
d = 0
k = 0
a = Int(Rnd * 10)
b = Int(Rnd * 10)
c = Int(Rnd * 10)
d = Int(Rnd * 10)
If a <> b And a <> c And a <> d And b <> c And b <> d And c <> d Then e = 1000 * a + 100 * b + 10 * c + d Else GoTo loop10
'Color 11
Print "   现在我有这个四位数了。", e
startY = Me.CurrentY
loop5: k = k + 1
If k = 9 Then GoTo loop100
loop20: Print "   这是您第"; k; "次猜数,您猜猜是多少?"
'Color 11
z = Val(iInputBox("请输入:"))
If z < 1000 Or z > 9999 Then Print "   您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GoTo loop20
If z = e Then Print "   您太聪明能干了,您猜对了,这个数字就是"; e; "。": GoTo loop150
a1 = 0
b1 = 0
c1 = 0
d1 = 0
a1 = Int(z / 1000)
b1 = Int((z - a1 * 1000) / 100)
c1 = Int((z - a1 * 1000 - b1 * 100) / 10)
d1 = z - a1 * 1000 - b1 * 100 - c1 * 10
If a1 = b1 Or a1 = c1 Or a1 = d1 Or b1 = c1 Or b1 = d1 Or c1 = d1 Then Print "您输入错误了,记住,您要猜的是一个4个数字都不相同的四位数。请重新输入吧!": GoTo loop20
n = 0
m = 0
q = 0
w = 0
o = 0
r = 0
t = 0
y = 0
If a1 = a Then m = 1 Else If a1 = b Then n = 1 Else If a1 = c Then n = 1 Else If a1 = d Then n = 1
If b1 = a Then q = 1 Else If b1 = b Then w = 1 Else If b1 = c Then q = 1 Else If b1 = d Then q = 1
If c1 = a Then o = 1 Else If c1 = b Then o = 1 Else If c1 = c Then r = 1 Else If c1 = d Then o = 1
If d1 = a Then t = 1 Else If d1 = b Then t = 1 Else If d1 = c Then t = 1 Else If d1 = d Then y = 1
m1 = 0
n1 = 0
m1 = m + w + r + y
n1 = n + q + o + t
Print "   这是您第"; k; "次猜数,可惜了,不对,这次的提示是"; m1; "A"; n1; "B"
GoTo loop5
loop100: Print "   不好意思,在8次机会里您都没有猜对这个数字,真遗憾!这个数字是"; e; "。"
loop150: h$ = iInputBox("   重玩一次请输入(Y/y),不想玩了请输入(N/n)")
If h$ = "Y" Or h$ = "y" Then GoTo loop2 Else If h$ = "N" Or h$ = "n" Then GoTo loop200 Else Print "您输入错误,请重新输入!": GoTo loop150
loop200: End
End Function

Private Sub Form_Unload(Cancel As Integer)
  kAsc = 1
End Sub

Private Sub Timer1_Timer()
  Dim a As String
  Timer1.Interval = 0
  abcd
'  a = iInputBox("请输入:")
'  Print a
End Sub
Private Function iInputBox(a As String) As String
  Dim b As String, i As Integer, j As Integer
  If Me.CurrentY > Me.ScaleHeight - Me.FontSize * 15 Then
    Me.CurrentX = 0: Me.CurrentY = startY
    Line (Me.CurrentX, Me.CurrentY)-(Me.ScaleWidth, Me.ScaleHeight), 0, BF
    Me.CurrentX = 0: Me.CurrentY = startY
  End If
  Print a;
  b = "": i = Me.CurrentX: j = Me.CurrentY: Text1.Left = i: Text1.Top = j
  While kAsc <> 13
    While kAsc < 0
      DoEvents
    Wend
    If kAsc >= 0 Then
      If kAsc = 1 Then End
      If kAsc = 8 Then
        If Len(b) > 0 Then b = Left(b, Len(b) - 1)
      Else
        If kAsc > 40 Then b = b & Chr(kAsc)
      End If
      Me.Line (i, j)-(i + (Len(b) + 1) * Me.FontSize * 15, j + (Me.FontSize + 2) * 15), 0, BF
      Me.CurrentX = i: Me.CurrentY = j: Print b;: Text1.Left = Me.CurrentX: Text1.Visible = True
      If kAsc <> 13 Then kAsc = -2
    End If
  Wend
  iInputBox = b
  kAsc = -1
  Print
End Function

只有本站会员才能查看附件,请 登录
#34
yahooglz2012-10-21 09:38
33楼兄弟,结贴了才看见你,十分内疚!
#35
yahooglz2012-10-21 09:46
If a<>0 and a <> b And a <> c And a <> d And b <> c And b <> d And c <> d Then e = 1000 * a + 100 * b + 10 * c + d Else GoTo loop10

Print "   现在我有这个四位数了。"

两处要改改,前面要+上千位上的a 不能为零判断
print 这里不要出现答案了
#36
yahooglz2012-10-21 09:55
还有个小问题,窗口的高度不够,第四次以后输入,前面的会消失,就看不见前面猜的过程和提示了
#37
yahooglz2012-10-21 09:57
哥几个,做好东西了都不测试一下的嘛?
#38
wube2012-10-21 17:51
1.这边是编程论坛,不是编程大卖场。
2.估计您也只是为了解这问题,才注册这帐号,问完就消失的那种,所以费神解答你的问题没意义。
3.更何况你说明了你懒得学,那又何必浪费时间教,愿意教你怎搜代码你就要去拜拜了。
4.没人欠你的,更不是你花钱请的员工,还在线等勒。
5.回你,这样对另一个求上位机下位机的代码的网友公平吗,两套标准吗。
6.或许在别的领域占有一席之地,来别人地盘上也至少谦虚点,装个样子也行。
7.抱歉了,说鄙视过了点,但是也快了。
8.版主这2个字无形中让我很有压力,快帮我彻了吧,我只是存粹来学习的而已。
1