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で質問しましょう!
似たような質問が見つかりました
- 世界情勢 統一教会・文鮮明と自由党自民党・岸信介が親しい関係になったのは反共産党という思想・考え? 1 2022/07/18 09:49
- 政治 自衛隊の対潜哨戒機P-1には、対空ミサイル防御システム「パルティア」を装備するべきですね? 6 2022/09/12 04:41
- 世界情勢 人類国民の真の敵で悪魔崇拝者でもあるイルミナティ・DS・ㇵザールマフィアの常套手段 1 2022/06/27 23:13
- レトロゲーム ファミコンのインベーダの質問その3 背景にインベーダーを描画したとしても、なぜ動けるのか? 3 2022/07/08 16:58
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- 車検・修理・メンテナンス 自動車ドライブレコーダー 前後 7678 円 在庫限りで安いですが購入しても良いでしょうか GPS 5 2022/07/09 07:17
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- レトロゲーム ゲームタイトルが思い出せません 1 2023/05/21 11:05
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- オンラインゲーム ゲーム(バトロワ)についてアドバイスください 1 2022/11/16 10:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
C# DrawImage 物理サイズでな...
-
Word 描画オブジェクトを削除...
-
Windows10のC#のピクチャーボッ...
-
Visual C++ MaskedTextBoxの右...
-
OpenGLでのオブジェクトの描画上限
-
PowerPoint の VBA
-
ビットマップに描画をしてピク...
-
.NETのPictureBoxでウインドウ...
-
PictureBoxのダブルバッファリ...
-
フォームに描画して表示をスク...
-
給紙トレイをダイアログを使わ...
-
delphi paintbox.invalidate
-
VC;;6.0のMFCで線を簡単に引け...
-
VB.NETでグラフィックを描くと...
-
VC++ ドラッグしながらの図の...
-
VBA シートのボタン名を変更し...
-
実行時エラー 438になった時の...
-
worksheetFunctionクラスのVloo...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
PowerPoint の VBA
-
C#を用いて描画する四角形の角...
-
給紙トレイをダイアログを使わ...
-
win32api複数のタイマーを同時...
-
Word 描画オブジェクトを削除...
-
ビットマップに描画をしてピク...
-
VC;;6.0のMFCで線を簡単に引け...
-
VB.NETでグラフィックを描くと...
-
C# DrawImage 物理サイズでな...
-
MFCでのコンボボックスについて
-
Excel VBA:コントロールボタン...
-
ボタンの更新速度について
-
画面に絵を出す方法
-
N88BASICでシューティングゲー...
-
MySQLのデータをグラフ化して表...
-
C#でPictureBox内での図形移動...
-
エクセルのレーダーチャート 0...
-
円の頂点の求め方を知りたいです。
おすすめ情報