fx-5800P【ゲーム】:もぐら叩き(1)

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


fx-5800Pでモグラ叩きゲームを作ってみる。


きっかけは、カウントタイマーを色々作ってみたことだ。

Lbl 1
Dsz C
Goto 1


ふむ、これが最も軽く動きそうだ。

Dsz C の使い方は、Cを1減らして、0になったら次のコマンドをスキップして、次の次のコマンドへジャンプする、条件分岐の一種のコマンドだ。但し、単純にCをデクリメント(減らす)だけにも使える。

このソースコードは、Dsz の本来の使い方だ。予め1以上の数値を変数 C に格納しておくと、Goto 1 ~ Lbl 1の間をぐるぐる回りながら、Cを1つづつ減らしてゆく。いずれ C は0になる。0になったら、次のコマンドである Goto 1 をスキップして、さらに次のコマンドまでジャンプする。つまり、Goto 1 ~ Lbl 1のループを抜け出すわけだ。

Cの値を大きくすれば、ループは長い間回り続ける。つまり、カウントタイマーの時間制御はCの値で行う。



パソコンに比べて処理速度が遅い fx-5800Pでアクションゲームを作ろうとは思って折らず、実際作ったことも無かった。

ところが、ふと、モグラ叩きゲームを作ろうと思った。プログラム電卓だとどんな感じになるのか、ちょっと興味があった。



fx-5800P は表示にアルファベットしが使えず、日本語を使えない。
ゲームのタイトルは、MOGURA TATAKI と ローマ字でも良いが、ちょっと格好をつけて英語にした。「モグラ叩き」は英語で、Whack-a-Mole と言うようなので、プログラム名: Whack-a-Mole (ワッカモウ、と聞こえるのだ) と決定した。

いよいよプログラム作成開始だ。実際の私が考えたこと、作業したことを、順を追って、実況中継風にして、少しづつできあがるところを、紹介したいと思う。



0.プログラム作成の概略

先ず、必要になりそうな基本構成を考えてみた。

1) モグラ叩きの画面

2) モグラが顔を出す時の処理
  ・モグラが顔を出すランダムなタイミング作り
  ・モグラが顔を出すランダムな場所の決め方

3) とにかくモグラを叩いた時の処理
  ・命中したかどうかの判定方法

4) モグラに命中した時の処理
  ・顔を出してから命中するまでの時間測定
  ・一定時間内に命中した時の点数計算方法と表示
  ・タイムアウト時に次のモグラの顔を出す処理

5) ゲーム全体のチューニング


こんな感じで、少しずつ作ってみることにした。



1. 先ず、画面を作ってみた

 [  ][  ][  ]
 [  ][  ][  ]
 [  ][  ][  ]


この3X3の穴のどれかから、モグラが顔を覗かせるわけだ。
まぁ、こんな感じで良いだろう。
モグラは、O で表現すれば良さそう...


For 1→B To 3
Locate 1,B,"[ ][ ][ ]"
Next


このように書けばOK。




2.もぐらが頭を出すタイミングを作る

冒頭のカウントタイマーを使って、ランダムな時間差でタイミングを作る。

カウントタイマーは、以下を使う


Lbl 1
Dsz T
Goto 1


ここでは、変数に T を使う。タイマーの「T」だ。


ランダムな時間差を作るには、T にランダムな整数を格納すれば良い。そこで、fx-5800Pに備わっている「整数乱数発生関数」を使うことにする。

RanInt#(1,4)→T

さて、この関数の表記は、1~4までの整数をランダムに発生させるというものだ。発生する乱数は、1, 2, 3, 4 のいずれかだ。時間差の最小が1、最大が3になる。あまり時間差が無い。もっと大きな時間差があった方がゲームは面白いだろう。

この時間が短いと、アクションゲームとして忙しくなるが、変化が少ないので、飽きてしまいそうだ。速いだけではなくて、緩急の差を付けようと思った。

そこで、T x T x T = T3 としてみた。そうすると、1, 8, 27, 64 になる。時間差の最小が 7で、最大は 63となる。かなり劇的な時間差になった。プログラムでT3 は、T^(3)と書く。[ ^ ]記号を使う。

これで、ランダムに時間差を大きく変化させるカウントタイマーができた。

RanInt#(1,4)→T
T^(3)→T
Lbl 1
Dsz T
Goto 1


なお、ここの T の設定は、実際にゲームで遊んでみてからチューニングする時に、もう一度考えることにする。



3.モグラがランダムな位置に顔を出す処理を考える

 [  ][  ][  ]
 [  ][  ][O]
 [  ][  ][  ]


こんな感じで、「O」がモグラだ。

そこで、モグラの位置を、X と Y を使って、座標で決めることにする。
fx-5800P の画面は(一般にパソコンの画面も同じだが...)、原点が左上、X は右向き、Y は下向きに増えるように座標が決められている。モグラの位置もこの決まりに従うことにする。

上の例では、モグラの位置は X=3 (3列目)、Y=2 (2行目) となる。

つまり、X と Y と言う2つの数字が決まれば、モグラの位置が決まる。
なお、今は横3個、縦3個の穴なので、X = 1, 2, 3、Y=1, 2, 3 のいずれかになるようにする。

X と Y をランダムに決めるには、T と同じように 整数乱数関数を使う。
つまり、

RanInt#(1,3)→X
RanInt#(1,3)→Y 


とすると、モグラの顔が出るランダムな位置が決まる。



4.モグラが実際に顔を出す処理を作る

座標が決まっただけでは、実際にモグラが顔を出せない。

 [  ][  ][  ]
 [  ][  ][O]
 [  ][  ][  ]


モグラを「O」で表現する。
穴の並びが既に表示してあって、そこへモグラだけを追加表示したい。そこで、Locateコマンドを使って、特定の位置に文字を表示する。

つまり、

Locate A,B,"O"

と書く。

次に、この A と B をどうすれば良いかを考える。

モグラの位置は、プログラム上では、既に上で X と Y で決まるようにした。従って、実際のLocateコマンドで使う A と B を X と Y を使って表せば良いことになる。

A は横の並びを決めるのだった。

A = 3X -1
B = Y


これでよい。ちょっと考えて思いついたのでラッキーだ。

例えば、上のモグラの例だと、X=3、Y=2 なので、A= 8、B=2 となるから、モグラを表示するには、

Locate 3X-1,Y,"O"

と書けば良い。これは、1~3のどのような X と Y でも正しい。

以上をまとめると、ランダムな場所、なおかつランダムなタイミングで、モグラに顔をださせるソースコードは次のようになる。


For 1→B To 3
Locate 1,B,"[ ][ ][ ]"
Next
RanInt#(1,4)→T
RanInt#(1,3)→X
RanInt#(1,3)→Y
T^(3)→T
Lbl 1
Dsz T
Goto 1
Locate 3X-1,Y,"O"



このソースコードの先頭のモグラの穴の表示の直後に Lbl 0 を、最後に Goto 0 を追加して、実際に実行してみると、モグラがピョコピョコ顔を出すのが見られる。

私がfx-5800Pで初めて作った、動きのあるプログラムだ。


For 1→B To 3
Locate 1,B,"[ ][ ][ ]"
Next

Lbl 0

RanInt#(1,4)→T
RanInt#(1,3)→X
RanInt#(1,3)→Y
T^(3)→T

Lbl 1
Dsz T
Goto 1

Locate 3X-1,Y,"O"

Goto 0



つづく...

⇒ もぐら叩き(2)



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

人気ブログランキングへ


FC2ブログランキングへ



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

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

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

コメントの投稿

非公開コメント

最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


プログラム関数電卓は、プログラムを作り・使ってナンボ!

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

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR