トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

よく使われる命令

if命令

Aボタンを押している間だけ画面に「AAA」と表示させたい場合は、「もしAボタンが押されたらAAAと表示する」というコードが必要です。
このような「もし〜したら・・・をする」という命令は"if"命令を使用します。
この場合だと以下のようになります。

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

end

"if"と"then"の間に条件を書きます。今回は「Aボタンが押されたら」です。
そして、その後に何をするかを書きます。今回は「AAA」を表示です。
そして最後の"end"は、"if"命令が終了した事を示します。

条件に合わない場合は"if"から"end"の間は無視され、次のコードへ移ります。

また、「もし〜したら・・・をする。そうでなければ---をする」というものもあります。
上のコードに付け足して、「もしAボタンが押されたらAAAと表示する。そうでなければBBBと表示する」とする場合は以下の通りです。

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

else

BGBotText:PrintXY( 2, 2, "BBB" )

end

"else"が「そうでなければ」になります。
この場合、何も押していない(つまりAを押していない)状態だと画面にBBBと表示されます。

さて、これらのif命令を全て書くと以下のようになります(elseは省略します)

-- 下画面を文字の表示に設定します[コメント]

SCREEN_BOTTOM = 0

BGBotText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_BOTTOM, BGBotText )

 

-- Aボタンが押されたら画面に「AAA」と表示する[コメント]

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

end

 

-- 何かキーが押されるまで待機します[コメント]

DSLua.WaitForAnyKey()

しかし、これだけでは何も起きません。
このコードだと「画面の設定」→「もしAボタンが押されたらAAAと表示」→「何かキーが押されるまで待機」となり、一瞬でコードが終了してしまいます。
プログラムのコードは、一度実行すると後へは戻りません。
プログラムが始まった瞬間にはAボタンは押されていないので、if命令は無視され、最後の「DSLua.WaitForAnyKey()」まで進んでしまうからです。

そこで、「ループ」という命令を使用し、特定の命令を繰り返します。

ループ

上のコードの場合、「Aが押されているかどうか」の判断は1度しか行われません。
そこで、以下のコードを利用して、ずっと「Aが押されているかどうか」を判断します。

--以下の命令を繰り返します[コメント]

while true do

 

-- Aボタンが押されたら画面に「AAA」と表示する[コメント]

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

end

 

-- STARTを押すとループから脱出します[コメント]

if Pads.Start() then

break

end

end

これで始めの"while true do" から 終わりの"end"までの間がずっと繰り返されます。
ずっと「Aが押されているかどうか」を判断してくれるので、好きな時にAを押す事で画面にAAAと表示させる事が可能になります。

また、ループから抜け出すには"break"を使用します。
上では"if"命令を使用して「もしスタートを押すとループから抜け出す」となっています。

画面のクリア

上のループを使用する事で「Aが押されたらAAAと表示」は可能になりましたが、1度Aを押してしまうと画面にはずっと「AAA」と表示されてしまいます。
実際はAを押す度に表示されているのですが、既に画面に「AAA」と表示されているので、上書きされるだけで変わりは分かりません。
そこで、先ほどの"if"と"else"を使用して、Aを押していない時は「画面をクリア」というコードを置きます。
これでAが押されていない時は画面がクリアされるので、Aを押している時だけAAAと表示されます。

以下が画面をクリアするコードです。

BGBotText:Clear()

これを先ほど上で説明"else"の所に挿入してみます。すると以下のようになります。

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

else

BGBotText:Clear()

end

これで「Aが押されたらAAAと表示。そうでなければ画面をクリアする」となり、Aボタンを押している間だけ画面にAAAと表示されるようになりました。

全コード

-- 下画面を文字の表示に設定します[コメント]

SCREEN_BOTTOM = 0

BGBotText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_BOTTOM, BGBotText )

 

--以下の命令を繰り返します[コメント]

while true do

 

-- Aボタンが押されたら画面に「AAA」と表示。そうでない時は画面をクリアする[コメント]

if Pads.A() then

BGBotText:PrintXY( 2, 2, "AAA" )

else

BGBotText:Clear()

end

 

-- STARTを押すとループから脱出します[コメント]

if Pads.Start() then

break

end

end