【问题标题】:Choose For Random Strings In Commodore 64 BASIC在 Commodore 64 BASIC 中选择随机字符串
【发布时间】:2011-04-24 02:26:52
【问题描述】:

我的程序中有这个变量声明:

X="MAGENTA"
Y="CYAN"
Z="TAN"
A="KHAKI"

现在我想要的是随机选择其中之一并PRINT 它。但是如何做到这一点呢?

【问题讨论】:

  • Commodore 64 BASIC +1!太糟糕了,我不知道答案:-)
  • 哇,我得回家翻阅我的程序员指南才能知道使用 RND 的正确方法,但感谢关于 C64 BASIC 的问题 :)
  • @Dean:是的。我仍然是 Commodore 64 的爱好者。它仍然是一个很棒的平台,主要是如果你想制作一些旧的 BASIC 游戏:)
  • @p00ya:我正在从 eBay 购买程序员指南 ;)
  • 对于这个问题是否值得一票,我感到非常痛苦。虽然很清楚,但它的用处在我看来是值得怀疑的。然而,几个commodore问题(甚至至少有一个早于C64的VIC-20)和至少一个zx80(我的第一个“爱”),所以我猜有至少有一点兴趣。所以+1,但非常焦虑和咬牙切齿:-)

标签: string random basic commodore


【解决方案1】:

我的 BASIC 很生锈,但你应该可以使用类似的东西:

10 X$ = "MAGENTA"
20 Y$ = "CYAN"
30 Z$ = "TAN"
40 A$ = "KHAKI"
50 N = INT(RND(1) * 4)
60 IF N = 0 THEN PRINT X$
70 IF N = 1 THEN PRINT Y$
80 IF N = 2 THEN PRINT Z$
90 IF N = 3 THEN PRINT A$

或者,将其放入子程序中以供代码重用:

  10 X$ = "MAGENTA"
  20 Y$ = "CYAN"
  30 Z$ = "TAN"
  40 A$ = "KHAKI"
  50 GOSUB 1000
  60 PRINT RC$
  70 END

1000 TV = INT(RND(1) * 4)
1010 IF TV = 0 THEN RC$ = X$
1020 IF TV = 1 THEN RC$ = Y$
1030 IF TV = 2 THEN RC$ = Z$
1040 IF TV = 3 THEN RC$ = A$
1050 RETURN

当然,您可能应该对这类事情使用数组,这样您就可以使用:

10 DIM A$(3)
10 A$(0) = "MAGENTA"
20 A$(1) = "CYAN"
30 A$(2) = "TAN"
40 A$(3) = "KHAKI"
50 PRINT A$(INT(RND(1)*4))

【讨论】:

  • 这些平等会起作用吗?如果 RND 生成一个浮点数,那应该是
  • 嗯,这只是表明 BASIC 的实际生锈程度:-) 用INT() 包裹着它。
  • 我不确定 Commodore Basic,但我认为在其他 Basic 中,数组的起始索引通常为 1,因此您应该 DIM A$(4)。如果我的(生锈的)记忆对我有用,那么在 BASICA/GWBASIC 时代 Basic 的后期,有一个 OPTION BASE 命令用于确定数组是从 0 开始还是从 1 开始。
  • 是的,我可以确认 GWBASIC 具有用于选择数组起点的“OPTION BASE”。我不记得它被限制为 0/1,我相信你可以从你想要的任何整数开始。我不记得 GWBASIC 默认是 0 还是 1...
  • 我知道(和使用过的)大多数 BASIC 方言数组的起始索引是 0,而不是 1。
【解决方案2】:

以上答案正确而全面。

另一方面,这个答案不是,但我上个月实际上做了一点 Commodore BASIC 并决定字符串索引有时会很有用,所以这里有一个非答案,可以重新定义你的问题.

100 X$ = "MAGENTACYAN TAN KHAKI " 110 PRINT MID$(X$,INT(RND(1)*4)*7, 7)

此代码获取一个从 0 到 3 的随机 int,然后使用它来查找包含所有四个条目的单个字符串的起始索引,每个条目(在必要时)填充为 7 个字符。该填充是必需的,因为 MID$ 的最后一个参数是要提取的子字符串的长度。

何必呢?

何时考虑对数组进行索引: (1) when your string data is near-uniform length, and (2) when you have a LOT of little strings.

如果这两个条件为真,那么包括数据在内的完整代码会更紧凑,并且由于分配的指针更少,占用的内存也更少。

附:如果您发现我犯了一个错误,则可以加分!

【讨论】:

  • 绝对是一个数组。这就是真正的答案在他的一个场景中所做的。哦,您在问何时考虑对数组进行索引。 (1) 当您的字符串数据长度接近一致时,以及 (2) 当您有很多小字符串时。如果这两个条件为真,那么包括数据在内的完整代码会更紧凑,并且由于分配的指针更少,占用的内存也更少。
【解决方案3】:

这是另一种方法,使用一个变量作为输出,ON..GOSUB 根据 [1..4] 范围内的随机数设置它。

10 ON INT(RND(1)*4+1) GOSUB 100,110,120,130 20 PRINT A$ 30 END 100 A$ = "MAGENTA":RETURN 110 A$ = "CYAN":RETURN 120 A$ = "TAN":RETURN 130 A$ = "KHAKI":RETURN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多