【お詫び】
2017/11/05に投稿したものに、文字化などで動作しないバグがありました。
今回、バグ修正と内容の大幅変更を行いました。
【はじめまして】
これはロジックを理解するための教材プログラムです。
残容量と闘いながら、可読性を重視してコーディングしました。
教材といえば川下り系...ということで。
(面白いゲームを求めていた方、ごめんなさい。)
中学生か高校生くらいを想定してみました。
教育目的なので詳細な処理チャートをアップしています。
(Latte版と合わせたので、メイン処理が下に行ってしまいました)
設計書はHCPを参考にしたチャートで、ソースリストと対比できるようにしています。
フロチャートを理解した方がより本格的なチャートに触れ、論理思考を強化するのが目的です。
HCPは何十年も前に作られた記法ですが、現代のスクラッチと見た目がそっくりで驚かれるでしょうね。
サムネイルの設計書は低解像度なので、高解像度版は下からどうぞ。
(当サイトでドキュメントもアップできるといいですね!)
・設計書など http://kureha.info/kidspod/
・「プログラムをみる」ボタンでもたどれます。
Jam・Latteソース・チャートを横並びにし『ソースは違えど設計・考え方は同じなんだぁ』と分かってもらい「日本語をどのように適切に書くか」「チャートをどのように構造化するか」と、いったように考えられる教材を作るのが目標です。
今後はチャートやソースの穴埋めする問題に発展させる予定です。
ではゲームの内容に移ります。
【ストーリー】
武器を使い果たして、エイリアン敵地に取り残された戦闘部隊。
亜空間航行で地球までの脱出を試みますが、UFOが体当たりを仕掛けてきます。
迫りくるUFOを避けて前進あるのみ!
【目的】
スターファイター(自機)を亜空間航路を外れないようにしながら、UFO(敵機)の体当たりをひたすら避け続けます。
【ルール】
・スタート時点、自機が3機あります。
・敵機に体当たりされると、自機を1機
失います。
・敵機は左右無作為に移動しながら
飛来しますが、自機から一定の距離に
近づくと直進してきます。
・亜空間航路の淵に触れると、自機を
1機失います。
・自機が全滅すると、ゲーム終了です。
・UFOを画面下まで振り切ると、10点
加算されます。
・100点加算ごとに自機が1機増えます。
・自機が増える度に、難しくなります。
> 亜空間航路の道幅が狭くまります。
> 道幅が一定の狭さに達すると、
今度はUFOの速度が上がります。
> UFOの速度が一定の速さに達すると、
自機が前進して、UFOとの遭遇距離
が縮みます。
【遊び方】
・RUNすると、ゲームを開始します。
・カーソルキーの左右で、自機を操作
します。
【変数表】
ソースコード冒頭がパラメータ関連です。
(1)基本
R:自機残数
S:点数
U:1UP間隔点数
W:ゲーム速度
V:ゲーム速度極限値(最速)
(2)亜空間航路関連
Z:航路長
D:航路左座標
N:航路幅
M:航路幅極限値(最小)
(3)自機(スターファイター)関連
X:自機横座標
Y:自機縦座標
H:自機縦座標極限値(最上)
(4)敵機(UFO)関連
A:敵機横座標
B:敵機縦座標
T:敵機直進開始距離
1 @INI 2 R=3:S=0:U=100:V=1:W=5 3 Z=19:D=12:N=7:M=4 4 X=N/2+1:Y=Z-3:H=5 5 A=X:B=0:T=2 6 GOTO@MAIN 10 @DRAW 11 CLS 12 FOR I=0 TO Z-1 13 LC D ,I:?CHR$(#85) 14 LC D+N+1,I:?CHR$(#8A) 15 NEXT 16 IF X>N X=N 17 IF X<1 X=1 18 B=0:CLK 19 RTN 20 @MOVE 21 LC D+X,Y :?" " 22 LC D+X,Y+1:?" " 23 LC D+A,B :?" " 24 K=INKEY() 25 X=X+(K=29)-(K=28) 26 IF B=Z B=-1:A=RND(N)+1 27 IF B<Y-T A=A+RND(3)-1 28 IF A<1 A=1 29 IF A>N A=N 30 B=B+(B<Z) 31 LC D+X,Y:?CHR$(#F0) 32 LC D+A,B:?CHR$(#F1) 33 RTN 40 @SCORE 41 IF B<Z RTN 42 S=S+10 43 IF S%U>0 RTN 44 LC 0,4:?"1UP!":BEEP:WAIT40 45 LC 0,4:?" " 46 R=R+1 47 IF N>M N=N-1:GSB@DRAW 48 W=W-(N=M&&W>V) 49 Y=Y-(W=V&&Y>H) 50 RTN 60 @CRUSH 61 C=(1<=X&&X<=N)&&(X!=A||Y!=B) 62 IF C RTN 63 LC X+D,Y:?CHR$(#F4) 64 BEEP150,30:WAIT30 65 R=R-1:GSB@DRAW 66 RTN 70 @MAIN 71 GSB@DRAW 72 @DO 73 GSB@MOVE 74 GSB@SCORE 75 GSB@CRUSH 76 LC0,1:?"SCORE=";S 77 ?CHR$(#F0);"=";R;" " 78 WAIT W 79 IF R<1 GOTO @EXIT 80 GOTO@DO 90 @EXIT 91 ?:?"GAME OVER":?:END
チャートや変数表までupしていただき、ありがとうございます! これだけ詳しいと、まさに教材ですね。初心者プログラマには、ぜひとも挑戦してほしい! そして、教材とはいってもゲーム自体もなかなか楽しいです。ふらふら動く敵キャラがドキドキものです。