OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

N88BASICでシューティングゲームを作りたい!!

  • すぐに回答を!
  • 質問No.206021
  • 閲覧数1225
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

N88BASICを使って簡単なゲームをつくってみたいんですけど
どうもうまくいかないんですよ。

昔なつかしのインベーダーゲームを作ろうとがんばっているのですが
敵と自機を配置したんですけどそれを動かすにはどうしたらいいのでしょうか?
もう敵を動かすのはめんどうなので自機だけキー入力で
左右に動かせるようにしたいんです。
そうするにはどういう命令を書けばいいのでしょうか?

それとシューティングゲームなので弾を発射するとか
当たったらやられるとかそういう肝心なところの
プログラムがわかんないんです。

どなたか教えてもらえないでしょうか
お願いします。m(-_-)m
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル9

ベストアンサー率 53% (52/98)

あまりに懐かしいので、非常に簡単な移動&発射プログラムを下記に書きました。
(実際に動かす環境がないので、動くかどうかは分かりません。悪しからず)

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 互換機だと、エミュレーションでしか動かないのでひどく遅くなる)
なので、そのうちに不満がでてくると思いますよ。
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

なぜN88BASICを使用するのでしょうか Delphi6Personal,C-Builder,J-Builder,Bisual-Baisc,の本にゲームの 作り方が出ていると思います。
なぜN88BASICを使用するのでしょうか
Delphi6Personal,C-Builder,J-Builder,Bisual-Baisc,の本にゲームの
作り方が出ていると思います。


  • 回答No.2
レベル14

ベストアンサー率 21% (832/3844)

「シューティングゲームを作る」 これだけで本1冊書けるくらいですから、簡単に。 1)自機移動は、INPやINKEY$でキーを読み取り、  それにより自機の表示座標を変えれば良いのです。  弾発射のキーが押されたら弾を出す。 2)弾の当たり判定は、弾の表示位置に何かあったら当たりとするわけで、   キー入力判定->自機移動->敵移動->自機弾移動->敵弾移動-& ...続きを読む
「シューティングゲームを作る」
これだけで本1冊書けるくらいですから、簡単に。

1)自機移動は、INPやINKEY$でキーを読み取り、
 それにより自機の表示座標を変えれば良いのです。
 弾発射のキーが押されたら弾を出す。

2)弾の当たり判定は、弾の表示位置に何かあったら当たりとするわけで、
 
キー入力判定->自機移動->敵移動->自機弾移動->敵弾移動->自機の弾が敵ったか当たり判定->
敵の弾が自機に当たったか判定->キー入力に戻る
こんな感じでしょう。
  • 回答No.4

n88の場合に.「敵」の所在を n*m次元配列を作って配列情報から作画する場合(グラフィックを使う場合が多いが.n88使用可能機種の場合に.グラフィックメモリーがない場合=機種依存の対応が面倒) と 直接V-ramにデータを送って作画する場合(キャラを使う場合が多い) の2通りがあります。どちらでしょうか n88ではz-80ですよね(8801ですよね)。88のioを覚えていない(1回も作らな ...続きを読む
n88の場合に.「敵」の所在を
n*m次元配列を作って配列情報から作画する場合(グラフィックを使う場合が多いが.n88使用可能機種の場合に.グラフィックメモリーがない場合=機種依存の対応が面倒)

直接V-ramにデータを送って作画する場合(キャラを使う場合が多い)
の2通りがあります。どちらでしょうか

n88ではz-80ですよね(8801ですよね)。88のioを覚えていない(1回も作らなかった)ので.ioポート(キーボードマトリックスを直接操作)は答えられません。n88-98での答になりますが良いでしょうか。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ