スロットゲームを作ろう その2 何事ものんびりと(2007/04/05)
こんにちは。なんちゃってパチプロになったUIEngineだです。さて、今日も昨日の収支報告から。早速、前回に引き続きスロットゲームを作っていこう。今のうちに断っておくと、手元に完成したスロットゲームがあるわけではなく、このブログの更新と同じ速度で作っているので、ソースコードの美しさとか、そういったものは期待しないでもらいたい。
つまり、スパゲッティを生産している。もしかしたら、途中でがっつり変更を入れ、それまでの流れをぶち壊しにするのだが、しばらくこのスタイルで続けよう。ではなく、ソースコードを貼り付けておく。追加した点は、ゲームの進行を管理するステート変数sGameStatusを例によってint型で追加した点。
<state-var name="sGameStatus" type="int"/>
このステート変数sGameStatusが何をするかと言えば、実に簡単。sBaseStatusの値が1の間、スロットゲームの進行状態を管理するわけだ。スロットゲームのインタフェースは実に簡単である。それは、
・コイン投入口
・スタートレバー
・ボタン1
・ボタン2
・ボタン3
の5つのインタフェースが極めてシンプルにユーザーと機械をつないでいる点だ。強く押そうが、連打しようが当りはずれに関係無い(笑)。以前はレバーに細工するとあたりはずれが云々と言う裏技があったようだが。
今回、sBaseStatus=1つまりゲーム中になると、コイン投入から始まりボタン3を押すところまで、FIREボタンでゲームの状態が次の状態に遷移するようsGameStatusの値を変更している。こんな感じで、sGameStatusの値と紐づいたゲームの状態を作りこんで行けばよいはずだ。いまのところ、予想している内容を書いておくと
・コイン投入
→投入すると、どこかのランプが点灯
・スタートレバー
→全ドラムが回転 画像が上から下に流れる感じで
・ボタン1
→左のドラムが停止※反対から押す場合はどうしようかな?
・ボタン2
→中央のドラムが停止
・ボタン3
→右のドラムが停止
→何かあたったらクレジットが増える、、クレジットという仕組は面倒、つける必要あるのだろうか?
こんな感じ。まぁ、面倒なのはドラムの回転部分だろう。停止の制御というものがあるらしいのだが、はい、全く原理がわかりかねる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 2.1//EN"
"http://www.uievolution.com/dtd/ujml-2.1.dtd" [
]>
<!--
Copyright (c) 2007, uienginda.blogs.com.
http://uienginda.blogs.com スロットゲームを作ろう
-->
<ujml>
<application>
<state-variables>
<state-var name="sBaseStatus" type="int"/>
<state-var name="sGameStatus" type="int"/>
</state-variables>
<script>
sBaseStatus = 0;
</script>
<display>
<!-- Display F1 function key for exiting app -->
<fn>
<text>終了</text>
<event name="onselect">
<accelerators>
<key>F1</key>
</accelerators>
<script>
_unload();
</script>
</event>
</fn>
<fn>
<text>次へ</text>
<event name="onselect">
<accelerators>
<key>F2</key>
</accelerators>
<script>
if(sBaseStatus==0){
sBaseStatus = 1;
}else if(sBaseStatus==1){
sBaseStatus = 2;
}else if(sBaseStatus==2){
sBaseStatus = 0;
}
</script>
</event>
</fn>
</display>
<states>
<state var="sBaseStatus">
<transition value="0">
<comment>スタート画面の状態:各種機能メニュー等を表示</comment>
<display>
<label>
<text>スタート画面</text>
</label>
</display>
</transition>
<transition value="1">
<comment>ゲーム中</comment>
<display>
<label>
<text>ゲーム中</text>
</label>
</display>
<script>
sGameStatus = 1;
</script>
</transition>
<transition value="2">
<comment>ゲーム終了 結果表示等</comment>
<display>
<label>
<text>ゲーム終了:結果表示</text>
</label>
</display>
<script>
sGameStatus = 0;
</script>
</transition>
</state>
<state var="sGameStatus">
<transition value="1">
<comment>スタート待ち、、</comment>
<display>
<label><text>金を投入</text><y>30</y></label>
<box>
<event name="onselect">
<accelerators><key>FIRE</key></accelerators>
<script>
sGameStatus = 2;
</script>
</event>
</box>
</display>
</transition>
<transition value="2">
<comment>ドラム回転中</comment>
<display>
<label><text>回転中</text><y>30</y></label>
<box>
<event name="onselect">
<accelerators><key>FIRE</key></accelerators>
<script>
sGameStatus = 3;
</script>
</event>
</box>
</display>
</transition>
<transition value="3">
<comment>停止</comment>
<display>
<label><text>第一停止</text><y>30</y></label>
<box>
<event name="onselect">
<accelerators><key>FIRE</key></accelerators>
<script>
sGameStatus = 4;
</script>
</event>
</box>
</display>
</transition>
<transition value="4">
<comment>停止</comment>
<display>
<label><text>第二停止</text><y>30</y></label>
<box>
<event name="onselect">
<accelerators><key>FIRE</key></accelerators>
<script>
sGameStatus = 5;
</script>
</event>
</box>
</display>
</transition>
<transition value="5">
<comment>停止</comment>
<display>
<label><text>第三停止</text><y>30</y></label>
<box>
<event name="onselect">
<accelerators><key>FIRE</key></accelerators>
<script>
sGameStatus = 1;
</script>
</event>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
コメント