MorningScriptは、テキストの中に埋め込んで使える超軽量なスクリプト言語です。[
と ]
で囲んだコマンドを使って、動的なテキスト生成、計算、条件分岐などを行うことができます。
こんにちは、モニスク!
今日は[rand 1 31]日です。
このプログラムを実行すると、以下のような出力になります。
[rand 1 31]
の部分が1から31までのランダムな数値に置き換わります。
[
と ]
で囲む
[var:name 太郎]
[var:Name]
と [var:name]
は別の変数以下のコマンドは、通常のテキストと同じ行に書くことができます。
今日の運勢は[rand 1 100]点です!
私の名前は[var:name]です。
以下のコマンドは、必ず独立した行に書く必要があります。
[var:score 100]
[plus var:score 50]
[if var:score > 100]
高得点です!
[endif]
得点は[var:score 100]点です。 ← エラー!
[var:score 100]
得点は[var:score]点です。
変数は、値を保存しておくための「箱」のようなものです。
a-z
, A-Z
, 0-9
, _
)score
, player_1
, totalCount
, x123
[var:message こんにちは]
[var:score 100]
[var:player_name 太郎]
メッセージ: [var:message]
現在のスコア: [var:score]点
定義されていない変数を参照すると、空文字列(何も表示されない)になります。
[var:defined_var 存在する]
定義済み: [var:defined_var]
未定義: [var:undefined_var]
変数を空文字列に戻すことができます。
[var:temp 一時的な値]
設定後: [var:temp]
[reset var:temp]
リセット後: [var:temp](空)
[var:original 元の値]
[var:copy [var:original]]
オリジナル: [var:original]
コピー: [var:copy]
MorningScriptでは整数の四則演算ができます。小数は使用できません。
[var:score 100]
[plus var:score 50]
結果: [var:score] ← 150
[var:hp 100]
[minus var:hp 30]
残りHP: [var:hp] ← 70
[var:price 500]
[multiply var:price 3]
合計: [var:price]円 ← 1500円
[var:total 100]
[divide var:total 3]
結果: [var:total] ← 33
数値の代わりに変数を使うこともできます。
[var:damage 20]
[var:hp 100]
[minus var:hp var:damage]
残りHP: [var:hp] ← 80
条件によって表示する内容を変えることができます。
[var:age 20]
[if var:age >= 18]
成人です
[endif]
[var:score 75]
[if var:score >= 80]
合格です!
[else]
もう少し頑張りましょう
[endif]
[var:grade 85]
[if var:grade >= 90]
評価: S
[elseif var:grade >= 80]
評価: A
[elseif var:grade >= 70]
評価: B
[else]
評価: C
[endif]
演算子 | 意味 | 例 |
---|---|---|
= |
等しい | [if var:x = 10] |
!= |
等しくない | [if var:x != 0] |
> |
より大きい | [if var:age > 18] |
>= |
以上 | [if var:score >= 60] |
< |
より小さい | [if var:hp < 20] |
<= |
以下 | [if var:count <= 100] |
[var:player_score 100]
[var:enemy_score 80]
[if var:player_score > var:enemy_score]
プレイヤーの勝利!
[else]
敵の勝利...
[endif]
数値以外の値も比較できます(等号・不等号のみ)。
[var:answer はい]
[if var:answer = はい]
了解しました
[else]
キャンセルしました
[endif]
同じ処理を繰り返し実行できます。
[loop 5]
こんにちは!
[endloop]
[var:i 0]
[loop 5]
[plus var:i 1]
[var:i]回目のループ
[endloop]
[var:times 3]
[loop var:times]
繰り返し
[endloop]
[var:i 0]
[loop 10]
[plus var:i 1]
数: [var:i]
[if var:i = 5]
ここで終了
[break]
[endif]
[endloop]
ループの中にループを書くこともできます。
[var:total 0]
[loop 2]
外側のループ
[loop 3]
[plus var:total 1]
内側: [var:total]
[endloop]
[endloop]
ランダムな数値を生成できます。
サイコロ: [rand 1 6]
コイン: [rand 0 1]
パーセント: [rand 1 100]%
[var:dice [rand 1 6]]
サイコロの目: [var:dice]
もう一度: [var:dice] ← 同じ値
温度: [rand -10 35]度
A: いいえ、if文は必ず単独の行に書く必要があります。
結果は[if var:x = 1]OK[else]NG[endif]です
[if var:x = 1]
結果はOKです
[else]
結果はNGです
[endif]
A: いいえ、MorningScriptは整数のみ対応しています。割り算の結果も切り捨てられます。
[var:x 10]
[divide var:x 3]
結果: [var:x] ← 3(3.333...ではない)
A: いいえ、変数名は半角英数字とアンダースコアのみです。
[var:名前 太郎] ← エラー!
[var:name 太郎] ← OK
A: MorningScriptには配列機能はありません。必要な場合は番号付き変数を使います。
[var:item_1 剣]
[var:item_2 盾]
[var:item_3 薬]
A: MorningScriptには関数定義機能はありません。
A: エラーメッセージには行番号が含まれているので、その行を確認してください。
// おみくじプログラム
[var:fortune [rand 1 5]]
今日の運勢は...
[if var:fortune = 1]
大吉!今日もファンタスティックな1日になりそうだぜ。
[elseif var:fortune = 2]
吉。ふふっ、なにか良いことがありそうだ。
[elseif var:fortune = 3]
中吉。平穏な一日、悪くないね。
[elseif var:fortune = 4]
小吉。小さな幸せを見つけに行こうか。
[else]
凶...もうだめだ、おしまいだぁぁぁぁああああぁぁ!!!。
[endif]
ラッキーナンバー: [rand 1 9]
// テストの点数を設定
[var:math 85]
[var:english 72]
[var:science 90]
=== 成績表 ===
数学: [var:math]点
英語: [var:english]点
理科: [var:science]点
// 合計点を計算
[var:total 0]
[plus var:total var:math]
[plus var:total var:english]
[plus var:total var:science]
合計: [var:total]点
// 平均点を計算(小数点以下切り捨て)
[var:average var:total]
[divide var:average 3]
平均: [var:average]点
// 評価
[if var:average >= 90]
評価: 秀
[elseif var:average >= 80]
評価: 優
[elseif var:average >= 70]
評価: 良
[elseif var:average >= 60]
評価: 可
[else]
評価: 不可
[endif]
// 簡単なパスワード生成
パスワード候補:
[loop 10]
pw[rand 0 9][rand 0 9][rand 0 9][rand 0 9][rand 0 9][rand 0 9][rand 0 9][rand 0 9]
[endloop]
※実際のパスワードにはもっと複雑なものを使用してください
// 2の段
[var:base 2]
[var:i 0]
[var:base]の段:
[loop 9]
[plus var:i 1]
[var:result var:base]
[multiply var:result var:i]
[var:base] × [var:i] = [var:result]
[endloop]
原因: コマンドのスペルが間違っているか、存在しないコマンド
[vra:x 10] ← × varのスペルミス
[var:x 10] ← ○
原因: 単独行コマンドをテキストと混在させた
名前は[var:name 太郎]です ← ×
[var:name 太郎] ← ○
名前は[var:name]です ← ○
原因: 四則演算で未定義の変数を使用
[plus var:undefined 10] ← × 未定義
[var:score 0] ← ○ 先に定義
[plus var:score 10] ← ○
原因: 0で割り算をした
[var:x 10]
[divide var:x 0] ← ×
原因: loop~endloopの外でbreakを使用
[break] ← × ループの外
[loop 5]
[break] ← ○ ループの中
[endloop]
コメント
プログラムの説明を書くためのコメント機能があります。
行コメント
//
で始まる行はコメントとして扱われ、実行されません。コメントのルール
//
を書く(行の途中からは不可)