fx-5800P【ゲーム】:もぐら叩き(8):修正あり

fx-5800Pでもぐら叩き
e-Gadget




fx-5800P【ゲーム】もぐら叩き(7) の続き


色々と工夫するところがまだ有りそうだが、前回までに作ったゲームのメインルーチンを土台にして、ゲームとしてまとめようと思う。


そこで、ゲームコンセプトを、「もぐら退治の賞金稼ぎ」とする。

◆ゲーム開始時に、LIFE をもらう。
◆モグラ退治が遅い場合や間違って退治すると、LIFE が減り、それがゼロになるとゲーム終了
◆モグラ1匹あたり、定額の資金をもらう。
◆モグラ退治に時間がかかるほど、費用がかさむ
◆モグラを素早く退治すると、退治費用が節約でき、資金の残りが賞金となる
◆限られたLIFEで、どこまで賞金(PRIZE) を稼げるか、がんばろう!!



◆モグラが出現すると FUND (資金)を貰う
◆モグラを叩くと、反応時間分のCOST(費用)が減る
◆モグラ退治が速いほど、FUND - COST 分の儲け(得点)が多くなり、PRIZE(賞金)が増える
◆モグラ退治に時間がかかると、BURST となり LIFE が減る。
◆モグラを取り逃がすと、TIME-OUTとなり、 LIFE が減るだけでなく、 PRIZE がごっそり減る
◆ゲームが進むと、FAKE モードが発動される
FAKE ONE モードは、偽モグラが出現する。これは放置。手を出すと LIFE が減る
FAKE TWO モードは、偽モグラと本物モグラが同時に出現する。本物を退治すると儲けがあるが、偽モグラを退治すると LIFE が減る。



ゲームの内部仕様を、以下のようにする。これまで作ったロジックはそのままにして、上の仕様に併せて、分かりやすい変数名になるように、変数を一部変更する。

1)持ち点について:
・モグラが出現するごとに、持ち点(資金=fund)をもらう
・ 持ち点は、設定変更できる
・持ち点を "FUND" と呼び、変数 F に格納する
変数Fデフォルトを 20 とする
2)モグラを叩くまでの手間 (COST):
COST は、モグラが出現すると時間とともに増えてゆく
・正しいモグラを叩くと、その時点で COST が確定する。
・モグラを叩くのに時間がかかれば、それだけCOSTが多いことになる
COST変数C に格納する
3)得点について:
・モグラが出現する際に貰う持ち点から、COST を差し引いたものが得点
得点 = [ FUND (F) ] - [ COST (C) ]
・モグラへの反応が速ければ得点が多くなり、遅ければ得点は少ない

・COSTが一定以上になる(反応が遅い)時は、BURST してペナルティーが課される。
BURST になる COST"BURST LIMIT"と呼び、変数B に格納する。
・BURST LIMITは、設定変更できる。デフォルトを17とする。
・C≦B の時(モグラへの反応が速い時): 得点 = F-C を得る
・C>B の時(モグラへの反応が遅い時): 得点 = 0、さらに LIFE が1つ下がる
4)PRIZE(総合点)について:
獲得した得点を足し合わせたものを PRIZE(総合点)と表記し、を変数 P に格納する
PRIZE をリアルタイム表示する
PRIZEの更新: P+F-C→P
5)Time-outについて:
モグラへの反応が遅すぎると、モグラが逃げてしまい、PRIZELIFE の双方が減らされる。この時間を "TIME OUT"と呼び、変数E (End のE)に格納する。
・タイムアウト条件の設定を変更可能とする。
C>E の時(反応が遅く、モグラを逃した時)の減点を "BURST LOSS"と呼び、変数S に格納する。
変数Sデフォルトを25とする
BURST LOSS 発生時は、PRIZEが25点減り(P-S→P)、LIFEが1減る(L-1→L
(shake = 逃がす)
6)FAKEモードについて:
PRIZEが所定点数に達すると、FAKE機能を発動させる。
・FAKEが機能が発動する時の PRIZE (総合点)を "INVOKE FAKE" と呼び、変数V に格納する。
変数Vデフォルトを200とする。
・FAKE機能は、以下の2つ
FAKE ONE: (Q=2) 偽モグラのみを出現させる。何かを叩くとLIFEが1減る。放置してTIME-OUTにすれば良い。
FAKE TWO: (Q=1) 偽モグラと本物モグラを同時に出現させる。本物モグラ以外を叩くと、LIFEが1減る。
7)LIFEについて:
・ゲーム開始時に、LIFE をもらう
LIFEの初期値変数M に、ゲーム進行時にリアルタイム変化する LIFE を変数 L に格納する
・LIFEの初期値デフォルトを 7 とする。
・LIFE
をリアルタイム表示する
C>E の時(モグラへの反応が遅い時): LIFE が1減る、但し FAKE ONE モードは例外。
LIFE が0になると、ゲーム終了


【2013/12/18 修正】
fx-5800P:コマンドの処理時間【再編集】で、幾つかのコマンドの処理時間を調べたところ、条件分岐には If 文よりも ⇒ 命令の方が速く、特に 変数の評価を行う場合は、⇒ が圧倒的に速いことが分かった。

If A:Then
[何か処理]
IfEnd


よりは、

A⇒[何か処理]

の方が圧倒的に速い。

一方、

If A=B:Then
[何か処理1]
Else
[何か処理2]
IfEnd


より、

A=B⇒[何か処理1]
A≠B⇒[何か処理2]


の方が時間がかかる。

従って、[変数]の評価では極力 ⇒命令を使うようにし、[式] の評価では Else を使わない場合は ⇒を 使ってプログラムコードを書く。

======ここまで修正 ======


最後に、FAKEモードで、偽モグラを [Q] で表現してたが、[0] (斜め線の入ったゼロ (fx-5800Pではオーとゼロを区別するために、ゼロのフォントは斜め線が入っている)を使うことにする。本物と偽のモグラを紛らわしくする作戦だ。

これに併せて、GAME OVER 表示の際に用いていた偽モグラ も、Qから0(斜め線付き)に変更する。


各種設定を変更するルーチンを、メインルーチンとし、ゲーム本体をサブルーチンとする。そしてメインルーチンからゲーム本体を呼び出す構造にする。


先ずは、実行画面から紹介しよう。

[FILE] キーを押して、プログラム リストから WHACK-A-MOLEを実行すると、もぐら叩きゲームの初期画面が表示される。

wam-menu    

[0] キーを押すと、デフォルトの設定変更だ。
[EXE] キーを押せば、ゲームスタート。
[AC] を押せば終了。


[EXE] キーで、もぐら叩きの画面登場!

wam-Start   

[0] キーで GO(ゲーム開始)!


wam-mole  

モグラが出現する。

モグラの位置対応するテンキー[1]~[9]を、素早く押す!


PRIZEが200になると、FAKE モード発動!

 wam-fake1 

偽モグラは、O (オー)ではなくて、ゼロ なので、間違えやすいので、要注意!

間違えると、LIFE が減ってしまう、慎重に...


wam-fake2  

偽物と本物モグラの両方も出現する。

本物を、素早く叩くのだ...


wam-gameover   


ついに、LIFE がゼロになって、GAME OVER ...

右下の表示に従って [EXE] キーを押すと、終了メニューが現れる。

wam-gameover_menu  

GAME OVER メニュー:

[0] キーで、最初のゲームタイトル画面へ戻る。

[RCL] キーで、同じ条件でゲーム開始!



最後に、完成したプログラムコードをまとめる。


先ずは、ゲーム本体(サブルーチン)の完成版は次のようになる。赤文字は、今回追加・変更した部分だ。

fx-5800P用プログラム
もぐら叩きゲーム Ver 1
ゲーム本体
プログラム名:"WAM"
==================

Lbl 2
M→L
:0→P:0→Q 
         
:変数の初期化
Cls                 :メインルーチンで他の初期化を行う
10→DimZ
35→Z[1]:36→Z[2]
37→Z[3]:21→Z[4]
22→Z[5]:23→Z[6]
31→Z[7]:32→Z[8]
33→Z[9]

For 1→I To 3
           
:初期画面表示
Locate 1,I,"[ ][ ][ ]"       :For の制御変数をBからIに変更
Next
Locate 11,2,"PRIZE"
Locate 12,3,P
Locate 1,4,"LIFE:"
Locate 6,4,L
Locate 11,4,"GO:<0>"
     :もぐら叩き開始
While Getkey≠25
WhileEnd
Locate 11,4,"      "
        :スペースが6個


Lbl 0               :ゲームメインループ(始まり)

RanInt#(1,9)→T         :モグラ出現のタイミングと座標
RanInt#(1,3)→X
RanInt#(1,3)→Y
RanInt#(0,3)→Z
RanInt#(1,3)→W
9+X-3Y→N
If P≧V:Then
           :FAKEモード発動
Z=0⇒2→Q
Z=1⇒1→Q
Z≧2⇒0→Q

Else 0→Q:IfEnd

Lbl 1
               :モグラ出現のカウントタイマー
Dsz T
Goto 1

0→C
               :本物/偽モグラを出現させる
If Q=2:Then           :FAKE ONE モード
Locate 3X-1,Y,"0"        :斜め線のあるゼロ
Else                :FAKE TWO モード
Q=1Locate 3W-1,X,"0"    :斜め線のあるゼロ
Locate 3X-1,Y,"O"
IdEnd

Do
                :モグラを叩くまでのカウンタ
Isz C               :C (COST)が増える
C>E⇒Break                                    :2014/03/20 修正
Getkey→K
LpWhile K=0


                  :モグラを消す
Q=1Locate 3W-1,X," "    :スペース1個
Locate 3X-1,Y," "         :スペース1個

If Q≦1:Then           :モグラを叩いた後の判定
If C≦B And K=Z[N]
Then P+F-C→P
Else L-1→L
C>E⇒P-S→P
                                  :2014/03/20 修正
IfEnd
Else
C≦E⇒L-1→L
                                  : 2014/03/20 修正
IfEnd

Locate 12,3,"      "
        :リアルタイム表示(スペース6個)
Locate 12,3,P
Locate 6,4,L

L⇒Goto 0
             :ゲームメインループ(終わり)

0→DimZ              :ゲーム終了時の処理
For 1→I To 3            :For 文の制御変数をA, Bから I, J に変更
For 1→J To 3
Locate 3J-1,I,"0"
          :0に斜め線のゼロ
Next:Next
Locate 1,2,"GAME OVER"

Locate 10,4," <EXE> 
"     :[EXE]キーで終了メニュー表示
Cls
Locate 1,2,"GAME OVER"
Locate 2,3,"<0> :GO BACK"
Locate 1,4,"<RCL>
:TRY AGAIN"
Do
                  :キー入力待ち
Getkey→K
K=25 Or K=41⇒Break
 
LpWhile 1
K=41⇒Goto 2
                                  : [RCL] キーで同じ条件でのゲーム再開
K=25⇒Return
                                  : [0] キーでメインルーチンへ戻る
==================


ゲームが終了すると、以下の画面になる。

wam-gameover 

画面上でのこれまでとの違いは、右下にの表示が増えているところだ。

ここで[EXE]キーを押すと、ゲーム終了時メニューが現れる。

wam-gameover_menu  


ここで、[RCL] を押すと、同じ条件でゲーム開始の画面になる。

wam-Start 


ゲーム終了時メニューで、[0] キーを押すと、プログラムを起動した時の最初の画面に切り替わる。ここで、各種デフォルト設定を変更できる。

wam-menu 

最初にゲームを起動した時と同じ画面だ。[0]キーと[EXE]キーは、Getkeyコマンドでキーコードを取得し、If 分による条件分岐で必要な処理を行う。

この処理を行うプログラム(メインルーチン)は今回新たに作った。具体的には、以下のようになる。


fx-5800P用プログラム
もぐら叩きゲーム Ver 1

メインルーチン
プログラム名:"WHACK-A-MOLE"
==================
7→M:17→B:25→E
        :各種デフォルト設定
20→F:25→S:200→V

Lbl 0
Cls
" WHACK-A-MOLE"
       :ゲームタイトル
Locate 5,2,"<0>:SETTINGS"   :メニュー表示
Locate 6,3,"<EXE>:START"
Locate 8,4,"<AC>
:QUIT"

Do
                :キー入力待ち
Getkey→K
If K=25:Then
Break:IfEnd
LpWhile K≠47

If K=25:Then Cls
        :[0]キーで設定変更
"LIFE"?M
"BURST LIMIT"?B
"TIME-OUT"?E
"FUND"?F
"SHAKE LOSS"?S
"INVOKE FAKE"?V
Goto 0:IfEnd

Prog "WAM"
           :ゲーム本体を呼出す
Goto 0

==================



これで、しばらく遊んでみている。

今のところ、徐々にスキルが上がって、PRIZE(総合点)が向上している。
我が家のゲーマーも、まぁまぁだ、と言ってくれている。

少なくとも、私自身はやるたびに PRIZE が増えてゆくので、今は愉しい。


つづく...

⇒ もぐら叩き~まとめ~



応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800Pゲーム、プログラミングもぐら叩きプログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

Re: 行列も動きましたよ

山田中 棒人様


> 気に成ったので、行列バージョンも試してみました。

さっそくご確認頂き、ありがとうございます。


> 行列を 削除するコマンドが無いので、仕事でも使う方は、要注意ですね。
>
> グラ電と土電は、初めから配列変数が宣言済みで、文字変数の様に手軽に使えて、本格的なプログラムを 作成可能な仕様の電卓と解釈しましたよ。

fx-9860GII では、行列を使う前に Dim コマンドを使って以下のように領域確保を行います。
{3,3}→Dim Mat A

そして、不要になったら
ClrMat コマンドで領域解放を行えます。

おそらく fx-FD10 Proでも同様ではないかと思われます。

以前プログラムでの行列使用についてまとめたことがあります;
http://egadget.blog.fc2.com/blog-entry-81.html


なお、fx-5800P でCasio Basicプログラムに行列が使えることはマニュアルには一切記述がありませんが、実は使えることが分かっています。但し、領域解放のコマンドが見当たらないので、とりあえず不要になったところで行列計算モードで行列を削除するのが確実のようです。

行列も動きましたよ

気に成ったので、行列バージョンも試してみました。
ゲームバランス調整後のプログラムで、行列を 配列変数の様に使える事を 確認しました。
行列を 削除するコマンドが無いので、仕事でも使う方は、要注意ですね。

グラ電と土電は、初めから配列変数が宣言済みで、文字変数の様に手軽に使えて、本格的なプログラムを 作成可能な仕様の電卓と解釈しましたよ。

因みに購入のポイントは、SDカードにデータ保存出来る為、PCが無くてもスタンドアローンで使えて、残念な表計算も付いていて、使う事は、ほぼ皆無な関数計算まで出来ちゃうお利口さんな所でしたよ。

fx-FD10 Pro への移植

山田中 棒人様

コメントありがとうございます。
そして、fx-FD10 Proへの移植ができたとの貴重な情報をありがとうございます。


私自身や、友人の中で fx-FD10 Pro を持っている人が居ないので、この機種への移植ネタは、手つかずです。

ただ、Casio お客様サポートセンターの方とのやりとりで、fx-FD10 Pro の中身はほぼ fx-9860GII と同じで、アドインが使えなくなっていると教えてもらっています。

なので、Casio Basic は、おそらく fx-9860GII 用と fx-FD10 Pro用は互換になると思っています。

ただ、できるはず筈...といっても実際にやってみることとやらないでは、大きな違いです。

fx-FD10 Pro で、工夫をして移植できたということなので、私もモグラ叩きゲームを fx-9860GII へ移植してみようという気になりました。

速すぎるのをどうコントロールするかが、ポイントですね。

ちょっとやってみようと思います。
ありがとうございます。

訂正

代入ではなく⇨でした。

土木電卓に移植

初めまして、グラフ電卓同様に配列変数が無い為、行列を 利用してみましたが、上手く動作しなかったので、未使用の文字変数に、代入スイッチ文の記事を 参考に移植しました。
処理速度が、速すぎて無理ゲーに成ったので、バランスを 調整したら、遊べる様に成り、彼女も夢中で遊んでくれましたよ。
多分、行列利用でも、今のバランスなら正常動作したと思います。
勝手な勘違いからではありますが、少ない変数で無茶なアクションゲームを 作るヒントも得られました。
有り難う御座います。
最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR