DirectXなどを勉強した後、さあ、ゲーム作るかってなったときに、やっぱりどうしよう?ってなってしまうと思うんですよね(俺のことですが^^;やっぱり、ゲームアルゴリズムってすごく重要だと思うんですよ。僕は一番重要じゃないかって思ってます。そこで、アルゴリズムを学ぶのに適したサイト、本(今回は金銭面の点でできるだけサイトで)など教えていただけないでしょうか?いちおう、そこそこのレベルのSTGを作ろうかなぁって思ってます。「シューティングゲームプログラミング」(?)あたりです。これだけで十分だろ!とか思われる方は、そういっていただけるとありがたいです。自分としては、意味は分かるのですが、いざ自分で実装しようとなるとどうすればいいかわからなくなってしまいました。毎回しょうもない質問ばかりで申し訳ございません。できればアドバイスお願いします。softya(ソフト屋)それは点と線が結ばれていないというか、プログラムを構築する方法を求めているのにプログラムの細かいテクニックを求めているように思われます。定番アルゴリズムは、あくまでもスマートに処理するためのものでテクニックに過ぎません。標準関数をいくら覚えたところでプログラムが成り立たないように、アルゴリズムを組み込む方法理解しないとプログラムは出来ませんよ。組み込み方は、慣れていくと思うので実際にコード見ていくうちに分かると思うので大丈夫(?)です。上手にクラス分け、ファイル分割するのが苦手で、プログラム組むか・・・ってなったときに、どこからはじめればいいかわからないんです。つまずいているところ以前の問題ですので、具体的な例は残念ながら申し上げることができません。softya(ソフト屋)で、色々調べてみたのですが良い本やサイトは見つかりませんね。こんな本はあるのですが。本」んで歴史的に説明しますと、有名な設計手法に構造化設計とオブジェクト指向設計があります。構造化設計はC言語、オブジェクト指向設計はC++向けの設計手法と言った感じでしょうか。オブジェクト指向設計は、ベースに構造化設計を内包しているので共通点も多々ありますが、違いはデータ主体か手続き主体かってことです。両者の概要的には、こんな感じです。http://www.sysportcore.com/kota/program/index.html良い本がないので良かったら実際に設計練習してみましょうか?かんたんゲーム、例えばブロック崩しとか要件分析・クラス設計を実際にやってみましょう。Suikaba>>softyaさんほんとうですか!?それはありがたいです。調べてくださったんですか。こんな僕のためにすいません・・・ちなみに僕はC++を使おうと思っています。softya(ソフト屋)ここは設計方法だけなんで、C#でもJavaでもC++でもオブジェクト指向言語なら差はないです。私なりの方法と言うことでこれが全てではないと理解しておいてください。ブロック崩しを設計するという事でブロック崩しに登場するオブジェクトを書きだしてみてください。それと各オブジェクトが持つデータも書き出しをお願いします。いや、その前からだなブロック崩しの概要を書きだして下さい。ブロック崩しを構成する要素を書きだしてください。画面に反射する球があって、それをバー(?)でうちかえしてブロックを消していくゲームですよね?要素って言うのは、スコアとかそういったものですかね?そのとおりです!要素としては、スコアは必須じゃないです。Suikabaバーと、球、ブロックは最悪必要ですよね。アイテムとかあってもいいかと思います。softya(ソフト屋)あれ?重要なものが抜けてますよ。これが無いと球がすぐに画面外に出ていってしまいます。あとアイテムとスコアは今回シンプルするために省きましょう。softya(ソフト屋)じゃあ、枠とバー、球、ブロックのそれぞれのオブジェクトを構成するために必要なデータを定義してみてください。Suikabaすいません。あさってまで返信できないかもしれません。softya(ソフト屋)そうですね。財布と言うオブジェクトが有ったら1万円,・・・千円札、500,・・1円玉ってデータがあってそれぞれの個数を保持するって感じです。これと同様に球やバーのオブジェクトに必要なデータはなんでしょう?じっくり考えてもらって、それぞれのオブジェクト毎に箇条書きしてみてください。定義というのは、どんなふうにすればいいのでしょうか?定義自体はわかりますが、ここにどんな風に書けばいいのですか?まずはブロック崩しをまったく知らない人に、例えばバーはどんな見た目をしていて、どんなふうに動いて、どんな働きをするのかということを分かりやすい日本語で説明するようなことを書き出してみると良いと思います。softya(ソフト屋)おっと、ISLeさんの言われるように要件定義を先にやった方が良いですね。事で先にバー、球、枠、ブロックの要件定義を箇条書きでお願いします。回答をお待ちしております。Suikaba返信遅れてすいません。同じことが書いてありますが、気にしないでください。softya(ソフト屋)細かくてすいませんが、ISLeさんの知らない人向けに書くと言う点を考慮すると、操作するものが何であるか明確でないこと、各要素のだいたいの大きさと位置が不明確なこと、ブロックが復数であることが書いてないです。あと反射の法則も書いておいて欲しいですね。ここが要件(仕様)を明確にしていくって事で、作り始める前にイメージを固める重要な事ですのでしっかりやりましょう!分かりきったことだと思っても書きだす事が重要です(作る時点で忘れていることもあります)。Suikabaバーは十字キー左右で動かせて、大きさは・・・5分の1くらいですかね?まあ、調整していきます。初期位置は中央下部です。球の入射角と反射角は等しい?初期位置は、バーの少し上あたりで、↑に向かって発射。球は勝手に移動します。ブロックは、softyaさんの言うとおり複数あります。画面上部に存在します。softya(ソフト屋)またまた細かいですが、枠がある場所とブロックが何処にあるのか、何個ぐらい並んでいるのかあたりも明確にしておきましょうか。あと発射方向が真上だと入射角と反射角が等しい場合には垂直にしか動きませんので、まずいと思います。以上を全部、再度まとめて書き出しなおしてみてください。Suikaba枠は窓のクライアント領域の端っこ部分(下を除く)、ブロックは、ひとえにいくつとはいえないけど、複数。球の発射角度は、-30度~30度(くらいでいいかな?)の間で上にランダムに発射。softya(ソフト屋)色々細かく突っ込みますが、これもちゃんと設計するために必要なことですのでご容赦ください。自分で仕様を書いて、ブロック崩しを知らない他人にプログラムを書いてもらうぐらいのつもりで書いてくださいね。>球の発射角度は、-30度~30度(くらいでいいかな?)の間で上にランダムに発射。今まで出てきた仕様上、ゲーム中に球の角度が変わる仕様は存在しないので初期角度は非常に重要です。-30度~30度と書いてしまうと0度を含んでしまうので、これも問題です。>ブロックは、ひとえにいくつとはいえないけど、複数。ブロックは画面上部といいませんでしたっけ?仮定でも良いので大体の個数を決めてください。今のままだと復数だけなので、どう並んでいるかイメージがつかめません。画面を640x480と仮定してもらってかまいません。今まで出てきた内容を最初から一度全部まとめ直してください。Suikabaバーは十字キー左右で動かせて、大きさは・・・枠の5分の1くらい。初期位置は中央下部です。球の入射角と反射角は等しく、初期位置は、バーの少し上あたりで、↑に向かって発射。初期角度は、-45度からー60度、45度から60度で統一しましょうか(このあたりどれくらいがいいのかよく分からないです)。球は勝手に移動します。ブロックは、たて10個、横50個くらいでいいかな。バリエーションはたくさんあると思いますが、全部言ってるとキリがないと思います。画面上部y座標が10から110くらい(でいいですか?)に存在します。枠は、クライアント座標端っこでいいですね。softya(ソフト屋)なにか情報がぽろぽろ抜け落ちたり、適当な感じになってますが面倒になってきました?でも見逃せないのもあるのでもう少しお付き合い下さい。・枠が何処にあるかの情報がぬけ落ちています。・横に50個ならぶと1ブロックは何ドットでしょう?バリエーションとか復数の面を作ることが考えにあるようですが、今は1面だけちゃんと出来れば良いです。それと、適当な値だとイメージが曖昧に考えられいるみたいなので、全ての座標や大きさ、個数を数値かそれを求める計算式のどちらかを書いてください。あとで、間違に気づく場合もありますが、とりあえず決めてください。ゲームの仕様をちゃんと書くのは実に面倒なんですが、プログラムはちゃんと書かないと動いてくれません。この時点どこまで深く考えられてるかで、その後のプログラム設計の出来が変わってきます。Suikabaいえ、一応真剣に書いております・・・^^;すいません、抜かすつもりはないです。枠は、窓に描画される部分の端で、太さは2ドットで。softya(ソフト屋)疲れてきたのなら、ちょっと方針を変えようかと思ってたのでおたづねしただけです。がんばりましょう!ドット=ピクセルが基本ですので統一してもらったらどちらでもかまいませんよ。Suikabaでは、ブロックの列を25に減らして、ひとつの縦は12ドット、幅は25どっとくらいででいいですかね。Suikaba640から25*25をひいて25。