上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
久しぶりに終日お休みなので、早起きしてインベーダゲームを仕上げました。



「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




動きはこんな感じです。


ソースはキャラクタ定義とメインの2つに分かれています。
まずキャラクタ定義。これを先に実行します。(電源を切ると定義も消えるのでSAVE1で1に保存すると良いです。)
110 POKE #700,#10,#38,#7c,#fe,#d6,#7c,#44,#82
120 POKE #708,#10,#38,#7c,#fe,#d6,#7c,#44,#28
130 POKE #710,#44,#38,#7c,#d6,#fe,#7c,#44,#82
140 POKE #718,#44,#38,#7c,#d6,#fe,#7c,#44,#82
150 POKE #720,#38,#7c,#fe,#fe,#54,#38,#28,#44
160 POKE #728,#38,#7c,#fe,#fe,#54,#38,#28,#28
190 POKE #740,#18,#3c,#7e,#bf,#bf,#7e,#3c,#18
200 POKE #748,#18,#3c,#7e,#ef,#ef,#7e,#3c,#18
210 POKE #750,#18,#3c,#7e,#fd,#fd,#7e,#3c,#18
220 POKE #758,#18,#18,#3c,#ff,#ff,#ff,#ff,#7e
230 poke #760,#91,#52,#34,#1f,#f8,#2c,#4a,#89
240 poke #768,#00,#18,#18,#18,#18,#18,#18,#00
250 poke #770,#00,#10,#8,#10,#8,#10,#8,#00
260 poke #778,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
270 poke #780,#33,#33,#33,#FF,#FF,#FF,#FF,#FF
280 poke #788,#11,#11,#11,#33,#33,#FF,#FF,#FF
290 poke #790,#00,#00,#00,#11,#11,#33,#33,#77


次がメインプログラム。メモリサイズ制限で苦労した結果ごちゃごちゃです。
これをSAVE2で保存しtます。

42行目がつぶれてたのでなおしました。2015/06/26
10,40行もおかしかったので再更新。FC2のブログは入力時に文字化けしてるみたいです。40行の F<2LC F,4:?" ":F=-30 の?" "はスペースを2つ入れてください。なぜか勝手にひとつになります。2015/06/27
2 L=0
4 CLS:A=3:B=7:C=10:D=0:E=0:F=-30
6 V=1:N=25:W=0:T=0:FOR I=1TO25:R=I*2:[R]=I-1:[R+1]=I+1:NEXT:[0]=0:[1]=1:G=0:H=0
8 P=[1]:I=1:U=V:O=0
10 R=P-1:X=A+(R%8)*2:Y=(R/8)*2+B:K=VPEEK(X,Y-T):LC X,Y-T:?" ":IF K=42R=P*2:[[R]*2+1]=[R+1]:[[R+1]*2]=[R]:O=O+1:GOTO24
12 IF V=1LC X+1,Y:?CHR$(#E0):IF X>18U=-1:W=1
14 IF V=-1:LC X-1,Y:?CHR$(#E1):IF X<2U=1:W=1
16 IF G=0AND RND(4)<1 G=X:H=Y+1
18 IF G>0LC G,H:?" ":H=H+1:LC G,H:IF VPEEK(G,H)=#EB ?"*":GOTO48
20 IF H>21G=0:GOTO24
22 IF G>0?":"
24 P=[P*2+1]:I=I+1:IF Y>19 GOTO48
26 LC C,20:?" ";CHR$(#EB);" ":K=INKEY()-28:IF K=0AND C>0:C=C-1
28 IF K=1AND C<19:C=C+1
30 IF K=4AND D=0D=C+1:E=19:BEEP
32 LC D,E:?" ":E=E-1:K=VPEEK(D,E):LC D,E:IF D=0OR K<#E0GOTO35
33 D=0:?"*":L=L+(K-#DF)*10:LC 22,10:?"SCORE";L:BEEP99:IF K=232 F=-30
34 GOTO38
35 IF D>0AND E>2?"!"
36 IF E<2D=0
38 IF F<0F=F+1:IF F=0F=24
40 IF F>0LC F,4:?CHR$(232);" ":F=F-1:IF F<2LC F,4:?" ":F=-30
42 IFI< N GOTO10
44 B=B+W:T=W:W=0:N=N-O:A=A+V:V=U:IF N>1:GOTO8
46 GOTO4
48 LC2,22:?"GAMEOVER":BEEP90,50



一番の苦労場所は当たり判定と当たった敵の退場方法です。今時のPCでしたら、敵の数だけ配列を用意し、弾の移動ごとにループを回して判定、当たったやつを外して配列ソーティングしてしまえば余裕ですが、ichigojamではメモリサイズ、処理速度の両方でうまくいかないのが明らかです。
 
そこで、敵の数だけ配列は用意するのですが、チェーン構成にしておいて、当たった敵をチェーンから除外するようにしました。そして当たり判定は画面を書き変えておいて敵が個々に判断します。
 
これでほぼ1KB使いきりですが、バリヤがない、敵の弾は一つだけ、条件によって当たった敵が復活する(上の当たり判定方式の問題とわかっているのですが直しかたが思いつきません)等々の制限がでています。

とはいえ、久しぶりに頭を使ったソフトを作った感じです。
今時はPCソフトやマイコンソフトでさえも、メモリ・CPU能力が潤沢で、特に工夫しなくても性能が出てしまいますので、昔の職人芸的な創意工夫の余地がないな、と感じていたところ、このichigojamは久しぶりにそれが必要なデバイスのようで、ある意味やりがいがあります。
 
そうはいいながらも、1KB制限は昔のマイコンに比べても少ないなあ、と思っていたところ、どうやら昨日4KBに拡張されたバージョン1.0.0がリリースされた模様です。早速アップデートしてみたいと思います。
(2015/4/20訂正: 1.0.0はメモリ構成が変わって保存ファイル数とBASICインタプリタ?領域が増えたものらしく、BASICソフトの領域は変わらず1KBとのことです。)

2015.04.18 Sat l ICHIGOJAM l コメント (6) l top

コメント

エイリアンが
見習職人様

再度申し訳ありません。
動くようにはなったのですが今度はエイリアンがたまが当たっても消えないのと、スコアが当たってもゼロと表示されるようになっています。敵も3体のみ同じ画面左の位置から登場し、なぜか一体だけ一番後ろの列を高速で通り過ぎていきます。
参照の動画のように大量のインベーダーが出てきたりしないです。どこかの変数を変えればいいのでしょうか。よろしくお願いします。
2016.09.01 Thu l もがもぐ. URL l 編集
返信が遅くなり申し訳ありません。
見習職人様

動くようになりました!ありがとうございました!
親が白黒のゲーム画面が好きなので楽しんでもらいますw。

原因はおっしゃる通り改行でした。
自分の環境では4行目の終わりがちょうどモニターの端に届くようになっていたので、勝手に改行していると思っていました。あと行の終わりが画面の端にあるときに次の行を打ち込んでからエンターを打っても改行しないみたいですね。初めて知りました。

詳しく言うと、初め自分で改行がないのが原因かと思って6行目を残したまま4行目の終わりでエンターキーを押したのですが、変わらなかったので改行が問題ではないと思っていました。ワードのように文を入力し終えてからでもエンターを押すと改行してくれるとようになっていると思いこんでいたのでそういう操作をしてしまったのですが。

6行目を4行目を打ち終えてからエンターを押して1段あけてから6行目を続けて入力したところ動作するようになりました!
2016.09.01 Thu l もがもぐ. URL l 編集
No title
もがもぐ様。こんにちは。ご訪問ありがとうございます。
申し訳ありませんが、ちょっと今手持ちのichigojam不調で確認できません。
いただいた内容から、4行目の改行が消えて、6行目につながってしまっているのではないかと推測します。
大変お手数ですが、試しに、4行と6行を消して、手打ちで4行と6行を打ちなおしてみていただけますでしょうか?

2016.08.29 Mon l 見習職人. URL l 編集
質問させていただきます
初めまして。ichigojamでインベーダーゲームを作ってみたかったのでとても参考になります。ありがとうございます。質問なのですが、メインプログラムの4行目でSyntax Errorが出てしまい、先へ進めません。それと、4行目のエラーのはずなのになぜか6行目も一緒につながってSyntax Errorに表示されてしまうのですが、何か4行目で気をつける部分などありますでしょうか。よろしくお願いします。
2016.08.26 Fri l もがもぐ. URL l 編集
Re: エラー
> 42行目でエラーになります(I44の部分)
> 対応策を教えてください

すみません。42、44行がつぶれていました。以下のようにしてください。

42 IF I<N GOTO10
44 B=B+W:T=W:W=0:N=N-O:A=A+V:V=U:IF N>1:GOTO8

本文も直しておきます。すみませんでした。

2015.06.26 Fri l 見習職人. URL l 編集
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
2015.06.25 Thu l . l 編集

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。