You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM PCjr程序如何实现指定时长的暂停?

在IBM PCjr BASIC中实现指定时长暂停的替代方案

问题背景

你编写的PCjr BASIC动画代码中,WAIT 1和SLEEP 1均触发语法错误,这是因为PCjr的BASIC版本不支持这两种简化的延迟用法:

  • PCjr BASIC的WAIT命令是硬件端口检测命令,语法为WAIT port[,mask],用于等待指定硬件端口的某一位状态变化,无法直接传入数字实现延迟。
  • SLEEP命令是后续QBASIC/MS-DOS BASIC新增的功能,PCjr BASIC不兼容该命令。

你的原代码:

10 CLS
20 PRINT "|"
30 WAIT 1
40 CURSOR 1,1
50 PRINT "/"
60 WAIT 1
70 CURSOR 1,1
80 PRINT "-"
90 WAIT 1
100 CURSOR 1,1
110 PRINT "\"
120 WAIT 1
130 CURSOR 1,1
140 GOTO 20

运行时的错误提示:

|
Syntax error in 30
Ok
30 WAIT 1

替换SLEEP 1后的错误提示:

|
Syntax error in 30
Ok
30 SLEEP 1

两种可行的替代方案

方案1:循环计数模拟延迟(简单易实现)

通过FOR-NEXT循环的空操作消耗CPU时间来模拟延迟,循环次数需要根据PCjr的运行速度调整,以下是修改后的代码:

10 CLS
20 PRINT "|"
30 GOSUB 2000 ' 调用1秒延迟子程序
40 CURSOR 1,1
50 PRINT "/"
60 GOSUB 2000
70 CURSOR 1,1
80 PRINT "-"
90 GOSUB 2000
100 CURSOR 1,1
110 PRINT "\"
120 GOSUB 2000
130 CURSOR 1,1
140 GOTO 20

' 延迟子程序:调整循环次数可改变延迟时长
2000 FOR I = 1 TO 3000 : NEXT I
2010 RETURN
  • 如果你需要不同时长的延迟,可以修改循环上限,比如TO 1500对应约0.5秒,TO 6000对应约2秒。

方案2:基于TIMER函数的精准延迟(支持变量指定时长)

PCjr BASIC支持TIMER函数,它返回从午夜开始的累计秒数(带小数),利用这个特性可以实现精准的指定时长延迟,还支持用变量控制时长:

10 CLS
20 PRINT "|"
30 DELAY = 1 : GOSUB 2000 ' 延迟1秒
40 CURSOR 1,1
50 PRINT "/"
60 DELAY = 1 : GOSUB 2000
70 CURSOR 1,1
80 PRINT "-"
90 DELAY = 1 : GOSUB 2000
100 CURSOR 1,1
110 PRINT "\"
120 DELAY = 1 : GOSUB 2000
130 CURSOR 1,1
140 GOTO 20

' 精准延迟子程序:DELAY变量指定延迟秒数(支持小数,比如0.5=半秒)
2000 START_TIME = TIMER
2010 DO WHILE TIMER < START_TIME + DELAY : LOOP
2020 RETURN
  • 这种方法不受CPU速度波动影响,延迟时长更准确,还可以通过修改DELAY变量的值来灵活调整暂停时间。

内容的提问来源于stack exchange,提问作者Mrredstone333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:10:08