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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
C# DrawImage 物理サイズでな...
-
VB.NETでグラフィックを描くと...
-
Word:描画オブジェクト内の画...
-
ExtFloodFill を使った塗り潰し...
-
円の頂点の求め方を知りたいです。
-
VC++ ドラッグしながらの図の...
-
C#でPictureBox内での図形移動...
-
Excel VBA:コントロールボタン...
-
Word 描画オブジェクトを削除...
-
ビットマップに描画をしてピク...
-
for文の実行速度を遅くしたいの...
-
VB .net Form_Load時、または関...
-
リアルタイムで再描画
-
ボタンの更新速度について
-
PowerPoint の VBA
-
実行時エラー 438になった時の...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
パソコンへの「Dropbox...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
PowerPoint の VBA
-
給紙トレイをダイアログを使わ...
-
VB.NETでグラフィックを描くと...
-
ビットマップに描画をしてピク...
-
win32api複数のタイマーを同時...
-
Excel VBA:コントロールボタン...
-
画面に絵を出す方法
-
c言語 ちらつき
-
VC++ ドラッグしながらの図の...
-
Word 描画オブジェクトを削除...
-
N88BASICでシューティングゲー...
-
scilabでのグラフ描画時の軸設定
-
vb6のTEXTBOX
-
C#で壁の当たり判定と自キャラ...
-
図の削除直後の再描画
-
ボタンの更新速度について
-
C#(.net) ドロー系ソフト作成 ...
-
PictureBoxのダブルバッファリ...
おすすめ情報