
N88BASICを使って簡単なゲームをつくってみたいんですけど
どうもうまくいかないんですよ。
昔なつかしのインベーダーゲームを作ろうとがんばっているのですが
敵と自機を配置したんですけどそれを動かすにはどうしたらいいのでしょうか?
もう敵を動かすのはめんどうなので自機だけキー入力で
左右に動かせるようにしたいんです。
そうするにはどういう命令を書けばいいのでしょうか?
それとシューティングゲームなので弾を発射するとか
当たったらやられるとかそういう肝心なところの
プログラムがわかんないんです。
どなたか教えてもらえないでしょうか
お願いします。m(-_-)m
No.3ベストアンサー
- 回答日時:
あまりに懐かしいので、非常に簡単な移動&発射プログラムを下記に書きました。
(実際に動かす環境がないので、動くかどうかは分かりません。悪しからず)
1000 ' 初期化。機種によって違うと思うのでこの辺は適当に見直してね
1010 cls 3
1020 console 0,25,0,1
1030 width 80, 25
1035 ' 初期位置に自機を配置
1040 xx = 40: yy = 23 ' 自機の位置 (下端の中央)
1045 tx = 40: ty = -1 ' 弾の位置 (ty < 0 の場合、弾は発射されていない)
1050 locate xx, yy: print "@";
1055 ' メインの処理ループ
1060 execflag = -1 ' ゲームを続けるか? -1 = TRUE
1070 while execflag
1080 prex = xx: prey = yy
1090 a$ = inkey$
1100 if a$ = "4" then xx = xx - 1 ' 左に移動
1110 if a$ = "6" then xx = xx + 1 ' 右に移動
1140 if a$ = "5" then gosub *shoot ' 弾を撃つ
1150 if a$ = "q" then execflag = 0 ' 終了
1160 gosub *move
1170 wend
1175 'おしまい
1180 locate 0,0: print "game quit"
1190 end
1200 *shoot ' 弾を撃つ(準備する)
1205 ' 弾が発射されていない場合のみ、現在の自機の位置に弾を配置する
1210 if ty < 0 then tx = xx: ty = 23
1220 return
1300 *move ' 画面の描き換え
1305 ' 位置が移動していたら、元の位置の自機を消して、新しい位置に表示
1310 if prex <> xx or prey <> yy then locate prex, prey: print "@";:locate xx, yy: print "@";
1315 ' 弾が撃たれている場合以外は弾の描画はしない
1320 if ty < 0 then return
1325 ' 弾の描画 ... 上に移動する
1330 ty = ty - 1
1340 ' 撃った最初の場合以外は、元の位置の弾を消す
1350 if ty < 23 then locate tx, ty + 1: print " ";
1355 ' 新しい位置に弾を描画
1360 locate tx, ty: print "*";
1370 return
4 6 のキーで移動、 5 のキーで発射、 q で終了です。
イメージとしては、
1. ひたすら無限にループを回す。
ループのひと回りを最小の時間単位として考える。
2. キー入力があったら、それに合わせた処理を行う。移動、発射、終了
3. 移動しているものがある場合は、時間が経ったということで毎回移動の処理を行う。
って感じです。
当たり判定は、上記でいえば、弾の座標(tx,ty) が、
特定の位置(敵がいる位置)にきたら、「当たり」と判定して、
それに合わせた処理をします。
弾が1個しかないですが、オリジナルもそうだったはずなので、手を抜いてます。
本当は配列を使用するなどして、複数使えた方が面白くなるでしょう。
あと、移動時の範囲チェックとかをしてないので、このままだと、
自機が画面の端に来た時にエラーが出るはずです。
適当にチェックして、範囲内に収まるようにする必要があります。
N88-BASIC を使うというのは確かに手軽ではありますが、
ある程度本格的にゲームプログラミングをしたいということであれば、
・言語の仕様が古すぎる
(プログラムの管理が大変。また、へんな癖がつきやすい)
・ハードウェアの機能がそこそこしかない
(グラフィックの描画機能が弱いので、
それなりに工夫しないと見栄えよくならなかったりする)
・現在主流となっている機種では動かない
(AT 互換機だと、エミュレーションでしか動かないのでひどく遅くなる)
なので、そのうちに不満がでてくると思いますよ。

No.4
- 回答日時:
n88の場合に.「敵」の所在を
n*m次元配列を作って配列情報から作画する場合(グラフィックを使う場合が多いが.n88使用可能機種の場合に.グラフィックメモリーがない場合=機種依存の対応が面倒)
と
直接V-ramにデータを送って作画する場合(キャラを使う場合が多い)
の2通りがあります。どちらでしょうか
n88ではz-80ですよね(8801ですよね)。88のioを覚えていない(1回も作らなかった)ので.ioポート(キーボードマトリックスを直接操作)は答えられません。n88-98での答になりますが良いでしょうか。
No.2
- 回答日時:
「シューティングゲームを作る」
これだけで本1冊書けるくらいですから、簡単に。
1)自機移動は、INPやINKEY$でキーを読み取り、
それにより自機の表示座標を変えれば良いのです。
弾発射のキーが押されたら弾を出す。
2)弾の当たり判定は、弾の表示位置に何かあったら当たりとするわけで、
キー入力判定->自機移動->敵移動->自機弾移動->敵弾移動->自機の弾が敵ったか当たり判定->
敵の弾が自機に当たったか判定->キー入力に戻る
こんな感じでしょう。

No.1
- 回答日時:
なぜN88BASICを使用するのでしょうか
Delphi6Personal,C-Builder,J-Builder,Bisual-Baisc,の本にゲームの
作り方が出ていると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
円の頂点の求め方を知りたいです。
-
エクセルのレーダーチャート 0...
-
[続編] pictureBoxそのものの...
-
C#を用いて描画する四角形の角...
-
VB.netで図形描画ができません^^;
-
PowerPoint の VBA
-
C#でPictureBox内での図形移動...
-
実行時エラー 438になった時の...
-
worksheetFunctionクラスのVloo...
-
あとこれさえ出来ればよいので...
-
「Columns("A:C")」の列文字を...
-
ユーザーフォームを表示中にシ...
-
VBA シートのボタン名を変更し...
-
パソコンへの「Dropbox...
-
ExcelVBAのユーザーフォームの...
-
【C#/Java?】try-catchでcatch...
-
VBA(エクセル)で自動的にボタン...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
C++プログラミングについて。
-
Excel VBA:コントロールボタン...
-
C#を用いて描画する四角形の角...
-
MFCでのコンボボックスについて
-
ビットマップに描画をしてピク...
-
PowerPoint の VBA
-
円の頂点の求め方を知りたいです。
-
[続編] pictureBoxそのものの...
-
for文の実行速度を遅くしたいの...
-
給紙トレイをダイアログを使わ...
-
文字のちらつきを抑えるには
-
画面に絵を出す方法
-
delphi 画面のちらつき
-
shapeを描画
-
VC;;6.0のMFCで線を簡単に引け...
-
vc++のペイント処理。
-
win32api複数のタイマーを同時...
-
c言語 ちらつき
-
Visual C++ MaskedTextBoxの右...
おすすめ情報