回 帖 发 新 帖 刷新版面

主题:一个简陋的打字练习程序

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个回复)

沙发

[em2]建议将打错的字符用别的颜色(如红色)显示出来

板凳

在这个程序的设计思想下不好实现用不同的颜色,主要是因为它不是单字符输入。建议有心人做这方面的尝试。

3 楼

改用 input$(1) 做判断就可以了

其实字母完全随机出现的概率是不合理的,
参考一下我们当年练习用的 TT 吧
因为大部份的英文单词某部份字母的顺序是常用的,
练好了有现实意义.

4 楼

我习惯用 INKEY$
接收一个字符 先判断 再决定用什么颜色显示
[url]http://www.programfan.com/club/showbbs.asp?id=60097[/url]

5 楼

前言: 为了楼主给的那十分,不得已要动刀子了.
(又忍不住手向楼主的程序操刀了)

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 楼

改的不错。

在第2个DO之后再加一句COLOR 7,0 可以防止一些意外。

TT我好象也用过,它的那个单词库的作用可能是核心的。你能否把它整理出来放在上传区?

7 楼

重做 TT ?
呵呵,好像没那么好的心情时间精力机会能力喔,
它的很多计算方法都比较科学的喔,
测打字速度不是以字母为单位的,是以词(英文词)为单位的.

单词库并不是很复杂的,
它只是按照等级把一些英文文章分类,
练习的时候按等级把不同的作文读入就可以了.

它唯一一个缺点就是肚子里有千年虫,
退出即死.无法正确计算使用频率.

8 楼

VB写的
http://www.programfan.com/club/showbbs.asp?id=105115

9 楼

根据有关建议修改了一下(仍然不是即时指出错误):
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

我来回复

您尚未登录,请登录后再回复。点此登录或注册