主题:一个简陋的打字练习程序
staa
[专家分:3690] 发布于 2005-09-13 00:07:00
CLS
RANDOMIZE TIMER
DO
zs# = 0
zqs# = 0
t1 = TIMER
DO
zl% = RND(1) * 5 + 7.5
c0$ = ""
FOR i% = 1 TO zl%
c% = RND(1) * 26
IF c% = 26 THEN c% = 25
IF RND(1) < .15 THEN c% = c% + 65 ELSE c% = c% + 97 '15%的机会出大写字母
c0$ = c0$ + CHR$(c%)
NEXT
PRINT
PRINT " "; c0$
INPUT c1$
zl1% = LEN(c1$)
IF zl1% = 0 THEN EXIT DO
zs# = zs# + zl%
j% = zl% - zl1%
IF j% >= 0 THEN
FOR i% = 1 TO zl% - j%
d0$ = MID$(c0$, i%, 1)
d1$ = MID$(c1$, i%, 1)
IF d0$ = d1$ THEN zqs# = zqs# + 1
NEXT
ELSE
zs# = zs# - j% '多打了字母也会影响成绩
FOR i% = 1 TO zl%
d0$ = MID$(c0$, i%, 1)
d1$ = MID$(c1$, i%, 1)
IF d0$ = d1$ THEN zqs# = zqs# + 1
NEXT
END IF
LOOP
t = TIMER - t1
PRINT zs#, zqs#, t; "s" '字母总数、正确的字母数、练习时间(秒)
PRINT INT(zqs# / t * 100 + .5) / 100 '打字速度(个数/每秒)
PRINT INT(zqs# / zs# * 100 + .5); "%" '正确率
INPUT "Do you continue? (y/[n])"; dc$
IF dc$ <> "y" AND dc$ <> "Y" THEN EXIT DO '按y或Y继续练习,其它键退出
LOOP
END
回复列表 (共9个回复)
沙发
飞鸟12 [专家分:2830] 发布于 2005-09-12 14:17:00
[em2]建议将打错的字符用别的颜色(如红色)显示出来
板凳
staa [专家分:3690] 发布于 2005-09-12 16:01:00
在这个程序的设计思想下不好实现用不同的颜色,主要是因为它不是单字符输入。建议有心人做这方面的尝试。
3 楼
moz [专家分:37620] 发布于 2005-09-12 20:00:00
改用 input$(1) 做判断就可以了
其实字母完全随机出现的概率是不合理的,
参考一下我们当年练习用的 TT 吧
因为大部份的英文单词某部份字母的顺序是常用的,
练好了有现实意义.
4 楼
飞鸟12 [专家分:2830] 发布于 2005-09-13 00:08:00
我习惯用 INKEY$
接收一个字符 先判断 再决定用什么颜色显示
[url]http://www.programfan.com/club/showbbs.asp?id=60097[/url]
5 楼
moz [专家分:37620] 发布于 2005-09-13 15:27:00
前言: 为了楼主给的那十分,不得已要动刀子了.
(又忍不住手向楼主的程序操刀了)
CLS
RANDOMIZE TIMER
DO
zs# = 0
zqs# = 0
t1 = TIMER
DO
zl% = RND(1) * 5 + 7.5
c0$ = ""
FOR i% = 1 TO zl%
c% = RND(1) * 26
IF c% = 26 THEN c% = 25
IF RND(1) < .15 THEN c% = c% + 65 ELSE c% = c% + 97 '15%的机会出大写字母
c0$ = c0$ + CHR$(c%)
NEXT
color 7,0
PRINT
PRINT " "; c0$
PRINT " ";
LOCATE , , 1
zs# = zs# + zl%
c1$ = ""
FOR ii% = 1 TO zl%
c2$ = INPUT$(1)
SELECT CASE c2$
CASE CHR$(13), CHR$(10)
IF ii% = 1 THEN EXIT DO ELSE EXIT FOR
CASE CHR$(32) TO CHR$(122)
c1$ = c1$ + c2$
IF c2$ = MID$(c0$, ii%, 1) THEN
COLOR 7, 0
PRINT c2$;
ELSE
COLOR 5, 0
PRINT c2$;
END IF
CASE CHR$(27): EXIT DO
CASE CHR$(8)
COLOR 7, 0
LOCATE , POS(0) - 1
PRINT " ";
LOCATE , POS(0) - 1
IF ii% > 1 THEN ii% = ii% - 2
CASE ELSE
COLOR 7, 0
PRINT " ";
BEEP
END SELECT
NEXT
FOR i% = 1 TO zl%
IF MID$(c0$, i%, 1) = MID$(c1$, i%, 1) THEN zqs# = zqs# + 1
NEXT
LOOP
t = TIMER - t1
PRINT zs#, zqs#, t; "s" '字母总数、正确的字母数、练习时间(秒)
PRINT INT(zqs# / t * 100 + .5) / 100 '打字速度(个数/每秒)
PRINT INT(zqs# / zs# * 100 + .5); "%" '正确率
INPUT "Do you continue? (y/[n])"; dc$
IF UCASE$(dc$) <> "Y" THEN EXIT DO '按y或Y继续练习,其它键退出
LOOP
END
不过老实说,如果让我来自己写这些程序
我会模仿 TT 来写, TT 实在是个不错的东西,
虽然存在千年虫,但我经常还是会用它来试试手指的,
还可以读入英文作文来练习.对常用单词的指法很有帮助.
6 楼
staa [专家分:3690] 发布于 2005-09-13 16:33:00
改的不错。
在第2个DO之后再加一句COLOR 7,0 可以防止一些意外。
TT我好象也用过,它的那个单词库的作用可能是核心的。你能否把它整理出来放在上传区?
7 楼
moz [专家分:37620] 发布于 2005-09-13 17:20:00
重做 TT ?
呵呵,好像没那么好的心情时间精力机会能力喔,
它的很多计算方法都比较科学的喔,
测打字速度不是以字母为单位的,是以词(英文词)为单位的.
单词库并不是很复杂的,
它只是按照等级把一些英文文章分类,
练习的时候按等级把不同的作文读入就可以了.
它唯一一个缺点就是肚子里有千年虫,
退出即死.无法正确计算使用频率.
8 楼
pk4321 [专家分:690] 发布于 2005-09-13 21:06:00
VB写的
http://www.programfan.com/club/showbbs.asp?id=105115
9 楼
staa [专家分:3690] 发布于 2005-09-15 09:40:00
根据有关建议修改了一下(仍然不是即时指出错误):
CLS
RANDOMIZE TIMER
DO
zs# = 0
zqs# = 0
t1 = TIMER
DO
zl% = RND(1) * 5 + 7.5
c0$ = ""
FOR i% = 1 TO zl%
c% = RND(1) * 26
IF c% = 26 THEN c% = 25
IF RND(1) < .15 THEN c% = c% + 65 ELSE c% = c% + 97
c0$ = c0$ + CHR$(c%)
NEXT
COLOR 7, 0: PRINT : PRINT
PRINT " "; c0$
INPUT c1$
zl1% = LEN(c1$)
IF zl1% = 0 THEN EXIT DO
zs# = zs# + zl%
j% = zl% - zl1%
PRINT " ";
IF j% >= 0 THEN
j% = zl% - j%
ELSE
zs# = zs# - j%
j% = zl%
END IF
FOR i% = 1 TO j%
d0$ = MID$(c0$, i%, 1)
d1$ = MID$(c1$, i%, 1)
IF d0$ = d1$ THEN
zqs# = zqs# + 1
COLOR 7, 0: PRINT d0$;
ELSE
COLOR 5, 0: PRINT d0$;
END IF
NEXT
LOOP
t = TIMER - t1
PRINT "ZongZiFuShu and ZhengQueShu : "; zs#, zqs#
PRINT INT(60 * zqs# / t + .5); "chrs/m"
PRINT "ZhengQueLv : "; INT(zqs# / zs# * 100 + .5); "%"
INPUT "Do you continue? (y/[n])"; dc$
IF dc$ <> "y" AND dc$ <> "Y" THEN EXIT DO
LOOP
END
我来回复