fx-5800P【ゲーム】:Hit&Blow

2013/11/07
追記 2018/10/30

※ CcLinker で fx-5800P に転送できるCCLファイルをダウンロードできるようにした [2018/10/31]


Hit&Blow と言うゲームをご存知だろうか?

フジテレビのNumer0nでの元になるもので、古くからある数当てゲームだ。

最初に、互いにN桁の数を決める。数の決め方には決まりがある。
・0から9までの数を使い、
・各桁は異なる数とする
・一番左の桁を0として良い

あなたが推測した数を相手に伝える。そして相手は、「2ヒット1ブロー」といったように、ヒット数とブロー数を答える。
・桁と数の両方が一致すれはヒット
・桁は違うが数だけ一致しればブロー



そこで、fx-5800PHit&Blow を作ってみた

ところで、fx-5800Pで素因数分解プログラムを作った時、処理速度の遅いことが骨身にしみている。そこで、電卓が出題した3桁の数を当てるゲームとした。

プログラム作成時に、主に以下の2点を考えた:
・16桁x4行の画面内で遊べるように、全てをうまく配置できるか?
 私なりのガイドライン(使いやすいプログラム参照)に従って、うまく配置してみた。

・HIT数とBLOW数の判定をどうするか?
 ここが、多分一番肝心なところ。2通りのロジックを試してみた。



プログラムの仕様

1) 試行10回以下で正解すればOKとする。

 ・この時、「VERY GOOD」と褒めてあげる。

2) 試行11回目以降でも、ゲーム継続を可能とする。
 ・但し、「QUIT?」(止めるか?)と表示する。
 ・ここで止めたら、「YOU GAVE UP」と釘をさして、正解を表示する。

3) 試行11回目以降で正解すれば、一応ねぎらう。
 ・「Good」と言葉をかける。

4) 正解を出した時は、試行回数を表示する。
 ・一応「YOU WIN」と認定してあげる。

4)  デバッグ目的で、ゲーム開始時に正解を見られるようにする
 ・秘密のキー入力で正解が分かるようにする。



プログラムファイルのダウンロード [2018/10/30:追記]

CcLinker で fx-5800P に転送してスグ使える CCLファイルのダウンロード
CcLinkerの紹介
 ここには、配列変数を使わない高速版(下記参照)を収録している。



ゲームの実行画面

こんな感じで完成した。

先ずは、メニューリストから、「HITBLOW」を選ぶ。

ManuList 



ゲームが起動した時の画面:

HB-Start 
 
ガイドラインに従って、メニュー表示をした。
< ? >は秘密のキーだ(ここでは、まだナイショ)。
ここで、[EXE]キーを押して、ゲーム開始。




HB-1 

ゲーム開始早々、405 で 2HIT だ!
右上の :1 は試行回数を示す。



さらに [EXE] キーを押すと...

HB-2 

試行2回目、ここまでくれは、こっちのものだ!!
[EXE]キーを押して...次は決まるか?



ぶぅ~~(´д`)

HB-3 

あとは、組み合わせの問題....もうちょい...



で...

HB-4 

試行6回目で、当たり!!\(^_^)/

さらに [EXE]キーを押すと...




HB-YouWin 

試行6回で YOU WIN の表示。
ここで、[0]キーを押すと、最初の画面へ戻って、新たに出題される。 



ところで、最初の画面で秘密のキーを押すと...

HB-Sneak 

こんな感じで、正解がわかる...




プログラムの構造

メインルーチンと4つのサブルーチンを作った。

・メインルーチン:
 プログラム全体の流れを記述する。細かい作業はサブルーチンに任せる。

fx-5800P専用プログラム
プログラム名: HITBLOW
====================
Lbl 0

0→C:0→D:→E
            :初期化と初期画面表示
Cls
Locate 2,1,"Hit And BLOW"
Locate 2,3,"
:START"
Locate 2,4,"< ? >:ANSWER"

Do             
     :秘密のキーを押した時
Getkey→F              
fx-5800P:同時にキーを押してみる を参照
If F>0 And F<10
Then 1→D
Break:IfEnd
LpWhile Getkey≠47

                    :この2行が肝心
Prog "S2HB3"            :正解出題ルーチン
Prog "S3HB3"            :ゲームの中心部分

Cls                   :結果表示
If D=1:Then               
"   YOU GAVE UP" 
          :正解できなかった時 D=1
"THE ANSWER ="
Locate 14,2,A
Else
Locate 5,1,"YOU WIN"  
      :正解時の処理
Locate 3,2,"IN"
Locate 6,2,C
Locate 8+Int(log(C)),2,"TRIES"
      :関数電卓ならではの処理
IfEnd                  ⇒ 別記事で紹介予定
Locate 1,4,"<0>:TRY AGAIN"

Whle Getkey≠25 
           :もう一度遊ぶ
WhleEnd
Goto 0
====================



・サブルーチン(1):
 入力された3桁数を、各桁の数字に分解する。

fx-5800P専用プログラム
サブルーチン: S1HB3
入力された数字を各桁に分解し
変数 K、L、M に格納する
====================
Int(N÷100)→X          
     ⇒ 別記事で紹介するかも...
Int((N-100X)÷10)→Y
N-100X-10Y→Z
If X=Y Or Y=Z Or Z=X
Then 1→E:IfENd
====================



・サブルーチン(2)
 各桁の数字が同じにならないように、3桁数を作る。

fx-5800P専用プログラム
サブルーチン: S2HB3
各桁を重複しないように作り、
正解の変数、K、L、Mへ格納し、
正解の3桁数を変数Aに格納する
====================
RanInt#(0,9)→K

Do
RanInt#(0,9)→L
LpWhile L=K

Do
RanInt#(0,9)→M
LpWhile M=K Or M=L

100K+10L+M→A
If D=1:Then
"THE ANSWER =   "
Locate 14,1,A

IfEnd
====================



・サブルーチン(3)
 ゲームの核心の流れを記述する。

fx-5800P専用プログラム
サブルーチン: S3HB3
正解するか、諦めると
メインルーチンへ戻る
====================
10→DimZ
Do
0→E:Isz C

Lbl 0
Cls
Locate 12,1,":"
Locate 13,1,C
"3 DIGITS"?→N
Prog "S1HB3"

If E=1:Then
Locate 12,2,"ERROR"
Locate 6,3,"SAME NUMBER"
Locate 2,4,"FOUND IN DIGITS"
0→E:Goto 0
IfEnd

Prog "S4HB3"

If D=1:Then
Break:IfEnd
LpWhile H≠3

0→DimZ
Return
====================



・サブルーチン(4)
 回答を判定して、△HIT、◇BLOW を表示する

 2つの異なるロジックで作ってみた。


サブルーチン(4-1):桁数の拡張性を考えたロジック

For 文と配列変数Z[ ]を利用した。


fx-5800P専用プログラム
サブルーチン: S4HB3
ヒット数を Hへ、ブロー数をBへ
格納してサブルーチン S3HB3へ戻る
====================
0→S:0→T
0→H:0→B:0→D
X→Z[1]:Y→Z[2]
Z→Z[3]:K→Z[6}
L→Z[7]:M→Z[8]

For 1→S To 3
If Z[S]=Z[S+5]
Then Isz H
IfEnd:Next

For 1→S To 3
For 1→T To 3
If Z[S]=Z[T+5]
Then Isz B
IfEnd:Next:Next

Locate1,3,H
Locate 3,3,"HIT"
Locate 1,4,B-H
Locate 3,4,"BLOW"

If H≠3 And C>10
Then
Locate 12,3,"QUIT?"
Locate 12,4,""
IfEnd

If H=3:Then
If C>10:Then
Locate 13.3."GOOD"
Else
Locate 8,3,"VERY GOOD"
IfEnd:IfEnd

Do
Getkey→F
If F=34:Then
1→D:Break:IfEnd
LpWhilr F≠47
====================



処理速度が少し遅いように思われた。 For 文の実行分と、配列変数へのアクセスに多少余計に時間がかかるのかも知れない。配列変数に関しては単なる思い込みの可能性もあるが...

[2014/03/09:追記]
速度低下の主要因は配列変数へのアクセスが非常に遅いためである。通常変数に比べてアクセス速度が3倍近くかかるようだ。

[2018/10/30:追記]
桁数を拡張して3~5桁を選べるようにした Hit & Blow を作成している。
プログラムライブラリ - Hit & Blow
※ 拡張版 Hit & Blow ではメインルーチンは HitBlow と同じファイル名。そこで私は、3桁固定で配列変数を使わない高速オリジナル版のメインルーチンを HB に変更して、拡張版と一緒に fx-5800P に入れて遊んでいる。


サブルーチン(4-2):処理速度向上を狙って、If 文のみのロジック

2者択一の If文 は処理が速いと考え、それでも桁数拡張がしやすいロジックにしてみた。


fx-5800P専用プログラム
サブルーチン: S4HB
ヒット数を Hへ、ブロー数をBへ
格納してサブルーチン S3HB3へ戻る
====================
0→S:0→T:0→U
0→H:0→B:0→D

If X=K:Then
Isz H:1→S:IfEnd
If X=L:Then
Isz H:1→T:IfEnd
If Z=M:Then
Isz H:1→U:IfEnd

If X=L And T=0
Then Isz B:IfEnd
If X=M And U=0
Then Isz D:IfEnd
If Y≠X:Then
If Y=K And S=0
Then Isz B:IfEnd
If Y=M And U=0
Then Isz B:IfEnd
IfEnd
If Z≠X And Z≠Y:IfEnd
If Z=K And S=0
Then Isz B:IfEnd
If Z=L And T=0
Then Isz B:IfEnd
IfEnd

Locate 1,4,"                "
Locate1,3,H
Locate 3,3,"HIT"
Locate 1,4,B
Locate 3,4,"BLOW"

If H≠3 And C>10
Then
Locate 12,3,"QUIT?"
Locate 12,4,""
IfEnd

If H=3:Then
If C>10:Then
Locate 13.3."GOOD"
Else
Locate 8,3,"VERY GOOD"
IfEnd:IfEnd

Do
Getkey→F
If F=34:Then
1→D:Break:IfEnd
LpWhilr F≠47
====================



思った通り、配列変数とFor文で作ったサブルーチン(4-1)よりも、If 文だけで作ったサブルーチン(4-2)の方が、処理が速かった。

ちなみに、if 文が実行される回数を比較してみた:

(4-1):12回 (おそい)
(4-2):10回 (はやい)

if文が2回多いだけだ。

あきらかに体感できる範囲で、確実に速度差を感じる。If分の実行回数に違いがないとすると、やはりFor分の実行による時間が体感の違いの原因だろう[2014/12/14 追記]: 動作の非常に遅い配列変数を使ったことが主な原因だ。

fx-5800Pで素因数分解プログラムを作った時、Doループの実行速度を簡易的に計測して、ループが1回だけ回るのに45m秒程度かかっていることが分かっている。処理時間は、当然ループ内の処理内容に依存するわけだが、それでもパソコンに比べると恐ろしく遅い。

仮に、今回のFor文のループが1回だけ回るのに50m秒かかるとすると、0.05 x 12 = 0.6(秒) かかるわけだが、体感とほぼ合う。なんとなく納得できる範囲だ。

fx-5800Pは、単4電池1本で、1日に1時間使用したとして1年の寿命と仕様に記載されている。消費電力を抑えることをかなり高い優先度としていると思われる。消費電力抑制の効果的な方策の1つに、MPUのクロックを落とすことがある。つまりその分処理速度は遅くなるわけだ。

いずれ、検証してみたいと思う。 [2014/12/14 追記]: For 文と Lbl / Goto ループの速度差は無視できるほど小さい。非常に遅い配列変数を使ったことが主要因だと判明している。


また、ソースコードの詳細については、プログラミング入門向けに別の記事で取り上げる予定だ。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


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

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

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

e-Gadget 開設5周年

2018/10/30

e-Gadget は、2018年10月29日で5周年!

昨年も今年も、新しい記事の投稿の無い時期がありましたが、来訪者の累計は8月に9万人を超え、ページビューは9月に30万を超えました。

Access20181029 
図 2013年10月30日開設から2018年10月29日までの e-Gadget へのアクセス推移


リピーターの方は確実に増えていますが、検索で当ブログにお越しになる時の検索ワードは過去3ヶ月で、"fx-5800P" が 44% と圧倒的に多く、次が "関数電卓 & プログラミング" で 26% となっています。当ブログは、fx-5800P と 関数電卓でのプログラミング にご興味をお持ちの方に支えられていることが明らかです。

ちなみに機種別での検索ワードの過去3ヶ月間での順位は、圧倒的 fx-5800P の次が fx-CG50 となっています。 
  1. fx-5800P - 44%
  2. fx-CG50 - 10%
  3. fx-260 Solar II - 3.4% 
  4. fx-JP900 - 2.7%
  5. fx-9860GII - 1.8%
  6. fx-CG20 - 1.0%

5周年の当ブログの最大のトピックスは、間違い無く以下の2点に尽きると思います。

 ・fx-CG20/CG50 で動作するアドインCasio Basic - C.Basic for CG の登場

 ・fx-5800P とPCのデータリンクを可能にする CcLinker の登場


C.Basic for CG の開発だけでなく、管理人が多忙な折に ”編集長" として当ブログを支えてくださっている sentaro様、そして C.Basic for CG の開発サポートに多大なるご尽力を頂いた ツル様、iron2様、Colon様 に、この場を借りてお礼を申し上げます。

そして、fx-5800P のPCリンクを可能にした CcLinkerCcEditor などを開発、公開、頒布頂いている takumako様には、fx-5800P の世界を広げ ワクワク ドキドキを提供して頂き、言葉もありません。ありがとうございます。

実は、当ブログの陰の支援者 とね様にもお礼を言わなければなりません。
外部から当ブログへの訪問者が圧倒的に多いのが とね日記 なのです。

5年前に細々と始めた「電卓でのプログラミング」という究極のワンテーマブログですが、私自身が面白いと思うことだけを記事にしてきました。とっくに絶滅してもおかしくないのですが、多くの方に支えられてここまで続き、ゆっくりながら確実に発展できたのは感無量です。


e-Gadget を支え、応援頂いている皆様に、お礼を申し上げます。

m(_ _)m







応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 
関連記事

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

プログラムライブラリ - 3桁区切り出力 (汎用サブルーチン)

プログラムライブラリ
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2017/11/17
追記修正 2018/10/29


3桁区切り出力 - 汎用サブルーチン: 3DS
Casio Basic プログラムで、数値を3桁区切り出力するための汎用サブルーチン

CcLinker で fx-5800P に転送できるプログラムファイルをダウンロード可能に [2018/10/29]


著作権者

基本ロジック:sentaro
 [当ブログ読者]
汎用版作成:やす (Krtyski) 
 [当ブログ管理人]



対応機種

Casio fx-5800P / fx-9860G / fx-9860GII / fx-CG20 / fx-CG50 (fx-FD10 Pro 対応可と思われる)



汎用サブルーチン 3DS の使い方

2桁, 3行の位置から 数値 123456789 を出力させる場合、通常は以下のように記述する。

2→X:3→Y:123456789→Z
Locate X,Y,Z

この9桁の数値を3桁区切り出力にしたいときは 汎用サブルーチン 3DS を使って、

2→X:3→Y:123456789→Z
Prog "3DS"

と記述すれば、2桁3行の位置から

123,456,789

と出力される。

0→X (X0 を設定) すると、右寄せ出力になる。



サンプルプログラム

   "A×B×C"
   "A"?→A
   "B"?→B

   "C"?→C
   "A×B×C="
   7→X:4→Y:ABC→Z

   Prog "3DS"

A=123、B=456、C=789 を入力するとして、
スクロールする部分も含めて以下のように出力される;

   A×B×C
   A?

   123
   B?

   456
   C?

   789
   A×B×C=44,253,432




詳しい説明

Casio Basic入門55~59 Chapter10:3桁区切り出力 - 汎用サブルーチンの作成 を参照

※ サンプルプログラムの使い方も上記を参照のこと


プログラムソース

fx-5800P 用 - 最大12桁まで対応
▶ ソースリスト (PDFファイル) ダウンロード
CcLinker で fx-5800P に転送可能なプログラムファイル(CCLファイル)のダウンロード
※ デバッグ用プログラムも含む.

3DS_src_fx5800P.jpg 

fx-9860GII 用 - 最大15桁まで対応
プログラムファイル 3DGT.g1m のダウンロード
 ※ デバッグ用プログラムもダウンロードできる.

3DS src for fx-9860GII 


fx-CG20 / fx-CG50 用 - 最大15桁まで対応
プログラムファイル 3DGT.g3m のダウンロード

3DS src for fx-CG50 



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: CasioBasic、プログラムライブラリプログラム関数電卓、3桁区切り出力、汎用サブルーチン

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


関連記事

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

プログラムライブラリ - Hit & Blow

プログラムライブラリ
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

最終更新:
2018/10/29

Hit & Blow

※ CcLinker で fx-5800P に転送できるプログラムファイル(CCLファイル) をダウンロード可能に [2018/10/29]


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 (fx-FD10 Proでも動作すると思われます)



プログラムの説明

Hit & Blow  は、古典的な数当てゲームで、Casio FX-502P / 602P / 603P のプログラムライブラリにも収録されていました。またフジテレビ系列で放映されていたゲームバラエティー 「戦略的推理ゲーム Numer0n」 は Hit & Blow をベースにしていました。

0 ~ 9 までの数字から重複無しに選んで所定の桁数にしたものを当てるゲームです。本プログラムでは、桁数を3桁、4桁、5桁のいすれかを初に決めます(デフォルトで3桁です)。

乱数機能を用いてプログラムが出題した数をユーザーが当ててゆきます。
ユーザーが推理した数を入力すると、数字と桁の両方が合っていると HIT 、数字は合っているが桁が合っていないと BLOW とプログラムが判定します。HIT が1個、BLOW が2個の場合は、1HIT、2 BLOW とプログラムが表示します。完全に正解すると 3 HIT、0 BLOW と表示します。

プログラムが返す HIT 数と BLOW 数を手がかりにして、出来るだけ早く正解を導くゲームです。


ゲーム開始画面
1.ゲーム開始時に、数字の桁数を、3、4、5から選択・設定する
2.開始画面には、以下を表示する
  ・HIT And BLOW のゲームタイトル
  ・3~5の桁数の選択機能
  ・<EXE>:START
  ・< ? >:ANSWER (fx-5800P のみでこの秘密のキー入力が有効)
  ・<(-)>:Answer (fx-9860GII、fx-CG20 の場合)
    ※ これは fx-5800P のみで有効です。開始画面で、秘密のキー(キーの同時押し)で正解を表示する
     詳しくは fx-5800P:同時にキーを押してみる を参照

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

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

hb_3d_3hb_4d_4hb_3d_bingo  

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

hb_FInish_win 


プログラムの構成

メインプログラム: HITBLOW
サブルーチン: S1HB345S2HB345S3HB345S3HB345


プログラムファイルのダウンロード

CcLinker でfx-5800P に転送するプログラムファイル (CCLファイル) のダウンロード
CcLinker の紹介



ソースコード & プログラムファイル

fx-5800P 用ソースコード

※ 
ソースコード(pdfファイル)のダウンロード

jpegファイル(1453 x 981 ピクセル) を縮小表示しています 
HitBlow_5800P_Src



fx-9860GII 用プログラムファイルとソースコード

プログラムファイルとソースコードのダウンロード
  • ダインロードファイル (HitBlow_g1m_files.zip) を解凍すると、プログラムファイル (g1m ファイル) 5個、Test_files フォルダ、PDF_file フォルダが得られます。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれるプログラムファイル(HITBLOW.g1m、S1HB345.g1m、S2HB345.g1m、S3HB345.g1m。S4HB345.g1m)全てを fx-9860GII に転送(FA-124A、PCリンクソフト使用)して、メインプログラム HITBLOW を起動してください。
  • ダウロードしたプログラムファイル (g1m ファイル) は、純正 Casio Basic および C.Basic で動作します。
  • fx-9860GII の Main (メイン)メモリに、PCリンクソフト FA-124A を使って転送すると、純正 Casio Basic で動作します。
  • fx-9860GII の Storage (ストレージ)メモリに、PCリンクソフト FA-124A を使って転送すると、C.Basic で動作します。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれる Text_files フォルダにあるテキストファイルは、C.Basic で g1m ファイルからテキストファイルに変換したもので、これらテキストファイルを fx-9860GII の Storage (ストレージ)メモリに転送すると、C.Basic でそのまま実行可能です。これらテキストファイルはPCでも見られますが、一部の特殊コードの表示が fx-9860GII 上の本来の表示と異なります。但し、プログラム全体をPCで確認するのに役立ちます。
  • ダウンロードファイル (HitBlow_g1m_files.zip) に含まれる PDF_file フォルダにあるPDFファイルは、fx-9860GII でプログラムコードを入力する際に役立ちます。またPDF ファイルは、fx-9860GII の編集画面の表示にできるだけ近づけた表示になっています。
※ 本プログラムは、fx-5800P 用に作成したものを、fx-9860GII 用に移植したものです。移植の際には旧来の命令の動作が fx-5800P と fx-9860GII では異なるため、同等に動作しない旧来の命令を Casio Basic の Basic コマンドに置き換えて動作の互換性を確保しています。具体的には、それぞれのソースコードを示した PDF ファイルを見比べて参考にしてください。併せて fx-9860GII の広い画面に併せて、画面表示を追加しています。



fx-CG20 / fx-CG50 用プログラムファイルととソースコード

fx-9860GII 用のプログラムファイルがそのまま使用できます。ダウンドーロした5個の g1m ファイルを fx-CG20 / CG50 へ転送するだけで、使用できます。なお fx-CG20 / CG50 へ g1m ファイルを転送すると、自動的に g3m ファイルに変換されます。





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: fx-5800PCasioBasic、プログラムライブラリプログラム関数電卓

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


関連記事

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

プログラムライブラリ - もぐら叩き (fx-5800P)

プログラムライブラリ
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

更新 2018/10/29

WHACK-A-Mole (もぐら叩き) - fx-5800P

※ CcLinker で転送できるプログラムファイルがダウンロード可能に [2018/10/29] 


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

Casio fx-5800P

Casio fx-CG20 / fx-CG50 用は こちら
Casop fx-9860G / fx-9860GII 用は こちら



プログラムの説明

Whack-A-Mole は、非力な fx-5800P でアクションゲームを作れるかどうか試しに作った "もぐら叩き" です。プログラム作成の詳細は fx-5800P【ゲーム】:もぐら叩き を参考にしてください (この記事のプログラムにおいて。Lbl 0 の下に2行追加したものをプログラムライブラリに収録しています。

3×3 の配置の孔から モグラが顔を出した時に [1] ~ [9] の対応するテンキーで叩く、お馴染みのモグラ叩き。

一定ポイントを超えると、偽モグラが顔を出したり、偽モグラと本物が一緒に顔を出すようになり、偽モグラを叩くとペナルティとなります。各種設定を変更する機能があり、難易度を自由に変えられます。



プログラムの使い方

もぐら退治の賞金稼ぎがゲームコンセプト:
  • ゲーム開始時に、LIFE ポイント (初期値 7) をもらう。
  • モグラ退治が遅い場合や間違って退治するとLIFE が減り、LIFE ゼロでゲーム終了!
  • モグラ1匹あたり、定額の資金 (FUND、初期値 20) をもらう。
  • モグラ退治に時間がかかるほど、退治費用 (COST) がかさむ。
  • モグラ退治が速ければ、FUND - COST が儲けとなり、賞金 PRIZE に加算される、
  • モグラが顔を出してから所定の時間がかかり COST が BURSTポイント (初期値 6) までかさむと、BURST となり LIFE が 1 減る、
  • モグラが顔を出してから時間がかかり過ぎて COST が TIME-OUTポイント (初期値 8) までかさむと、時間切れ (Time-Out) になって  LIFE が 1 減るだけでなく、賞金 PRIZE が BURST LOSS (初期値 25) だけごっそり減る 。
  • 賞金 PRIZE が INVOKE FAKE ポイント (初期値 200) に達すると、FAKE モードが発動する。
  • FAKE ONE モードは、偽モグラが出現する。放置しなければならない。手を出すと LIFE が 1 減る。
  • FAKE TWO モードは、偽モグラと本物モグラが同時に出現。本物を退治すると儲けがあるが、偽モグラを退治すると LIFE が 1 減る。
限られたLIFEで、どこまで賞金(PRIZE) を稼げるか、がんばろう!!

wam-fake1 wam-fake2 
左は 偽モグラが現れている。右は偽モグラと本物モグラが同時に現れている。

なお、設定値 LIFE、BURST、TIME-OUT、FUND、BURST LOSS、INVOKE FAKE は SETTINGS で変更できます。

wam-menu 



プログラムの構成

メインプログラム: WHACK-A-MOLE (これを起動する)
ゲーム本体: WAM



プログラムファイルのダウンロード

CcLinker で fx-5800P に転送できるプログラムファイル (CCLファイル) のダウンロー

CcLinker の紹介



ソースコード

PDFファイルのダウンロード

 Wack-A-Mole_fx-5800P Src 


 



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-5800PCasioBasic、プログラムライブラリもぐら叩き、プログラム関数電卓

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


関連記事

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

fx-5800P プログラムライブラリ - 入力ボックス

プログラムライブラリ
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

最終更新:
2018/10/28

入力ボックス 2.0 / 2.1
INPI、INP、IN 2.0/2.1 for fx-5800P - 汎用サブルーチン

CcLinkerでfx5800Pに転送可能な CCLファイルがダウンロード可能に [2018/10/28]



著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

Casio fx-5800P 専用
Casio fx-9860GII、fx-CG20、fx-CG50 用は こちら



プログラムの説明

INPI / INP / IN は、fx-5800P Casio Basic プログラミングで、好みの位置に好みの桁数で数値を入力させる機能を実装する、汎用サブルーチンです。

画面構成を崩さずに数値を入力させるプログラムを簡単に作れるので、換算プログラムなどに最適です。

Casio Basic の入力命令 ? は、入力位置が左端で、入力結果は改行されて右端に表示され、入力するたびに画面がスクロールするので、入力位置や入力結果の表示位置を選べません。もう1つの入力コマンド Getkey はキー1つが押されたことを検出するものなので、そのままでは複数桁の入力や編集に使えません。

そこで画面設計をしたプログラムで使うため、Windows などの Edit Box に近い入力機能をCasio Basic に提供するのが入力ボックスです。

以下の Ver 2.02.1 を用意したので、好みと必要性に応じて使い分けてください。
・Ver 2.0
キーをゆっくりと入力すると、キーリピートすることがありますが、Ver 2.1 よりも応答性が良いです。
・Ver 2.1
キーリピートを抑制していますので、ゆっくりキー入力してもキーリピートが発生しません。


それぞれのバージョンごとに、以下の3種類の入力ボックスを用意しました。

1. INPI 2.0 / 2,1
0以上の整数入力のみに対応。0以上の整数入力のみを行わせたいプログラムで使うことを想定していて、負数や小数入力のエラーチェックが不要になる。

2. INP 2.0 / 2.1
0以上の整数/小数入力のみに対応。0と正の小数のみの入力を行わせたいプログラムで使うことを想定していて、負数入力のエラーチェックが不要になる。

3. IN 2.0 / 2.1 
正負小数/整数の入力に対応、最も汎用性のある入力ボックス。

入力ボックスは、汎用サブルーチンとして作っていて、他のプログラムから呼びだして使うことを前提にしています。従って、Basic コマンドとは少し使い方が異なります。



入力ボックスの概要

Basic コマンドの使い方は、

[コマンド] [設定1],[設定2],[設定3], ...

といった使い方になります。

一方、入力ボックスはサブルーチンです。サブルーチンを呼びだす時に色々な設定を一緒に指定することができません。そこで、

[入力ボックスの設定]
Prog "入力ボックス"
[結果の受け取り]


といった書式になります。

入力ボックスには、使い勝手を考えて複数のバージョンがあります。

入力する数値の種類応答性が速い
バージョン(Ver2.0)
キーリピート抑制が
バージョン(Ver2.1)
プログラム名
0以上の整数(INPI Ver2.0)INPI Ver2.1INPI
0以上の小数と政数INP Ver2.0(INP Ver2.1)INP
正負の小数と整数IN Ver2.0(IN Ver2.1)IN

入力ボックスには、fx-5800P で使うために、大きく Ver 2.0Ver 2.1 の2種類があります。fx-5800P はCasio Basic プログラムの実行速度が比較的遅いので、できるだけキー入力の応答性を高める必要があり、その目的で作ったのがVer 2.0 で、応答性を高めるために、キーを押したままにするとその数字が繰り返し入力される(キーリピートが発生する)仕様になっています。

一方、キーリピートを抑制したものが Ver2.1 です。

Ver 2.0 / Ver 2.1 それぞれについて、入力する数値の種類に応じて3つのバージョン、INPI、INP、IN を用意しています(上の表参照)。

実際に使用してみると、Ver 2.0INPI の処理が軽いのでキーリピートが発生しやすいと思います。そこで INPI を使う場合はキーリピートを抑制した Ver 2.1 をお勧めします。

INPIN については、INPI に比べて相対的に処理が少し重く、キーリピートがあまり問題になりません。むしろキーリピートを抑制すると応答性の悪化を感じるので、Ver 2.0 の利用を勧めます。

上の表で赤文字で示したように、INPI Ver2.1INP Ver2.0IN Ver2.0 を使えば、間違いないと思います。



プログラムファイルのダウンロード

CcLinker を使えば、プログラムファイルを以下からダウンロードして fx-5800P に転送してすぐに使えます。
 INPI Ver 2.1 / INP Ver 2.0 / IN Ver 2.0 / INBOX_TEST
 fx-5800P 用入力ボックス、プログラムファイルのダウンロード
 ※ CcLinker の紹介 



プログラム作成について

INPI、INP、IN 2.0 / 2.1 の詳しい説明は、Casio Basic入門32 ~ 36 を参照。
 ・ Casio Basic入門32  (入力ボックス応答性向上)
 ・ Casio basic入門33  (INPI 2.0 作成)
 ・ Casio Basic入門34  (INP 2.0 作成)
 ・ Casio Basic入門35  (IN 2.0 作成)
 ・ Casio Basic入門36  (キーリピート抑制)



プログラムの使い方

具体的な使い方については、Casio Basic入門44 、Casio Basic入門51 を参照。

メインルーチンから以下の書式で呼び出します。

→X:→Y:→D:→E
Prog "INPI"
Z→■


□ は任意の数、■ は任意の変数、但し使用機種の画面範囲内に収まるように設定する。
  参考 fx-5800P: 1≦X≦16、1≦Y≦4、X+D≦16

- X: 入力ボックス表示開始桁
- Y: 入力ボックス表示開始行
- D: 入力ボックス桁数
- E: 入力ボックスインジケータの選択
   E=2: 画面右下に <EXE>:ENTER と表示
   E=1: 画面右下に ▶E と表示
   E=(上記以外): インジケータ非表示
- Z: 入力ボックスで確定した数値が代入される

入力ボックス内部では、上記5つの変数以外に、CIF (F は、INPIN の場合のみ)、配列変数を用いています。これらの変数は、入力ボックスを呼び出すたびに格納されている数値が変更されます。メインルーチンでこれらと同じ変数を使う場合は、入力ボックスを呼び出すたびに変更されても良い変数として使ってください(Casio Basicでは変数が全てのプログラムで共用されるため)。特に配列変数は、入力ボックス内で領域確保を行い、メインルーチンに戻る前に領域解放を行いますので、それを念頭に置いて使ってください。



使用例

呼び出しルーチンのプログラム例を掲載します。
・ 予約変数は S, T, U, V
これを元に色々なプログラムを作ってみると、楽かも知れません。

0→S:0→T:0→U:0→V  [予約変数の初期化]

Locate 1,1,"1:"      [初期画面表示]
Locate 1,2,"2:"
Locate 1,3,"3:"
Locate 1,4,"4:"

While 1            [無限ループ、[AC] キーでプログラム終了]

-1→M             [メニュー選択] 
Do:Getkey→K
LpWhile K=0
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M
K=21⇒4→M

Locate 1,4,"        " (スペース16個)

If M=1:Then        [INPIを使った入力処理]
3→X:1→Y:8→D:2→E
Prog "INPI":Z→S
Else If M=2         [INPを使った入力処理]
Then
3→X:2→Y:6→D:2→E
Prog "INP":Z→T
Else If M=3         [INを使った入力処理]
Then
3→X:3→Y:4→D:1→E
Prog "INPI":Z→U
Else If M=4
Then
3→X:4→Y:2→D:1→E
Prog "INPI":Z→V
IfEnd:IfEnd
IfEnd:IfEnd

Locate 1,4,"Z="
Locate 3,4,Z

WhileEnd


プログラム例

Birthday_2 
INPI 使用 - 0と自然数入力 - 年齢換算プログラム


YearConv_5_convert_20140312192414.jpg
 
INPI 使用 - 0と自然数入力 - 和暦西暦換算プログラム


PressureConv_2
 
INP 使用 - 0と正野小数入力 - 圧力単位換算プログラム


3-JST_inputBox 
INPI 使用 - 0と自然数入力 - 世界時間換算プログラム


TEMP_CONV_P3 
IN 使用 - 正負小数入力 - 温度単位換算プログラム



入力ボックス 2.0

Ver 1.0Ver 1.2 よりも大幅に応答性を向上させ、速いキー入力でも取りこぼしがないと思います。
CcLinkerで転送できる ccl ファイルのダウンロード

プログラム - INPI Ver 2.0: プログラム名 INPI

INPIv20src_fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y, " " の " " は、スペース1個
注2) 下から7行目の Locate 6,4, "           " の " " は、スペース11個
注3) 下から4行目の Locate 15,4,"  " の " " は、スペース2個


プログラム - INP Ver 2.0: プログラム名 INP

INPv20src_fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個


プログラム - IN Ver 2.0: プログラム名 IN

INv20src1_fx-5800P 

注1) 下から11行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個



入力ボックス 2.1

Ver 2.0 にキーリピート抑制機能を追加しています。但し、INP と IN については、僅かですが応答性の低下が体感されます。
CcLinker で転送できる cclファイルのダウンロード

プログラム - INPI Ver 2.1: プログラム名 INPI

INPI Ver2.1 for fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y, " " の " " は、スペース1個
注2) 下から7行目の Locate 6,4, "           " の " " は、スペース11個
注3) 下から4行目の Locate 15,4,"  " の " " は、スペース2個


プログラム - INP Ver 2.1: プログラム名 INP

INP Ver 2.1 for fx-5800P 

注1) 下から10行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個


プログラム - IN Ver 2.1: プログラム名 IN

IN Ver 2.1 for fx-5800P  高機能テキストエディタ

注1) 下から11行目の Locate X+C+I-1,Y," "  の " " はスペース1個
注2) 下から7行目の Locate 6,4,"      " の " " はスペース11個
注3) 下から4行目の Locate 15,4,"  " の " " はスペース2個




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: fx-5800PCasioBasicプログラムライブラリプログラム関数電卓

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


関連記事

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

番外編 - 常時SSL化の概要

番外編
e-Gadget


2018/08/03
更新 2018/10/17


当ブログの常時SSL化を行ったが、その時に得られた知識を簡単に整理して自分の備忘録として残しておく。

私自身はあまり理解していなかったので、ネット検索で調べながら作業した。もし、事前に全体の知識があれば、もっと落ち着いて楽に進められたと思うので、SSL化の概要を俯瞰できるような記事にする。なお、この記事が読者の方に役立つことが少しでもあれば嬉しい。より詳しいところは、各自で検索して補足頂きたい。

[2018/10/17] Chrom70公開に伴い追記・更新


そもそも常時SSL化って何だ?

インターネットで通信を暗号化する仕組みをSSLと言う。この仕組みができると、通信は FTTPSプロトコルとなり、URLの始まりが fttps となる。末尾の s は Secure の s。セキュア(Secure) とは安全のこと。SSLの仕組みが大雑把でも分かっていると、SSL化作業の見通しが良くなり、個々の作業の意味と目的が分かって、作業が楽になる。

SSLの仕組みには大きく2つある。1つは「暗号化通信」で、もう1つは「サーバーと運用者の正当性証明」

通信が暗号化されれば、データの盗聴が難しくなるので安全になる。暗号化通信に使う公開鍵、コモンネーム(FQDN)、ドメインの所有者情報を紐付けて、第三者(認証局)がSSLサーバー証明書を発行する。

サーバーとクライアント(Webブラウザ)がSSL通信する時にSSLサーバー証明書を使う。クライアントはサーバーからSSLサーバー証明書を受け取り、サーバーのFQDNと証明書に含まれるコモンネームを照合し、その一致を確認する。一致していれば、サーバーと通信しようとしているクライアントは、ドメイン所有者が運営しているサーバーだと確認できる。つまり、正当性が保証された相手と暗号化通信をしていること確認しながら安心して接続できる。なりすまし防止(フィッシングサイトの防止など) に役立ち、暗号化通信が安全になる。

最初に1994年に SSL 2.0 が公開された。1年後に安全性の問題が見つかり SSL 3.0 が公開され、これが長らく使われていた。2014年に暗号化通信の解読ができることが分かり、SSL 3.0 利用が禁止された。今は SSL をより安全にした TSL が使われている。現在は 1996年に公開された TSL 1.0 を使う。しかしSSLが長らく使われ、一般人向けの用語としてSSLが定着しているので、今でも SSL化と呼ばれる。或いは SSL/TSL化や https化とも言われる。

なお、重要な情報を入力させるページに限って以前からSSL化が行われてきた。それに対して、今はサイトを構成する全てのページでSSL化することが要求されていて、それを常時SSL化という。


SSL化作業に必要なこと

SSLサーバー証明書の取得
・ドメイン認証のみの証明書: ドメイン使用権の確認。無料か低価格で提供され、個人サイト向け。
・企業実在性認証の証明書:ドメインと運営団体が実在していることの確認。信頼性高い。
・EV認証の証明書:サイト運営団体の厳格な確認。信頼性高く、高額。

個人ブログや個人ホームページは、契約している業者のサービスにSSL設定サービスがあればそれを使う。すると証明書発行まで行ってくれる。大抵ボタンクリック1回で完了となる。無ければSSL化を諦めるか、SSL設定サービスのある業者に乗り換える。

証明書には有効期限があるので、期限切れになる前に忘れずに更新するか、自動更新の設定が必要。

SSL設定
SSL設定サービスがある場合は、大抵ボタンクリック1つで設定完了。しかしこれだけでは常時SSL化は完了しない。
多くのサービスではリダイレクト設定もできる。リダイレクト設定には301リダイレクトと302リダイレクトがあり、大抵どちらかを選択できる。

リダイレクト設定
SSL設定サービスには、たいていリダイレクト設定がある。新たにブログやホームページを開く時は、最初からSSL化して作れば良い。一方、既に有るものをSSL化する場合は、検索ページからアクセスされたり、ブックマークからアクセスされる時は http のURL にアクセスされ、ページが見つからないとなる。そこで、http ページへアクセスされたときに https ページに自動転送するためにリダイレクト設定が必要。

多くの場合、恒久的転送の 301リダイレクトと一時的転送の 302リダイレクトを選択できる。301リダイレクトは検索サイトでのランキングなどのこれまでのサイト評価が引き継げるが、元に (httpプロトコル)には戻せない。ブログやホームページの中でSSL化されていない外部サービスを使っている場合、SSL化の確認や他のサービスに切り替える必要があり、その間は仮にリダイレクトし、万一の場合は元に戻せるために 302リダイレクトを使う。302リダイレクトではこれまでのサイト情報は引き継がれない。作業中は 302 リダイレクトにしておき、最終的に 301 リダイレクトにすると良い。

もしボタンクリックで簡単にできるリダイレクト設定が準備されていない時は、.htaccess ファイルにスクリプトを書いて 301リダイレクトか302リダイレクトを記述すれば良い。詳しくは、利用しているサーバーのQ&Aか検索で解決する。私自身もネット情報を参考にして、とあるサーバーについては .htaccess ファイルで301リダイレクトの設定ができた。

リンクの設定変更
各ページにある画像ファイルへのリンクやサイト内の他ページへのリンクは、頭の http:// を https:// に書き換える。スクリプトやCSS(スタイルシート)、WordPressなどの記述にある http 参照部分も https に書き換えておく。サイト内リンクのどこかに暗号化されない FTTPプロトコルでの参照が含まれる時点で、安全性が崩れるのでこの書き換えを行なって、サイト内リンクはFTTPSプロトコルにしておく必要がある。

外部サイトへのリンク
単に外部サイトへのリンクを記述している場合は、URL参照の部分が http:// で始まっていても自身のサイトのSSL化に影響はない。外部へのリンクをFTTPプロトコルで呼び出しても、自分のサイトに戻らないので構わないわけだ。

 アマゾンなどの外部リンクのあるバナー
ブログランキング、アマゾン、楽天などの外部リンクのあるバナーもSSL対応する。それぞれのサービスごとにSSL化するための html 設定を改めてコピー&ペーストする。SSL化対応していない場合は、貼り付けるページをSSL化できないので、代替え策を考える。

ブログやホームページサーバーごとの違い
本質的な違いは無いと思うが、それぞれの細かい違いがあればサービス業者のホームページで確認する。


SSL化の必要性

何故SSL化するのか?

最近皆がやり始めているから?
まぁ、ネットの世界の流れはSSL化なので、それには沿ってゆくのは間違っちゃいない。でも作業が面倒。SSL化を有償で請け負うビジネスも登場している。自分でやれるならやってみる...

SEO対策になるから?
Googleが、SSL化されたサイトの優先度を上げる可能性を公言しているので、これは大きな動機になる。

安全でないと表示されると訪問者に良い印象を与えないから?
会社のホームページならこの問題は大きい。個人サイトでもこれは気になるかも知れない。


Google Chrome の対応の変化

SSL化に対して厳しく対応しているのが Google で、Google Chrome は安全性が保たれないと判定した場合は、「保護されていません」と表示するようになっている。他のブラウザもいずれ追従するだろうが、今は Chrome に対応しておけば良さそうだ。

SLL対応がOKと判定されると、鍵のマークと一緒に「保護された通信」と表示される。

 eGadget_Protecte 


Chrome 62 (2017年10月)
SSL化が不完全な場合、

殆どの場合、チョット控えめに

 i_mark 

i マークのみの表示。

但し、入力フォームが有るページで、<input> タグtype属性に "text", "tel", "email", "search", "url" とある時

 Not_Protected 

と明確な警告を出していた。


Chrome 67 (2018年7月)
それまで、SSL化が不完全で

 i_mark 

と表示されていたページでも

 Not_Protected 

と表示されるようになった。

但し、

 i_mark 

i マーク表示だけで「保護されていません」とは表示されないケースもある。どのような条件で、このような i マークだけの表示なるかは、まだよく分かっていない。当ブログ以外に、複数のホームページの常時SSL化を進めているが、この状況を経験している。

Chrome 70 (2018年10月) (2018/10/17更新)
あと2ヶ月ほどで、さらに表示が厳しくなるとのこと。
「保護されていません」と判定される時の表示が、さらに悪印象を与えるようになる。

2018/10/16 に Chrome 70 にアップデートされてみると、事前情報とは逆にグレーでの表示になり、地味になった。

・常時SSL化されている
 scure_Chrom70 
・常時SSL化されていない  
 unsecure_chrom70 
・完全に常時SSL化されていない
 mid-secure_chrom70 

将来は完全SSL化が当たり前になるので、今後は鍵マークも無くしてゆくらしい。
逆に完全SSL化していないと、「保護されていない通信」という余計な文字列が表示されることで、暗号化されていないことが明示されるわけだ。

一応、段階的に警告度合いを引き上げているわけだが、ここまで強烈に警告されると、却って悪いヤツラのターゲットになる心配も出てくる。逆に言えば、被害に遭うまでに常時SSL化しておいたほうが良さそうだ。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: ホームページ、ブログ、SSL、TSL、https

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

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

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

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR