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