fx-5800P:Hit&Blow【完成版】

以前 fx-5800P【ゲーム】:Hit&Blow で取り上げ、fx-5800P で3桁の数字を当てる仕様で実際にプログラムを作りました。

その後、桁数を3桁、4桁および5桁に自由に変えて遊べる Hit&Blow を作って遊んでみました。

3桁が一番面白く、4桁は難易度が高くなりますがそれなりに面白いと思います。5桁バージョンは、難し過ぎてゲームとしてはつまらないかも知れません。

そこで、桁数を自由に変えて遊べる Hi&Blow を紹介します。


※ プログラムライブラリに収録しています ⇒ ここ


ゲームの仕様

ゲーム開始画面
1.ゲーム開始時に、数字の桁数を、3、4、5から選択・設定する
2.開始画面には、以下を表示する
  ・HIT And BLOW のゲームタイトル
  ・3~5の桁数の選択機能
  ・
:START、< ? >:ANSWER
3.開始画面で、秘密のキー(キーの同時押し)で正解を表示する


hb_Start4hb_Start5hb_Start3 
※ 桁数の選定は、矢印キー [▲] と [▼] で3~5が順次変化するようにする。
fx-5800P の16桁X4桁画面をフルに活かした画面設計にする。

ゲーム進行画面
4.電卓が出題する正解数を、△HIT、◇BLOW と言うヒントを元に当ててゆく
5.正解数は、各桁0~9各の異なる数字とし、一番左の桁は0であっても良い
6.入力する数字の桁に同じ数字があると、エラーを表示して正しい入力を促す
7.入力する数字の桁が、最初に指定した桁より多いと、エラーを表示して正しい入力を促す
8.何回目の回答かを、表示する
9.10回以内に正解すると、EXCELLENT と表示する
10.10回を超えても正解しない時は、QUIT? と表示する。
11.10回を超えて正解すると、GOOD と表示する。

hb_3d_3hb_4d_4hb_3d_bingo  

※ ゲーム進行画面は、既に作っている Hit&Blowと基本的に同じになる。


ゲーム終了画面
12.正解すると、終了画面で YOU WIN IN xx TRIES と正解するまでの回答数を表示する
13.正解できず、QUIT? の表示で[DEL]キーを押すと、終了画面で正解を示す
14.正解できずに終了すると、終了画面で YOU GAVE UP   ANSWER = xxxxx と表示する
15.終了画面では、
:QUIT、<0>:TRY AGAIN とメニューも併せて表示する

hb_FInish_win 



プログラムコード

以下の4つのルーチンから構成します。
ルーチン種別プログラム名説明
メインルーチンHIT AND BLOWプログラムの流れと表示を主に行う
サブルーチン1S1HB345入力数を各桁の数に分解する
サブルーチン2S2HB345正解の数を生成する
サブルーチン3S3HB345回答を入力させる、ゲーム本体の処理を行う
サブルーチン4S4HB345入力した数の判定及びその結果表示を行う

fx-5800P はパソコンとの通信機能が無いので、コードを手で入力するしかありません。チョット長いコードになりますが、入力して遊んでみてください。

今回のプログラムに関連した、幾つかのプログラミングTIPS を今後紹介する予定です。何かリクエストやご提案があれば、是非お聞かせください。


メインルーチン: "HIT AND BLOW" (41行)

HB345_Code_main   

サブルーチン: "S1HB345" (24行)
HB345_Code_sub1   

サブルーチン: "S2HB345" (27行)
HB345_Code_sub2       

サブルーチン: "S3HB345" (32行)
HB345_Code_sub3       

サブルーチン: "S4HB345" (38行)
HB345_Code_sub4   



プログラムの基本構成と簡単な説明

メインルーチン: "HIT AND BLOW"
 初期設定
   ↓
 Lbl 0
   ↓
 開始画面表示
   ↓
 桁数選択と決定
   ↓
 正解数を決める <---> 正解数生成サブルーチン: "S2HB345"
   ↓
 回答の入力 <------> 回答サブルーチン: "S3HB345"
   ↓             Lbl 0
 終了画面          回答数の桁分解 <-> 桁分解サブルーチン: S1HB345"
   ↓            入力エラー処理
 Goto 0             回答数の判定 <--> 回答判定サブルーチン: S4HB345"
                 正解でない時 Goto 0
                 正解すればメインルーチンへ戻る


このように、メインルーチンと4つのサブルーチンからプログラム全体を構成します。


メインルーチン: HIT AND BLOW"
ゲーム全体の流れの制御と主なメニュー表示を行い、正解数決定サブルーチン(S2HB345) と  回答サブルーチン(S3HB345) を呼び出す。

最初の画面の<?>:ANSWER のメニューで正解を知るための秘密のキーは、キーコードが1桁になるようなキー入力をすれば良い。そのためには、複数のキーの同時押しを行う。例えば[4]と[7]のキーを同時押しする。詳しくは
ここ を参照してください。

最初の画面で決めた桁数は変数Gに格納される(G = 3, 4, 5)。

回答サブルーチン で正解表示フラグが1 (D=1) になってメインルーチンへ戻ってきた場合は、"YOU GAVE UP" の表示及び正解表示 "ANSWER = xxx" を行う。


正解数作成サブルーチン: "S2HB345"
決定された桁数(3、4、5桁)に従って、正解数を決定する。全ての桁が異なる数になるようにするところがポイント。

桁数(G)に応じた桁数で正解を生成する。整数乱数を生成する関数 IntRan#()を使用し各桁ごとに任意の1桁の数を得る。ここではDoループを用いて、各桁で同じ数になる場合はDoループ回し続け、全ての桁が異なる数になる時にDoループを抜ける。

メインルーチンで<秘密のキー>を押すと変数Dに1が入り、このルーチンにおいてD=1の時には正解を表示する。


回答サブルーチン: "S3HB345"
ゲーム進行画面を表示し、数字の入力をさせ、各桁の数を得るための桁分解サブルーチンと、入力された数の回答判定サブルーチンを呼び出す。正解が得られるまで処理を繰り返し、正解が得られたらメインルーチンへ戻る。

入力したn桁(n = 3, 4, 5)の数で同じ数が含まれる場合は、桁分解サブルーチンがエラーグラフEに1を格納する。このルーチンでは E=1 の時、「同じ数が含まれている(ERROR SAME NUMBER FOUND IN DIGITS)」とエラー表示をして、再入力させる。

このルーチン全体をDoループの中に収める。桁数Gでヒット数がGになれば正解となるので、H≠Gである限り、Doループで回答サブルーチンを回し続け、H=Gになった場合だけメインルーチンへ戻る(return)。つまり、このルーチンがゲーム本体となる。


桁分解サブルーチン: "S1HB345"
入力された数を、各桁の数に分解する。桁数(G)に応じた3つのルーチンを含む。入力したn桁(N = 3, 4, 5)の数で同じ数が含まれる場合は、エラーフラグ(変数E)に1を格納する。


回答判定サブルーチン: "S4HB345"
入力された数に対して、HIT数とBLOW数の判定を行い、その結果を表示する。結果が表示されたら、[EXE]キーを押させて 回答サブルーチン(S3HB345)へ戻る。

10回以内で正解が得られると "EXELLENT" と表示する。11回以上で正解が得られると "GOOD" と表示する。11回以上で正解が得られない時は "QUIT?"(やめますか?) "<DEL>"と表示する。[DEL]キーを押すと正解表示フラグ(変数D)に1を格納してメインルーチンへ戻る。



主な変数

G:桁数(3,4,5のいずれか)

A:正解のn桁数
K:数Aの1番左の桁の数
L:数Aの左から2桁目の数
M:数Aの左から3桁目の数
I:数Aの左から4桁目の数
J:数Aの左から5桁目の数

N:回答するn桁数
X:数Nの1番左の桁の数
Y:数Nの左から2桁目の数
Z:数Nの左から3桁目の数
V:数Nの左から4桁目の数
W:数Nの左から5桁目の数

H:ヒット数
B:ブロー数

C:回答回数
D:正解表示フラグ:
 D=0:正解表示をしない
 D=1:正解表示する
E:回答数エラーフラグ:
 E=0:エラーなし
 E=1:同じ数の桁があるエラー

K:取得したキーコード




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

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PゲームプログラミングHit&Blowプログラム関数電卓

リンク集 | ブログ内マップ

関連記事

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

コメントの投稿

非公開コメント

Hit & Blow ツルの雑感

管理人様 こんばんは。

何を今更Hit & Blowの記事へ投稿をと言われそうですが。
実はHit & Blowを知ったのはつい最近なのです。(笑)

なんか、マスターマインドっぽいな・・・と思っていたら、マスターマインドと同じゲームの別名だと知り、軽く感動。
と言うのも、マスターマインド(MASTER MIND)は海外製のオリジナルを昔から所有していて、とても大好きなゲームだからです。

管理人様の5800PでのHit & Blowは、最後の入力と判定しか表示されないので、記憶力が弱い私にはとても困難に感じておりました。
何より、オリジナルゲーム機(盤?)の雰囲気に慣れていることから、自分の好みに仕様を変えてみたいという願望がありました。

私が所有のマスターマインドでは、8色ピンから秘密の4色を当てる仕様で、10回までのトライとなっています。(質問?回答?ピンを差す位置が10段)
色でのやり取りは少し面倒な点もあり、数字に置き換えでいいから所有機に合わせて、4桁問題にして、トライ10回分まで表示でき、判定も、白ピン黒ピンで表現したいと明確な希望がありました。

で、9860GIIで出来ました!
まあ、コードの基本ロジックは管理人様のHit & Blowを参考にさせて頂きました。
海外のMASTER MINDもいくつかやってみましたが、皆さん上手に作るものですね。でも、オーソドックスなゲームですし、コードはどれも似たような感じでした。

私の作ったのは、やはり具体的な希望を持つ本人製作だけあって、自分ではとても気に入っており、脳トレ(リハビリ)として暇を見つけては楽しんでいます。
しかし、allテキスト表示のProgなんです(笑)

(実は、去年脳卒中で倒れまして、脳の一部を失いました。手術と入院、頭と体のリハビリで随分と回復いたしました。回復どころか、脳年齢測定では驚きの26歳をキープ。実年齢を20歳以上下回っているんです!笑)

P.S. 管理人様のHit & Blowが1856 Bytes
フランスの方のMASTER MINDが2784
別なフランス?のは3096
ツルのやたらとLocateの多いテキストProg(笑)のが2540 でした。 

長文申し訳ありませんでした。 (ツル)

Re: Hit & Blow ツルの雑感

ツル様

管理人のやすです。


> 何を今更Hit & Blowの記事へ投稿をと言われそうですが。

いやいや、いつでも結構です。コメントありがとうございます。


> 実はHit & Blowを知ったのはつい最近なのです。(笑)

私が Hit & Blow を知ったのは、FX-502P を購入した時 (1979年4月)、付属していたプログラムライブラリに収録されていたのを見た時です。


> なんか、マスターマインドっぽいな・・・と思っていたら、マスターマインドと同じゲームの別名だと知り、軽く感動。
> と言うのも、マスターマインド(MASTER MIND)は海外製のオリジナルを昔から所有していて、とても大好きなゲームだからです。


私はツル様のこの投稿で、始めてマスターマインドというゲームがあることを知りました。Wiki で調べてみると、オリジナルは 1970年代前半に発売されたとあります。ルールが同じなので、マスターマインドの色を数字に置き換えたものが Hit & Blow のようですね。



> 管理人様の5800PでのHit & Blowは、最後の入力と判定しか表示されないので、記憶力が弱い私にはとても困難に感じておりました。

FX-502P では、推理の履歴を表示しないもの(1行しかない液晶だからこうなったのか?)なので、当ブログの Hi & Blow もそれに準拠しています。自分の入力の履歴を覚えならがゲームを進めるのもゲームの一部で、覚えやすいように進めるのがゲームのコツの1つで、実際私自身はこのコツを見いだして、大抵10回以内の正解できるようになっています(但し3桁の場合)。

これも私自身のボケ防止に良いかも知れません(^^; ケッコー歳クッテルノデ...


> 何より、オリジナルゲーム機(盤?)の雰囲気に慣れていることから、自分の好みに仕様を変えてみたいという願望がありました。
>
> 私が所有のマスターマインドでは、8色ピンから秘密の4色を当てる仕様で、10回までのトライとなっています。(質問?回答?ピンを差す位置が10段)
> 色でのやり取りは少し面倒な点もあり、数字に置き換えでいいから所有機に合わせて、4桁問題にして、トライ10回分まで表示でき、判定も、白ピン黒ピンで表現したいと明確な希望がありました。



入力履歴が見えるなら、8桁でも十分遊べるゲームになるだろうと思います。その意味で Hit & Blow (e-Gadget版) とは全く別のゲームなんだろと思います。


> で、9860GIIで出来ました!

おめでとうございます\(^_^)/


> まあ、コードの基本ロジックは管理人様のHit & Blowを参考にさせて頂きました。
> 海外のMASTER MINDもいくつかやってみましたが、皆さん上手に作るものですね。でも、オーソドックスなゲームですし、コードはどれも似たような感じでした。


まぁ、大抵は同じ目的に対してコードは似たようになるのでしょう。私のコードも似たようになっているのだろうと思います。

最初に fx-5800P 用で3桁限定で作ったプログラムは、演算速度の遅い fx-5800P 向けに高速化を狙って、判定アルゴリズムにひねりを入れていて、ここはオリジナリティがあるかも知れません。

http://egadget.blog.fc2.com/blog-entry-21.html



> 私の作ったのは、やはり具体的な希望を持つ本人製作だけあって、自分ではとても気に入っており、脳トレ(リハビリ)として暇を見つけては楽しんでいます。
> しかし、allテキスト表示のProgなんです(笑)


fx-9860GIi でもグラフィックス表示はとても動作が遅いので、むしろテキストで作るのが正解だと思います。

お作りになったゲームを私もぜひ遊んでみたいと思います。


> (実は、去年脳卒中で倒れまして、脳の一部を失いました。手術と入院、頭と体のリハビリで随分と回復いたしました。回復どころか、脳年齢測定では驚きの26歳をキープ。実年齢を20歳以上下回っているんです!笑)

うわっ、それは大変なことでしたね。ご自愛ください。
リハビリにプログラミングとは、それに脳年齢が26歳とは素晴らしいです。

私も頭は柔らかいつもりですが、とても20台ではないと思います。

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

やす (Krtyski)

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


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

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

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


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR