« 初心者向けにまとめ | メイン | UJMLサンプル006:だんだん大きくなる箱 »

UJMLサンプル005:数あてゲーム(2006/01/31)

Number_bingo_001_10~9の数字を当てるゲーム。開始後、0~9のボタンを押して数字を当てる。もしはずれたら、正解が大きいか小さいか教えてくれます。

ボタン0~9のイベント処理のためのコードが長くなってしまったので、ここは短くまとめたいところ。ちょっとだらだら感がありますが、一応動きます。

SDKのサンプルの webapps/ujmlsamples/standalone/visualelements/settings.ujml あたりが使えそうですが、settings.ujmlがincludeするpadbuttons.ujmsの347行目ぐらいからがヒントになりそうな感じだ。ちなみにpadbuttons.ujmsは webapps/ujmlsamples/standalone/components の中に入っている。

ソースコード
----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.2//EN" "ujml.dtd" >
<ujml>
    <application>
        <state-variables>
            <state-var name="sMessage" type="boolean" />
            <state-var name="sInput" type="int" />
        </state-variables>
        <variables>
            <var name="mNumber" type="int"/><!-- 正解を保存する -->
            <var name="mMessage" type="string"/><!-- 表示するメッセージ -->
        </variables>
        <functions><!-- 関数はこちらで定義しましょうねと -->
            <function name="randRange" type="int"><!-- これは指定範囲の数字をランダムに作る関数 -->
                <parameters>
                    <var name="seed" type="int"/>
                    <var name="min" type="int"/>
                    <var name="max" type="int"/>
                </parameters>
                <return>
                    <eval>
                        (_srand(seed) % (max - min + 1)) + min
                    </eval>
                </return>
            </function>
        </functions>
        <templates>
            <template name="messageLabel">
                <display>
                    <label>
                        <text><eval>mMessage</eval></text>
                        <bg>&_COLOR_WHITE;</bg>
                    </label>
                </display>
            </template>
        </templates>

        <script>
            mMessage = "ボタン「0」で開始";
            sMessage = true;<!-- 「0」を押してもらうメッセージを表示 -->
            sInput = 0;
        </script>
        <display>
            <fn>
                <text>Back</text>
                <event name="onselect">
                    <accelerators> <key>F1</key> </accelerators>
                    <script>
                        _unload();
                    </script>
                </event>
            </fn>
        </display>
        <states>
            <state var="sMessage">
                <transition value="true">
                    <display>
                        <expand template="messageLabel"/>
                    </display>
                </transition>
            </state>
            <state var="sInput">
                <transition value="0">
                    <display>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>0</key>
                                </accelerators>
                                <script>
                                    <!-- まず問題用の数字をランダムに作る -->
                                       mNumber = randRange(_msec(), 0, 9);<!-- 新しい数字 -->
                                       sMessage = false;
                                       mMessage = "0から9の数字をあてよう。";
                                       sMessage = true;
                                       sInput = 1;
                                </script>
                            </event>
                        </box>
                    </display>
                </transition>

               

                <transition value="1"><!-- 「回答中」状態です、あたったらsInput=2に遷移しますよ -->
                    <display>
                        <!-- 0から9までのボタン押しイベント処理 -->
                        <!-- エレメント1つで済ませたいけど、10個のboxを配置してます、もちろん空で -->
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>0</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 0){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 0){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>1</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 1){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 1){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>2</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 2){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 2){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>3</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 3){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 3){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>4</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 4){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 4){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>5</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 5){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 5){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>6</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 6){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 6){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>7</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 7){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 7){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>8</key>
                                </accelerators>
                                <script>
                                    sMessage = false;

                                    if(mNumber == 8){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 8){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>9</key>
                                </accelerators>
                                <script>
                                    sMessage = false;
                                    if(mNumber == 9){
                                        mMessage = "正解 ボタン「0」で開始";
                                        sInput = 2;
                                    }else if(mNumber &_GT; 9){
                                        mMessage = "大きいよ";
                                    }else{
                                        mMessage = "小さいよ";
                                    }
                                    sMessage = true;
                                </script>
                            </event>
                        </box>
                    </display>
                </transition>
                <transition value="2"><!-- 正解したので初期化、0ボタン押したら開始します。 -->
                    <display>
                        <box>
                            <event name="onSelect">
                                <accelerators>
                                    <key>0</key>
                                </accelerators>
                                <script>
                                       mNumber = randRange(_msec(), 0, 9);<!-- 新しい数字 -->
                                       sMessage = false;
                                       mMessage = "0から9の数字をあてよう。";
                                       sMessage = true;
                                       sInput = 1;
                                </script>
                            </event>
                        </box>
                    </display>
                </transition>
            </state>
        </states>
    </application>
</ujml>

トラックバック

この記事のトラックバックURL:
https://www.typepad.com/services/trackback/6a00d8341c2e2e53ef00e5506f93fa8833

UJMLサンプル005:数あてゲームを参照しているブログ:

» UJMLサンプル:数あてゲーム その2 (UIEngine だ)
以前作成した「数あてゲーム」はソースコード300行と長すぎたので、150行にまと [続きを読む]

コメント

この記事へのコメントは終了しました。