スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

追いかけゲームを作ろう





なんですかこのタイトル?







原点に戻ってみよう、ということで、これが初ゲームプログラムかどうかは定かじゃないんだけど、昔作ったゲームをリメイクしてみようということで。







で、それがこれ?




PAC98






パックマンですね。







マイコンBASICマガジン1983年2月号に「追いかけゲームを作ろう」という特集がありまして、それを利用して作ったのがこれ、だったかと。







へ~。追いかけアルゴリズムの説明とかやってたんでしょうか。







もうそのベーマガも持ってないので詳しくはわからないんだけど、確かそうだったと思う。で、このゲームも中身はほとんど紹介されてたプログラムそのまんまって感じだった。







なんか不確実な話ばかりですねえ。







だいぶ昔の話だからね。で、このゲーム、敵が情け容赦なく追いかけてくるので、そのうちぴったり後ろにつかれて操作ミスが許されない状況になる、という結構ストレスのたまる難易度になってて。







逆転のパワーエサがないですから、もうどうしようもないですよね。







そういうわけなので、作ったはいいけど遊べる代物ではなかったなあと。







それで作り直してみようと思い立ったんですか。







うん。







それで、いまパックマンもどきを作ってみてもどうなのかなと思ったので、ちょっとアレンジしてみました。




ROBOT CLEANER






「ROBOT CLEANER」って、ルンバとかそういうやつ?







そう。自分で操作するのでロボットでもなんでもないんだけど。「@」のネコをよけながら、ゴミ「#」を回収するゲームです。







PC-8001用なんですね。そういえば実機持ってるのにプログラムは作ったことなかったんでしたっけ。







そんなに難しくないですが、バッテリーがなくなってもゲームオーバーなので、うまく充電できるかがゲームのカギです。







追いかけアルゴリズムは以下の通りで、たぶんベーマガで紹介されてたものと同じだと思います。







分岐点で進む方向を選択します。クリーナーとネコの座標の差を取り、その絶対値の大きいほうへ進路を取るというものです。




ABS






ええっと、この場合は水平より垂直のほうが距離がありますね。ということは下ですか。







この回の追いかけゲーム講座は、絶対値を得る「ABS」という関数の紹介って印象が強く残ってます。







しかし、遅いですねえ。いくらPC-8001とはいえ遅すぎない?







やっぱりアルゴリズムに問題があるのかな?えらそうに説明したけど。







>PRINT文がちょっと変ですよ。PRINT CHR$(CAT);って、PRINT "@"じゃあだめなの?これが遅い原因なんじゃ……<







ご存じのとおり、プログラムは実機やエミュ上じゃなくて普通のテキストエディタで書いているので、グラフィック文字が扱えません。なのでこういう形でしか。







グラフィック文字ってなんですか?







昔のパソコンは、キャラクタコードの80H以降に独自のキャラクタを置いてて、そこにゲームに使えそうなキャラが結構あった。たとえばこれはPC-9801のキャラクタコード表。




PC-9801キャラクタコード表






00H-79Hの前半は今と一緒ですけど、後ろが全然違いますね。確かにいろんな記号があります。







機種ごとに違いがあって、これはMSXのもの。




MSXキャラクタコード表






かなり違いますね。こっちはひらがなも入ってますね。







でも、このゲームでネコを表す@はグラフィック文字じゃないですよ。







そうだけど、統一するためにそうしてます。今回のゲームだと、迷路の壁がカタカナの「ロ」、クリーナーが「●」のグラフィック文字を使用しています。



ヨーコちゃん

コメントの投稿

非公開コメント

新作の完成、おめでとうございます!

新作の完成、おめでとうございます!

パックマンというよりかは、ラリーXみたいな感じなのかなぁ・・なんて思いました。

残念ながらPC-80シリーズは持っていないので、そのままではプレイすることは出来ませんが、BASICリスト(がテキストで)がダウンロード出来るようなので、X1でも動かしてみたいと思うのです。

ソースを使わせてもらっても構いませんか?

連続の投稿、失礼いたします

PC-80シリーズって複数キー入力の取得が可能なのですね。
しかもBASICからINKEY$だけではなく、INPで取得出来るのも良い仕様だと思います。
X1においては同様にBASICからINPでキー取得は可能ではあるものの、複数キー入力の取得は不可能です。

そして、ソースを拝見させていただきました。
綺麗ですね!

>PRINT文がちょっと変ですよ。PRINT CHR$(CAT);って、PRINT "@"じゃあだめなの?これが遅い原因なんじゃ……

X1でスピードテストをしてみましたよ。

A)
FOR I=1 TO 30000:LOCATE 0,0:PRINT CHR$(65):NEXT

B)
B$=CHR$(65)
FOR I=1 TO 30000:LOCATE 0,0:PRINT B$:NEXT

A) 102秒
B) 93秒

予め文字変数に格納しておくパターンBの方が9%程度、高速でした。
PC-80においても、同様の結果になるかどうかは(BASIC次第だと思うので)分かりませんが、ご参考になれば幸いです。

トモカズさん江

> 新作の完成、おめでとうございます!

どうもです~
新作ってほどのものでもないですが(^^;

> ソースを使わせてもらっても構いませんか?

全然かまいませんよ~

> PC-80シリーズって複数キー入力の取得が可能なのですね。
> しかもBASICからINKEY$だけではなく、INPで取得出来るのも良い仕様だと思います。

当時はあたりまえだと思ってたんですが、できない機種もあるんですよね。
とはいえ、あんまり同時押し判定とかやったことないですけど……

> X1でスピードテストをしてみましたよ。
> 予め文字変数に格納しておくパターンBの方が9%程度、高速でした。

結構差が出ますね。
当時はこういった細かな高速化テクニックがいろいろ
ありましたよね。
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
twitterでひとこと
最新記事
リンク
カテゴリ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
来訪者数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。