Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2017/11/05 15:00:16

MixJuice GET URL : kidspod.club/mj/395

スターファイター亜空間脱出(IchigoJam版)

【お詫び】
2017/11/05に投稿したものに、文字化などで動作しないバグがありました。
今回、バグ修正と内容の大幅変更を行いました。

【はじめまして】
これはロジックを理解するための教材プログラムです。
残容量と闘いながら、可読性を重視してコーディングしました。
教材といえば川下り系...ということで。
(面白いゲームを求めていた方、ごめんなさい。)

中学生か高校生くらいを想定してみました。
教育目的なので詳細な処理チャートをアップしています。
(Latte版と合わせたので、メイン処理が下に行ってしまいました)
設計書はHCPを参考にしたチャートで、ソースリストと対比できるようにしています。
フロチャートを理解した方がより本格的なチャートに触れ、論理思考を強化するのが目的です。
HCPは何十年も前に作られた記法ですが、現代のスクラッチと見た目がそっくりで驚かれるでしょうね。

サムネイルの設計書は低解像度なので、高解像度版は下からどうぞ。
(当サイトでドキュメントもアップできるといいですね!)
・設計書など http://kureha.info/kidspod/
・「プログラムをみる」ボタンでもたどれます。
(注)設計書は修正中レベル(2011/11/17)です。

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:敵機直進開始距離

SOURCE CODE

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

COMMENT

Kidspod運営チーム
Kidspod運営チーム2017/11/17 19:58:33

チャートや変数表までupしていただき、ありがとうございます! これだけ詳しいと、まさに教材ですね。初心者プログラマには、ぜひとも挑戦してほしい! そして、教材とはいってもゲーム自体もなかなか楽しいです。ふらふら動く敵キャラがドキドキものです。