おはようございます、シューティングゲームの館参考にして色々いじって楽しんでいるのですが。
シューティングゲームの館の上の方に、”拡張性の低い”と書いてある文がありましたが。
拡張性が低いとは具体的にどのようなことなのでしょうか?
私はシューティングゲームの館に書いてあることでもけっこう満足しています。
シューティングゲームの館の拡張性
Re:シューティングゲームの館の拡張性
はい、実はあのプログラムはちょっと遊んでもらって「自分でもこんなゲームが作れるんだ!」ということを早く実感してもらいたくて作ったものなので、
本格的に作ることを全く想定していないんですよね。
拡張性、汎用性を高めると、どうしても、わかりやすさは減少してしまいますから、ここでは
わかりやすさを重視し、前者を削っています。
ホントはこうかけばもっと効率いいのに・・と思う部分もあるかと思いますが、あえて、非効率に書いたりしている部分もあります。
そのいい例がswitch文での敵の制御です。
普通敵の出現データなどは内部のプログラムに書いたりはしないと思います。
何かデータベースを作っておいてそこから読み込むのが一般的だと思います。
まず、switch文で敵の出現データを作っていくと、どこかで限界が来ると思います。
既に20匹位から何がどうなってるのかよくわからなくなってくるのではないでしょうか。
しかし、敵がいつどこからどんな弾を撃ってきて、どのように行動するか
といったデータをエクセルデータなどから読み込むことが出来れば、書くことも、管理することも楽ですよね。
今、「あ、この敵とこの敵の間に敵Aを出現させるんだった」と言った事があった場合、そこから後ろの敵のデータは全てずらす必要がありますが、switch文では一つ一つ手作業でずらさなくてはなりません。
エクセルデータならセルを範囲指定して+100とかすれば全部+100されますよね。
また、似たようなパターンならセルの右下をつかんで引っ張れば同じパターン内容でコピーされますし。
また、1面だけならまだしも、それが10面あったりするとわけわからなくなる&内部プログラムが完成しているとしても、後から敵データを変更したい時、またコンパイルしなおさなくてはならないのです。
管理、運営も本格的に作るなら結構重要で、後から敵のパターンを変更したい時などは外部データをいじればいいだけというのは結構重要なんです。
また、関数間でのつながりが強い為、関数が流用できず、この関数はこのシューティングにしか使えないというものが多いです。
まぁその辺をキレイに書くのはC++を勉強する必要があると思いますが、Cでも似たような書き方は出来るのにあえてしていないので、汎用性が低いのです。
館も早く更新したいのですが、他にもやらないといけないことが多すぎてどれから手をつけようか悩んでいるところです(_ _|||)
本格的に作ることを全く想定していないんですよね。
拡張性、汎用性を高めると、どうしても、わかりやすさは減少してしまいますから、ここでは
わかりやすさを重視し、前者を削っています。
ホントはこうかけばもっと効率いいのに・・と思う部分もあるかと思いますが、あえて、非効率に書いたりしている部分もあります。
そのいい例がswitch文での敵の制御です。
普通敵の出現データなどは内部のプログラムに書いたりはしないと思います。
何かデータベースを作っておいてそこから読み込むのが一般的だと思います。
まず、switch文で敵の出現データを作っていくと、どこかで限界が来ると思います。
既に20匹位から何がどうなってるのかよくわからなくなってくるのではないでしょうか。
しかし、敵がいつどこからどんな弾を撃ってきて、どのように行動するか
といったデータをエクセルデータなどから読み込むことが出来れば、書くことも、管理することも楽ですよね。
今、「あ、この敵とこの敵の間に敵Aを出現させるんだった」と言った事があった場合、そこから後ろの敵のデータは全てずらす必要がありますが、switch文では一つ一つ手作業でずらさなくてはなりません。
エクセルデータならセルを範囲指定して+100とかすれば全部+100されますよね。
また、似たようなパターンならセルの右下をつかんで引っ張れば同じパターン内容でコピーされますし。
また、1面だけならまだしも、それが10面あったりするとわけわからなくなる&内部プログラムが完成しているとしても、後から敵データを変更したい時、またコンパイルしなおさなくてはならないのです。
管理、運営も本格的に作るなら結構重要で、後から敵のパターンを変更したい時などは外部データをいじればいいだけというのは結構重要なんです。
また、関数間でのつながりが強い為、関数が流用できず、この関数はこのシューティングにしか使えないというものが多いです。
まぁその辺をキレイに書くのはC++を勉強する必要があると思いますが、Cでも似たような書き方は出来るのにあえてしていないので、汎用性が低いのです。
館も早く更新したいのですが、他にもやらないといけないことが多すぎてどれから手をつけようか悩んでいるところです(_ _|||)
Re:シューティングゲームの館の拡張性
なるほど、プログラムは内部(ソースコード)に全て書くものだと思ってました。
たしかにswitchで書くとき真ん中くらいを修正するのは苦労しますし。
プログラムって深いですね、でも思ったとおり動くとすごく嬉しいです。
管理人さんの作ってくれた、シューティングゲームの館は動かす楽しみはすごく伝わってますよ。
外部とリンクしたプログラム作りで良いサイトとかあったら教えていただけると助かるのですが、
あったら教えてくれませんか?
たしかにswitchで書くとき真ん中くらいを修正するのは苦労しますし。
プログラムって深いですね、でも思ったとおり動くとすごく嬉しいです。
管理人さんの作ってくれた、シューティングゲームの館は動かす楽しみはすごく伝わってますよ。
外部とリンクしたプログラム作りで良いサイトとかあったら教えていただけると助かるのですが、
あったら教えてくれませんか?
Re:シューティングゲームの館の拡張性
うーん、サイトは知らないですけど、外部データからの参照は簡単ですよ。
エクセルはcvsファイルにすればセルはコンマで区切っただけのファイルになりますから、読み出しも簡単です。
エクセルでcvsファイル形式で保存し、テキストエディタで開いてみるとその意味がよく解ると思います。
例えば
100,200,300
400,500,600
という並びで記録されているテキストファイルから数字を読み込む方法はお分かりになりますよね?
そのデータをswitch文で入れている変数にいれてやればいいだけです。
まぁ他にも非効率な部分は沢山あるわけですが;
プログラムって思ったとおりに動くと面白いですよね。
そして、思ったとおりに動かなくて発見したこともまた多いですw
四聖龍神録の弾幕を作ってて、計算式を間違えて、弾が変な動きをしたことは何度もありました。
その「変な動き」は予め考えて計算式を作ったものでは想像できなかったような奇跡を動くことも多く、それがたまたま面白かったものは、間違いをあえて採用しりしたこともありました^^;
試行錯誤って結構大事なんですよね。
人に聞いて実装した方法はすぐに忘れますけど、自分が編み出した方法は忘れない。そして応用が効く。
もちろん人に聞くことも大事ですけど、やはり私は試行錯誤が好きです。
私の院での研究分野もtry and errorについて関係してますしw
なので、一通り理解されたら、是非ご自分で一から作ってみてください。
きっともっと自分で拡張できるようになると思いますし、自分がすべてを理解しているため、もっともっと応用が楽になると思います。
目指せ東方超え!
エクセルはcvsファイルにすればセルはコンマで区切っただけのファイルになりますから、読み出しも簡単です。
エクセルでcvsファイル形式で保存し、テキストエディタで開いてみるとその意味がよく解ると思います。
例えば
100,200,300
400,500,600
という並びで記録されているテキストファイルから数字を読み込む方法はお分かりになりますよね?
そのデータをswitch文で入れている変数にいれてやればいいだけです。
まぁ他にも非効率な部分は沢山あるわけですが;
プログラムって思ったとおりに動くと面白いですよね。
そして、思ったとおりに動かなくて発見したこともまた多いですw
四聖龍神録の弾幕を作ってて、計算式を間違えて、弾が変な動きをしたことは何度もありました。
その「変な動き」は予め考えて計算式を作ったものでは想像できなかったような奇跡を動くことも多く、それがたまたま面白かったものは、間違いをあえて採用しりしたこともありました^^;
試行錯誤って結構大事なんですよね。
人に聞いて実装した方法はすぐに忘れますけど、自分が編み出した方法は忘れない。そして応用が効く。
もちろん人に聞くことも大事ですけど、やはり私は試行錯誤が好きです。
私の院での研究分野もtry and errorについて関係してますしw
なので、一通り理解されたら、是非ご自分で一から作ってみてください。
きっともっと自分で拡張できるようになると思いますし、自分がすべてを理解しているため、もっともっと応用が楽になると思います。
目指せ東方超え!
Re:シューティングゲームの館の拡張性
さっそくためしてみました、数字を何列何行いれて。
メモ帳で開くとカンマで区切られてました。
色々調べながらどんどん拡張して快適に修正しやすいプログラム作りを目指します。
丁寧に教えていただき本当にありがとうございます。
メモ帳で開くとカンマで区切られてました。
色々調べながらどんどん拡張して快適に修正しやすいプログラム作りを目指します。
丁寧に教えていただき本当にありがとうございます。