人気雑誌が読み放題♪

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

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

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

どなたか教えてもらえないでしょうか
お願いします。m(-_-)m

このQ&Aに関連する最新のQ&A

A 回答 (4件)

あまりに懐かしいので、非常に簡単な移動&発射プログラムを下記に書きました。


(実際に動かす環境がないので、動くかどうかは分かりません。悪しからず)

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

n88の場合に.「敵」の所在を


n*m次元配列を作って配列情報から作画する場合(グラフィックを使う場合が多いが.n88使用可能機種の場合に.グラフィックメモリーがない場合=機種依存の対応が面倒)

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

n88ではz-80ですよね(8801ですよね)。88のioを覚えていない(1回も作らなかった)ので.ioポート(キーボードマトリックスを直接操作)は答えられません。n88-98での答になりますが良いでしょうか。
    • good
    • 0

「シューティングゲームを作る」


これだけで本1冊書けるくらいですから、簡単に。

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

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

なぜN88BASICを使用するのでしょうか


Delphi6Personal,C-Builder,J-Builder,Bisual-Baisc,の本にゲームの
作り方が出ていると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qpc98のエミュレータを使って N88BASICを使いたい。

こんにちは、
pc98のエミュレータを使って N88BASICを使いたい。と考えています。
(目的:PC98で作られたプログラムを動かしたい。)

環境:WindowsXP

それで、pc98のエミュレータを実際に入れてみたのですが、それだけではだめみたいです。
(T98-NEXT:起動するとNo System (T98-Next Internal Boot Loader)というメッセージが出る。

エミュレータというものをはじめて使うため、基本的なこともわかっていないのですが、ほか、何を入れれば動くようになるのでしょうか?

何かお分かりの方がいましたら教えてください。よろしくお願いします。

Aベストアンサー

そのエミュレータは、PC98のハードウェアをエミュレートしているだけではありませんか?
その環境に別途、PC98のMS-DOSをインストールする必要があると思いますが。

今、下記サイトを見たらN88BASICを動かすためには、BIOS自体も移さないと駄目みたいです。

参考URL:http://www.geocities.co.jp/SiliconValley-Bay/2754/index.html

QN88-BASICのグラフィック、図形のプログラミング

N88-BASICのLINE命令、CIRCLE命令等を使って、カーテン(中を色で塗りつぶし)のような図形を描きたいのですが、どう命令すればよいのでしょうか。

Aベストアンサー

(1)スタート基点A-下に開いた半円-半円端点に続いて上向き半円-半円端点Bを描く
(2)同じくAとX座標をずらした点Cを取り
スタート基点C-下に開いた半円-半円端点に続いて上向き半円-半円端点Dを描く
(3)AとC、BとD点を斜め直線で結ぶ
(4)(1)(2)ともに、上向き・下向きの半円の組み合わせを適当数繰り返す。
(5)(1)(2)はSINカーブを2つ描き、位相をづらす方が、よりそれらしくなるかも。
サインカーブは角度を微小分△θを増やし、SIN(θ)とF(θ+△θ)間に微小直線を引くのが、グラフを描く根本技法です。

QN88互換BASIC for Windows95のインストール

上記のように、N88互換BASICをダウンロードし、
セットアップをしようとしたところ、

Path or file not found

と表示され、次に

セットアップするためのファイル\~\~…\bas95110
\\@RAINBOW.DIBがありません。

とエラーが表示され、セットアップできません。

自宅のパソコンはXPなのですが、XPでBasicをやることは不可能なのでしょうか?

だれか、同じようなエラーが出た人はいないでしょうか?
逆に「XPだけど、私は普通にできたよ。」
という人がいたら教えてほしいのですが…
自分では特にいじってないし、なんでこのようなエラーが出るのかがわかりません。

だれか、アドバイス等かあったらよろしくお願いします

Aベストアンサー

こんにちは お昼ですね(^^)

さて。。。私のマイマシンちゃんでは
N88互換BASIC for Windows95がサクサク動いてます。
Xpのproです。
サービスパックも当ててるしアップデートもしております。

Path or File Not Found.が怪しい。
原因はこれじゃん?↓

http://www1.odn.ne.jp/~cak69620/DownLoad5.htm

ありがちです。
つまりどっかに「全角文字」が入ってるわけ。
たとえばログインユーザー名前が「太郎」とか漢字だったり
「TARO」だったり。
Documents and Settings~名前 この部分ね。

デスクトップで解凍してセットアップしてたり。
だからこの辺を回避してみて。
ログインUSER名を「taro」
解凍場所を「C:\TEMP」で行いセットアップするなどしてみて。
あと、XP等NT系ではAdministrator権限のあるユーザーでセットアップを行うとかかな。

ではでは。

参考URL:http://www1.odn.ne.jp/~cak69620/DownLoad5.htm

こんにちは お昼ですね(^^)

さて。。。私のマイマシンちゃんでは
N88互換BASIC for Windows95がサクサク動いてます。
Xpのproです。
サービスパックも当ててるしアップデートもしております。

Path or File Not Found.が怪しい。
原因はこれじゃん?↓

http://www1.odn.ne.jp/~cak69620/DownLoad5.htm

ありがちです。
つまりどっかに「全角文字」が入ってるわけ。
たとえばログインユーザー名前が「太郎」とか漢字だったり
「TARO」だったり。
Documents and Settings~名前 この部分ね...続きを読む

QN88BASIC を インストールする方法

マシン環境は、 純正国民機です。(RA43)

導入されているOSは、 MS-DOS 6.2 , Windows98 , windows2000 , です。

N88BASIC を HDD にインストールしたいのですが、どのような作業手順を踏めば宜しいでしょうか?

よろしくお願いします。

Aベストアンサー

>BIOSメニューから、外付けのFDドライブを、先行させたのですが、
内蔵FDDは3.5インチ2台で、外付けFDDが5インチ2台と言うことでしょうか?
N88-BASICのFD(5インチ)から内蔵用の3.5インチFDにコピーして外付けFDDを外したらどのような動作になるでしょう?

>結局のところは、HDDインストール画面になりません。
紛らわしい捕捉ですね。
現時点でFD起動のN88-BASICではHDDを認識していないと言うことでしょうか?
内蔵HDDの2MBへのインストールについて可否が捕捉されていませんがどうなりましたか?
N88-BASICでご使用のSCSIアダプターをサポートしていなければSCSIのHDDを認識できません。この点をチェックする必要があるでしょう。

QN88BASICをWINDOWSで読めるように保存したいのですが

N88BASICでGPIBを使用した検査器があります。
WINDOWSでBASICの編集ができるフリーソフトN88互換BASIC for Windows95で編集しようとして、3.5インチのFDDにプログラムを保存しようとすると、DISK I/Oエラーとなってしまいます。
フォーマットは1.2M 1.44Mで試してみました。
N88BASICを保存するにはどうしたら宜しいでしょうか?

Aベストアンサー

どこでどうエラーなどおきているのかわかりにくです。補足してください。



PC-98ですが型番によっては1.44Mは使えません。(PC-9821なら使えます)
DOS版でないN88-BASICはBASICのシステムプログラムでFDをフォーマットして使います。これはWINDOWSでは読めません。DOS版-BASICにはDOSユ-ティリティFILECONVで変換します。

DOS版N88-BASICならアスキーセーブすればWINDOWSでも読めます。

WINDOWSパソコンは1.44Mは普通読めますが、1.2Mは3モード対応FDがついていないと読めません。

Qソニーvaioの電源が入らないのですが

PCG-777を4年程使っています。まったく電源が入らなくなりました。
修理店で聞いたのですが、バイオはバッテリーが無くなるとAC電源でも電源がはいらなくなるのですか?どうすれば電源が入るようになりますか。教えてください。

Aベストアンサー

 僕が使っているのはR505Rですが、バッテリーなしでACだけで電源が入ったと思います。
 違うスレで読んだのですが、内蔵タイマーの方のバッテリー劣化も、電源が入らない原因だそうです。

 ほんとすんません。なんの力にもなれなくて。(T-T)

#違うスレ
 ↓

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=252417

Qシステムディスクをセットしてください

OS:Win95 機種:NEC PC-9821Xn

ウィンドウズが起動しなくなり、いろいろと試みていたのですが
ここからどうしていいのかわかりません。電源を入れると

システムディスクをセットしてください

と表示され、DISKのランプがチカチカします。
復旧の方法を教えて下さい。

Aベストアンサー

すみません、下の回答に間違いがありました。
ソフトウエア的にHDDを使用できなくなっている場合には、起動ディスクで起動してもHDDの存在が無視されて、HDDを見る事ができません。
起動ディスクで起動してHDDが見えない場合には、下の設定クリアーを実行してから、HDDの不良などを疑ってください。
起動ディスクで起動してHDDが見えるのでしたら、他の方の回答にもあるSCANDISCを実行したほうが良いと思います。
なお、PC-9821ではCD-ROMからの起動は絶対にできません。
ムダな努力はしないように…

Q配列変数の添字が範囲外ですと でます

題通りなんですが このようなエラーメッセージがでるときは、なにが間違っているのでしょうか?
当方恥ずかしながらN88互換BASIC for Windows95を使っています
よろしくお願いします

Aベストアンサー

そもそも、配列とか添え字というのは理解されているのでしょうか?

そのエラーは、文字通り、配列として定義されていない範囲の添え字を使おうとしたときに出ます。

つまり、

Dim Members(100) as String

としておきながら、Members(101)=1 + 2

等としようとした場合などです。

間違いやすいのは、配列の定義が0から始まる場合です。

つまり、10個の配列を定義しようとした場合、
Goukei(9)とするとGoukei(0)~Goukei(9)までの10個を使えるようになりますが、ここで10番目として、うっかりGoukei(10)としてしまうことがよくありますが、そういったミスはないでしょうか。

QBasicでのプログラムなのですが・・・

高校の情報の問題なのですが・・・・

・三角形の面積を求めるプログラム

・n,rを入力しnPrを求めるプログラム

をBASICでプログラムを作らなければならないのですが・・・・
全く解りません。
どなたか,教えてください。

Aベストアンサー

N88-BASICですか。やべっ詳しい文法を覚えてねぇ。
とりあえず、間違いだけ指摘させてもらいます。

(1)問題ないですが、工夫するともっと良くなります。
(2)ELSEも使いましょう。
(3)実際には2行に分けたほうが良いです。aが1から始まるとS = n * (n-1) * (n-2) * ・・・ * (n-r+1)とは違うますよ。
(4),(5)は、代入文です。代入先を用意しないと。
(6)ループの方法は何を習いましたか?
(7)これでも表示されますが、工夫するとさらに良くなります。

サンプルがあるんで、ここをまず読んでみてください。
http://mis.edu.yamaguchi-u.ac.jp/kaisetu/n88basic_00/index.html

で、自宅でフリーソフトのN88-BASIC互換ソフトが使えます。上のサンプルも互換BASICを使っています。WindowsVsitaじゃなければ問題なく動くはずです。
http://www.vector.co.jp./soft/win31/prog/se025866.html
http://www.vector.co.jp./soft/win95/prog/se055956.html
2つあるんで、使いやすくて問題なく動くほうを使ってください。

N88-BASICですか。やべっ詳しい文法を覚えてねぇ。
とりあえず、間違いだけ指摘させてもらいます。

(1)問題ないですが、工夫するともっと良くなります。
(2)ELSEも使いましょう。
(3)実際には2行に分けたほうが良いです。aが1から始まるとS = n * (n-1) * (n-2) * ・・・ * (n-r+1)とは違うますよ。
(4),(5)は、代入文です。代入先を用意しないと。
(6)ループの方法は何を習いましたか?
(7)これでも表示されますが、工夫するとさらに良くなります。

サンプルがあるんで、ここをまず読んでみてくだ...続きを読む

QINKEY$関数でEnterキーを使う方法について

SHARPのPC-G801というポケコンを中古で購入し、BASICのプログラミングをしています。しかし、マニュアルがないため、困っております。

Enterキーを押したときに処理を行う命令を作りたいのですが、
IF INKEY$=○○○ THEN ~~

の○○○のところはどのように記述すればよいのでしょうか?

ネット上で公開されていたPC-E500(別機種ですがメーカーは同じ)の英語版マニュアルのINKEY$関数のところを見ると、対応表のようなものが出ていて、EnterキーはLowの行は「D」、Highの列は「0」でした。しかし、

INKEY$=D0、INKEY$=0D、INKEY$="D0"、INKEY$="0D"

を試してみましたが、いずれも機能しませんでした。この対応表の意味もよくわかりません…。

ご存じの方がおられましたら教えていただければと思います。よろしくお願いします。

Aベストアンサー

SHARP PC-G801のBASICは知りませんので一般的なBASICでの例で説明します。
INKEY$は変数$が示すように文字を返します。
比較対象も文字で無ければならないので一般的なBASICでは
IF INKEY$=CHR$(&H0D) THEN ~
のように書きます。
エンターキーのキャラクタコードは16進数のOD(10進数の13)であることが一般的です。
※ASCIIコード系では改行が16進数のODに割り振られています。

>対応表のようなものが出ていて、EnterキーはLowの行は「D」、Highの列は「0」でした。
16進数2桁の数字を表していて、LOWが1の位、Highが10の位なので OD になります。

一般的なBAICでは16進数の表現は &H~ で数値を文字に対応させる場合には CHR$(数値) を使いますがSHARP PC-G801のBASICでは表記が異なるかもしれません。


人気Q&Aランキング