LOLGraphics 3.4 编程/条件和循环
我们到目前为止所学到的东西非常棒,但是为了在编程语言中编写任何有用的东西,必须有条件和循环,或者至少有一种方法可以使用条件和标签来进行“伪循环”。幸运的是,LOLGraphics 具有所有这三者,在本节中,我们将学习所有这些!🎊
例如,在 Python 中,if else 语句如下所示
if x==5:
#Instructions
elif x=6:
#Instructions
else:
#Instructions
不同的编程语言可能具有不同的语法,但总体思路保持不变。例如,在 Java 中,您必须将条件放在括号中,写 else if 而不是 elif,如果代码块超过一行,则用花括号 {} 包裹。
但是,在 LOLGraphics 中,它看起来完全不同。
在 LOLGraphics 中,有一个可以使用命令更新的单一标志,它用于条件和循环。它的默认值为 false,要更新它,请键入 PLZ ASK CEILIN KAT 2 CHEK IZ <condition>
。条件可以是比较两个数字、地址或变量,或两个的组合。
命令 PLZ ASK CEILIN KAT 2 CHEK IZ [X]==8
将检查一位字节变量 X 中的值是否等于 8。您可以使用两位字节变量 ([[X]])、四位字节变量 ([[[X]]]) 和八位字节变量 ([[[[X]]]]).
所以我们知道如何设置标志,但是如何使用它呢。幸运的是,对于我们来说,天花板猫非常慷慨,只要标志为真,它就会一直点头。只需键入 IF CEILIN KAT IZ NODDING PLZ RUN <subprogram>
。如果你想在标志为假时运行一个子程序,请键入 ELSE PLZ RUN <subprogram>
。请注意,与其他编程语言不同,这些是两个独立的命令,这意味着在 LOLGraphics 中,您可以拥有任何没有“if”的“else”。
此外,您可以使用命令 PLZ ASK CEILIN CAT 2 NOD
和 PLZ ASK CEILIN CAT 2 STOP NODING
手动将标志设置为真和假。
在上一节中,您已经学习了如何进行无限递归。使用 if/else 语句,您可以进行有限递归。使用它,您可以编写一个程序,将数字转换为罗马数字。以下是未包含在编辑器中作为示例程序的源代码
HAI 3.4 0 10
IM IN UR CODE EXECUTIN UR KOMANDZ
I HAS A TWO BYTE DAT IZ CALLED X
DIS IZ MY LABEL! IT IZ KALLED START
PLZ ASK TEH USR 2 GIMME A TWO BYTE X
PLZ PRINT TWO BYTE X
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>999
IF CEILIN KAT IZ NODDING PLZ RUN M
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>899
IF CEILIN KAT IZ NODDING PLZ RUN CM
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>499
IF CEILIN KAT IZ NODDING PLZ RUN D
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>399
IF CEILIN KAT IZ NODDING PLZ RUN CD
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>99
IF CEILIN KAT IZ NODDING PLZ RUN C
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>89
IF CEILIN KAT IZ NODDING PLZ RUN XC
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>49
IF CEILIN KAT IZ NODDING PLZ RUN L
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>39
IF CEILIN KAT IZ NODDING PLZ RUN XL
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>9
IF CEILIN KAT IZ NODDING PLZ RUN X
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>8
IF CEILIN KAT IZ NODDING PLZ RUN IX
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>4
IF CEILIN KAT IZ NODDING PLZ RUN V
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>3
IF CEILIN KAT IZ NODDING PLZ RUN IV
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>0
IF CEILIN KAT IZ NODDING PLZ RUN I
PLZ PRINT TEXT
PLZ PRINT TEXT======================
PLZ GOTO LABEL START
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED M
PLZ TYPE TEXT M
PLZ SET TWO BYTE X X-1000
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>999
IF CEILIN KAT IZ NODDING PLZ RUN M
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED CM
PLZ TYPE TEXT CM
PLZ SET TWO BYTE X X-900
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED D
PLZ TYPE TEXT D
PLZ SET TWO BYTE X X-500
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED CD
PLZ TYPE TEXT CD
PLZ SET TWO BYTE X X-400
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED C
PLZ TYPE TEXT C
PLZ SET TWO BYTE X X-100
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>99
IF CEILIN KAT IZ NODDING PLZ RUN C
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED XC
PLZ TYPE TEXT XC
PLZ SET TWO BYTE X X-90
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED L
PLZ TYPE TEXT L
PLZ SET TWO BYTE X X-50
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED XL
PLZ TYPE TEXT XL
PLZ SET TWO BYTE X X-40
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED X
PLZ TYPE TEXT X
PLZ SET TWO BYTE X X-10
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>9
IF CEILIN KAT IZ NODDING PLZ RUN X
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED IX
PLZ TYPE TEXT IX
PLZ SET TWO BYTE X X-9
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED V
PLZ TYPE TEXT V
PLZ SET TWO BYTE X X-5
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED IV
PLZ TYPE TEXT IV
PLZ SET TWO BYTE X X-4
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED I
PLZ TYPE TEXT I
PLZ SET TWO BYTE X X-1
PLZ ASK CEILIN KAT 2 CHEK IZ [[X]]>0
IF CEILIN KAT IZ NODDING PLZ RUN I
IM OUTTA UR SUBPROGRAM
注意一些数字是如何递归检查的,而另一些数字,如 L 代表 50、XL 代表 40 和 IV 代表 4,只能出现一次,因此只打印一次。
还记得以前提到的“8462 演示”吗?它类似于 WASD 演示,只是使用了数字小键盘。让我们在这里实现它的一部分。请注意,这只是代码的一部分,所以不要指望将其复制到编辑器中并使其正常工作。此外,不要太担心子程序的具体功能,我们将在关于图形的章节中介绍它们。专注于条件。假设变量 graphics 是之前由用户在代码中提供的。
PLZ ASK CEILIN KAT 2 CHEK IZ [BUTTON]==8
IF CEILIN KAT IZ NODDING PLZ RUN UP
PLZ ASK CEILIN KAT 2 CHEK IZ [BUTTON]==2
IF CEILIN KAT IZ NODDING PLZ RUN DOWN
PLZ ASK CEILIN KAT 2 CHEK IZ [BUTTON]==4
IF CEILIN KAT IZ NODDING PLZ RUN LEFT
PLZ ASK CEILIN KAT 2 CHEK IZ [BUTTON]==6
IF CEILIN KAT IZ NODDING PLZ RUN RIGHT
如您所见,代码既不美观也不高效。在本节的后面,我们将学习如何编写此代码的更好版本。此外,上面的代码包含 8 行代码,因为空行和注释不会发送到解释器。
幸运的是,有一种方法可以使上一节中的代码更有效率,更美观,那就是使用 switch case 命令。LOLGraphics 解释器存储一个单一的八位字节变量(这是 LOLGraphics 中可能的最大尺寸,以便您也可以将更小的尺寸放入其中)。它可以使用 SWITCH 命令更新,可以使用 CASE 命令检查。让我们使用上一节中的代码更有效的版本作为示例
SWITCH [BUTTON]
CASE 8 UP
CASE 2 DOWN
CASE 4 LEFT
CASE 6 RIGHT
CASE 86,68,9 UP_RIGHT
CASE 48,84,7 UP_LEFT
CASE 42,24,1 DOWN_LEFT
CASE 62,26,3 DOWN_RIGHT
第一行将一位字节变量 BUTTON 中的内容放入 switch/case 变量中(默认值为 0)。第二行代码检查变量是否等于 8,如果等于,则转到名为 UP 的子程序(同样,不要太担心它的功能,我们将在关于图形的章节中了解更多信息)。
第三、第四和第五行代码或多或少做同样的事情,所以让我们跳过它们,解释第六行代码。这行代码有多个数字,用逗号隔开,没有空格。必须这样做。如果您没有键入逗号或在值之间键入空格,您的代码将无法工作!如果 switch/case 变量的值等于 86、68 或 9,则子程序 UP_RIGHT 将运行。如果您检查数字小键盘,就会明白它的含义。
上面的代码由 9 行代码组成,比上一节中的代码多一行,但它完成的工作要多得多,因为它还允许按对角线移动。如果你只想上下左右移动,则需要 5 行代码。
如您所见,使用 switch case 的代码既干净又高效。那么为什么还要使用 if/else 呢?在这个特定的程序中,使用 switch/case 是更可取的,但是您应该知道它不太灵活,因为它只能用于检查变量是否等于一个常数。如果您想检查变量是否等于另一个变量或使用更多少于运算,则必须使用 if else。有时您想将一个变量与另一个变量进行比较,在这种情况下,switch/case 也不太有用。
要创建无限循环,请键入 FOREVER RUN subprogram
。现在让我们重写来自“接口、hello world 程序、子程序和标签”的无限循环代码,只是使用实际的循环
HAI 3.4 0 100
IM IN UR CODE EXECUTIN UR KOMANDZ
FOREVER RUN PRINT
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED PRINT
PLZ PRINT TEXT I CAN HAS A CHEEZBURGER?
IM OUTTA UR SUBPROGRAM
循环的工作方式有点像 if 语句,因为您不能在同一行中编写条件本身。循环检查天花板猫是否点头,如果点头,则运行一个子程序。命令如下所示:WHILE CEILIN CAT IZ NODDIN PLZ RUN <subprogram>
。如果您想将其用作实际的 while 循环,请在该行之前更新标志,并在子程序结束时更新标志。
以下代码打印用户输入的数字的阶乘。它在 LOLGraphics 编辑器中不可用作为示例代码。
HAI 3.4 0 100
IM IN UR CODE EXECUTIN UR KOMANDZ
I HAS A EIGHT BYTE DAT IZ CALLED X
I HAS A EIGHT BYTE DAT IZ CALLED I
PLZ ASK TEH USR 2 GIMME A EIGHT BYTE X
PLZ SET EIGHT BYTE I X-1
PLZ ASK CEILIN KAT 2 CHEK IZ [[[[I]]]]>1
WHILE CEILIN CAT IZ NODDIN PLZ RUN MULTIPLY
PLZ PRINT EIGHT BYTE X
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED MULTIPLY
PLZ SET EIGHT BYTE X X*I
PLZ SET EIGHT BYTE I I-1
PLZ ASK CEILIN KAT 2 CHEK IZ [[[[I]]]]>1
IM OUTTA UR SUBPROGRAM
以下代码打印斐波那契数列中的数字。它在 LOLGraphics 编辑器中作为示例代码之一提供。
HAI 3.4 0 100
IM IN UR CODE EXECUTIN UR KOMANDZ
I HAS A ONE BYTE DAT IZ CALLED MAX
PLZ TYPE TEXT HOW MANY NUMBERS DO YOU WANT ME TO PRINT?
PLZ ASK TEH USR 2 GIMME A ONE BYTE MAX
PLZ PRINT ONE BYTE MAX
PLZ PRINT TEXT ======================
I HAS A ONE BYTE DAT IZ CALLED I
I HAS A EIGHT BYTE DAT IZ CALLED A
I HAS A EIGHT BYTE DAT IZ CALLED B
I HAS A EIGHT BYTE DAT IZ CALLED C
PLZ SET ONE BYTE I 2
PLZ SET EIGHT BYTE A 0
PLZ SET EIGHT BYTE B 1
PLZ ASK CEILIN KAT 2 CHEK IZ [MAX]>0
IF CEILIN KAT IZ NODDING PLZ RUN PRINT_A
PLZ ASK CEILIN KAT 2 CHEK IZ [MAX]>1
IF CEILIN KAT IZ NODDING PLZ RUN PRINT_B
PLZ ASK CEILIN KAT 2 CHEK IZ [I]<[MAX]
WHILE CEILIN CAT IZ NODDIN PLZ RUN COUNT
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED COUNT
PLZ SET ONE BYTE I I+1
PLZ SET EIGHT BYTE C A
PLZ SET EIGHT BYTE A B
PLZ SET EIGHT BYTE B C+A
PLZ PRINT EIGHT BYTE B
PLZ ASK CEILIN KAT 2 CHEK IZ [I]<[MAX]
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED PRINT_A
PLZ PRINT EIGHT BYTE A
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED PRINT_B
PLZ PRINT EIGHT BYTE B
IM OUTTA UR SUBPROGRAM