ゲームのクラスの効率的な分け方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Suikaba
記事: 194
登録日時: 9年前

ゲームのクラスの効率的な分け方について

#1

投稿記事 by Suikaba » 9年前

もし、WindowsAPI, C/C++, DirectXなどを勉強した後、
さあ、ゲーム作るかってなったときに、やっぱりどうしよう?ってなってしまうと思うんですよね(俺のことですが^^;
やっぱり、ゲームアルゴリズムってすごく重要だと思うんですよ。僕は一番重要じゃないかって思ってます。
そこで、アルゴリズムを学ぶのに適したサイト、本(今回は金銭面の点でできるだけサイトで)など教えていただけないでしょうか?
いちおう、そこそこのレベルのSTGを作ろうかなぁって思ってます。
買った本は
「シューティングゲームアルゴリズムマニアックス」
「シューティングゲームプログラミング」(?)
あたりです。

これだけで十分だろ!とか思われる方は、そういっていただけるとありがたいです。
自分としては、意味は分かるのですが、いざ自分で実装しようとなるとどうすればいいかわからなくなってしまいました。

毎回しょうもない質問ばかりで申し訳ございません。
できればアドバイスお願いします。
最後に編集したユーザー Suikaba on 2011年1月04日(火) 16:09 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#2

投稿記事 by softya(ソフト屋) » 9年前

それは点と線が結ばれていないというか、プログラムを構築する方法を求めているのにプログラムの細かいテクニックを求めているように思われます。
定番アルゴリズムは、あくまでもスマートに処理するためのものでテクニックに過ぎません。
標準関数をいくら覚えたところでプログラムが成り立たないように、アルゴリズムを組み込む方法理解しないとプログラムは出来ませんよ。
と言う事で視点が違うのでは無いでしょうか?

なので、何処でつまづいているか例を上げれたら上げてもらいたいのですが何か有りますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#3

投稿記事 by Suikaba » 9年前

>>softyaさん

ちょっと質問の仕方間違えましたね・・・
組み込み方は、慣れていくと思うので実際にコード見ていくうちに分かると思うので大丈夫(?)です。
こう、上手にクラス分け、ファイル分割するのが苦手で、プログラム組むか・・・ってなったときに、どこからはじめればいいかわからないんです。
つまずいているところ以前の問題ですので、具体的な例は残念ながら申し上げることができません。
組み始めるときは、ここら辺から書くとやりやすいっていうテクニックみたいなのないでしょうか?
説明へたですいません・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#4

投稿記事 by softya(ソフト屋) » 9年前

それはアルゴリズムでは無くプログラムの設計手法などに属する話ではないでしょうか?

「ソフトウェア設計」
http://www.sysportcore.com/kota/program/s_sekkei.html
こういう話の詳しいヤツってことじゃないですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#5

投稿記事 by Suikaba » 9年前

まさにそれです!!
そういうことです!!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#6

投稿記事 by softya(ソフト屋) » 9年前

で、色々調べてみたのですが良い本やサイトは見つかりませんね。
特にゲーム向け。

こんな本はあるのですが。
「Amazon.co.jp: 正しく学ぶソフトウエア設計 ─オブジェクト指向分析/設計を根本から理解する (日経BPパソコンベストムック): 天野 勝, 平澤 章, 平鍋 健児, 矢沢 久雄, 山本 啓二, 日経ソフトウエア: 本」


んで歴史的に説明しますと、有名な設計手法に構造化設計とオブジェクト指向設計があります。
構造化設計はC言語、オブジェクト指向設計はC++向けの設計手法と言った感じでしょうか。
オブジェクト指向設計は、ベースに構造化設計を内包しているので共通点も多々ありますが、違いはデータ主体か手続き主体かってことです。

両者の概要的には、こんな感じです。
http://www.sysportcore.com/kota/program/index.html

良い本がないので良かったら実際に設計練習してみましょうか?
かんたんゲーム、例えばブロック崩しとか要件分析・クラス設計を実際にやってみましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#7

投稿記事 by Suikaba » 9年前

>>softyaさん
ほんとうですか!?
それはありがたいです。調べてくださったんですか。
こんな僕のためにすいません・・・

ちなみに僕はC++を使おうと思っています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#8

投稿記事 by softya(ソフト屋) » 9年前

ここは設計方法だけなんで、C#でもJavaでもC++でもオブジェクト指向言語なら差はないです。
ただ、あくまで私なりの方法と言うことでこれが全てではないと理解しておいてください。
じゃあ、ブロック崩しを設計するという事でブロック崩しに登場するオブジェクトを書きだしてみてください。
それと各オブジェクトが持つデータも書き出しをお願いします。


いや、その前からだなブロック崩しの概要を書きだして下さい。
そしてブロック崩しを構成する要素を書きだしてください。

参考。
やさしいクラス設計「活きのいいクラス見つけます」
http://www.oki-osk.jp/esc/go/class.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#9

投稿記事 by Suikaba » 9年前

画面に反射する球があって、それをバー(?)でうちかえしてブロックを消していくゲームですよね?
要素って言うのは、スコアとかそういったものですかね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#10

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:画面に反射する球があって、それをバー(?)でうちかえしてブロックを消していくゲームですよね?
要素って言うのは、スコアとかそういったものですかね?
そのとおりです!
要素としては、スコアは必須じゃないです。あっても良いですが。
その他にブロック崩しの構成要素は何がありますか?
(つまり、オブジェクトになりうる要素ですね)
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#11

投稿記事 by Suikaba » 9年前

バーと、球、ブロックは最悪必要ですよね。アイテムとかあってもいいかと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#12

投稿記事 by softya(ソフト屋) » 9年前

あれ?重要なものが抜けてますよ。
これが無いと球がすぐに画面外に出ていってしまいます。

あとアイテムとスコアは今回シンプルするために省きましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#13

投稿記事 by Suikaba » 9年前

なるほど!!枠が必要ですね!!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#14

投稿記事 by softya(ソフト屋) » 9年前

じゃあ、枠とバー、球、ブロックのそれぞれのオブジェクトを構成するために必要なデータを定義してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#15

投稿記事 by Suikaba » 9年前

定義というのは、どんなふうにすればいいのでしょうか?
定義自体はわかりますが、ここにどんな風に書けばいいのですか?

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#16

投稿記事 by Suikaba » 9年前

すいません。ちょっとあさってまで返信できないかもしれません。
申し訳ございません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#17

投稿記事 by softya(ソフト屋) » 9年前

そうですね。
財布と言うオブジェクトが有ったら1万円,・・・千円札、500,・・1円玉ってデータがあってそれぞれの個数を保持するって感じです。
これと同様に球やバーのオブジェクトに必要なデータはなんでしょう?
じっくり考えてもらって、それぞれのオブジェクト毎に箇条書きしてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2648
登録日時: 10年前
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#18

投稿記事 by ISLe » 9年前

Suikaba さんが書きました:定義というのは、どんなふうにすればいいのでしょうか?
定義自体はわかりますが、ここにどんな風に書けばいいのですか?
まずはブロック崩しをまったく知らない人に、例えばバーはどんな見た目をしていて、どんなふうに動いて、どんな働きをするのかということを分かりやすい日本語で説明するようなことを書き出してみると良いと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#19

投稿記事 by softya(ソフト屋) » 9年前

おっと、ISLeさんの言われるように要件定義を先にやった方が良いですね。
って事で先にバー、球、枠、ブロックの要件定義を箇条書きでお願いします。
回答をお待ちしております。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#20

投稿記事 by Suikaba » 9年前

返信遅れてすいません。

バー・・・左右に移動(移動制限が枠まで)、球を跳ね返す、細い横長の壁(?)
球・・・障害物に当たると反射する(あたったのがブロックならそれを消去、) 枠下から出るとアウト
枠・・・移動しない、球を跳ね返すが、↓の枠はこれをしない
ブロック・・・移動しない、球が当たると球を跳ね返して消える、

同じことが書いてありますが、気にしないでください。
こんな感じでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#21

投稿記事 by softya(ソフト屋) » 9年前

細かくてすいませんが、ISLeさんの知らない人向けに書くと言う点を考慮すると、操作するものが何であるか明確でないこと、各要素のだいたいの大きさと位置が不明確なこと、ブロックが復数であることが書いてないです。あと反射の法則も書いておいて欲しいですね。

ここが要件(仕様)を明確にしていくって事で、作り始める前にイメージを固める重要な事ですのでしっかりやりましょう!
分かりきったことだと思っても書きだす事が重要です(作る時点で忘れていることもあります)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#22

投稿記事 by Suikaba » 9年前

バーは十字キー左右で動かせて、大きさは・・・5分の1くらいですかね?まあ、調整していきます。初期位置は中央下部です。
球の入射角と反射角は等しい?初期位置は、バーの少し上あたりで、↑に向かって発射。
球は勝手に移動します。
ブロックは、softyaさんの言うとおり複数あります。
そして、画面上部に存在します。

まだあるような気がしますが、こんなもんでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#23

投稿記事 by softya(ソフト屋) » 9年前

またまた細かいですが、枠がある場所とブロックが何処にあるのか、何個ぐらい並んでいるのかあたりも明確にしておきましょうか。
あと発射方向が真上だと入射角と反射角が等しい場合には垂直にしか動きませんので、まずいと思います。
以上を全部、再度まとめて書き出しなおしてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#24

投稿記事 by Suikaba » 9年前

枠は窓のクライアント領域の端っこ部分(下を除く)、
ブロックは、ひとえにいくつとはいえないけど、複数。
球の発射角度は、-30度~30度(くらいでいいかな?)の間で上にランダムに発射。
ブロックは画面上部といいませんでしたっけ?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームアルゴリズム学習にあたって

#25

投稿記事 by softya(ソフト屋) » 9年前

色々細かく突っ込みますが、これもちゃんと設計するために必要なことですのでご容赦ください。
自分で仕様を書いて、ブロック崩しを知らない他人にプログラムを書いてもらうぐらいのつもりで書いてくださいね。

>球の発射角度は、-30度~30度(くらいでいいかな?)の間で上にランダムに発射。

今まで出てきた仕様上、ゲーム中に球の角度が変わる仕様は存在しないので初期角度は非常に重要です。
-30度~30度と書いてしまうと0度を含んでしまうので、これも問題です。

>ブロックは、ひとえにいくつとはいえないけど、複数。ブロックは画面上部といいませんでしたっけ?

仮定でも良いので大体の個数を決めてください。
今のままだと復数だけなので、どう並んでいるかイメージがつかめません。
画面を640x480と仮定してもらってかまいません。

で、今まで出てきた内容を最初から一度全部まとめ直してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームアルゴリズム学習にあたって

#26

投稿記事 by Suikaba » 9年前

バーは十字キー左右で動かせて、大きさは・・・枠の5分の1くらい。初期位置は中央下部です。
球の入射角と反射角は等しく、初期位置は、バーの少し上あたりで、↑に向かって発射。
初期角度は、-45度からー60度、45度から60度で統一しましょうか(このあたりどれくらいがいいのかよく分からないです)。
球は勝手に移動します。
ブロックは、たて10個、横50個くらいでいいかな。合計500個です。
バリエーションはたくさんあると思いますが、全部言ってるとキリがないと思います。
そして、画面上部y座標が10から110くらい(でいいですか?)に存在します。
枠は、クライアント座標端っこでいいですね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#27

投稿記事 by softya(ソフト屋) » 9年前

なにか情報がぽろぽろ抜け落ちたり、適当な感じになってますが面倒になってきました?
でも見逃せないのもあるのでもう少しお付き合い下さい。
気になるのが、
・枠が何処にあるかの情報がぬけ落ちています。
・横に50個ならぶと1ブロックは何ドットでしょう?
バリエーションとか復数の面を作ることが考えにあるようですが、今は1面だけちゃんと出来れば良いです。
それと、適当な値だとイメージが曖昧に考えられいるみたいなので、全ての座標や大きさ、個数を数値かそれを求める計算式のどちらかを書いてください。
あとで、間違に気づく場合もありますが、とりあえず決めてください。

ゲームの仕様をちゃんと書くのは実に面倒なんですが、プログラムはちゃんと書かないと動いてくれません。
この時点どこまで深く考えられてるかで、その後のプログラム設計の出来が変わってきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#28

投稿記事 by Suikaba » 9年前

いえ、一応真剣に書いております・・・^^;
すいません、抜かすつもりはないです。申し訳ございません。
枠は、窓に描画される部分の端で、太さは2ドットで。下にはありません。
あと、ドットの大きさはピクセルでいいですか?単位はドットのほうがいいですかね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#29

投稿記事 by softya(ソフト屋) » 9年前

疲れてきたのなら、ちょっと方針を変えようかと思ってたのでおたづねしただけです。
もう少しですのでがんばりましょう!
ドット=ピクセルが基本ですので統一してもらったらどちらでもかまいませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#30

投稿記事 by Suikaba » 9年前

では、ブロックの列を25に減らして、ひとつの縦は12ドット、幅は25どっとくらいででいいですかね。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#31

投稿記事 by Suikaba » 9年前

640から25*25をひいて25。さらに枠の6をひいて19。2で割って9.5。
ブロックの塊の左上はx座標は9.5で、y座標は10でいいですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#32

投稿記事 by softya(ソフト屋) » 9年前

>では、ブロックの列を25に減らして、ひとつの縦は12ドット、幅は25どっとくらいででいいですかね。
それだとブロック間に空間がない気がするんですが?

それを再検討した上で、整理するためにもう一度全部の項目と座標も含めて書いてみてください。
それが出来たら、各オブジェクトを定義するのに必要なデータ項目を説明付きで書きだしてください。

たとえば、球なら次の様な感じです。
[球]
 座標。この後に細かい説明。できるだけ詳しく。
  : 他にもありますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#33

投稿記事 by Suikaba » 9年前

ブロック間に空間要ります?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#34

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:ブロック間に空間要ります?
ブロックが1つ1つ色分けされているとか、ブロックに枠があるならブロックに分かれているのが識別できるのでOKです。
それも書き添えておいてください。

【追記】
書き忘れましたが、各オブジェクトのデータ定義として定数と思われる色とかの情報も書いておいてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#35

投稿記事 by Suikaba » 9年前

返信遅れてすいません。いいわけですが、いろいろ家が忙しくて、気をつけます。
ではいきます。

画面・・・640*480
枠 ・・・画面端に存在。下にはなし。太さは3ピクセル(ドット)。移動はしない。
球・・・ 初期値はバーの座標より10ピクセル上。初期角度はー45度からー60度、45度から60度の間に開始時にランダムで設定。1フレ       ームにどれだけ移動するかは調整。枠、ブロック、バーにあたると反射する。このとき、入射角と反射角は等しくする。またブロックに       あたった場合、そのブロックを消す。
バー・・・←→十字キーで移動。キーのとおり左右にしか移動しない。大きさは、たて12ピクセル、横80ピクセル。たまにあたった場合、反射       させる。これも1フレームにいくら移動するかは、調整。
ブロック・・・たて12ピクセル、横25ピクセルで1つのブロック。球があたると消滅。移動しない。10段、25列で1つのブロックの塊とする。隙間        はなし。この塊の左上の座標を(9.5,10.0)に設定。1つ1つに枠があり、識別できるようにする。

これでいいですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#36

投稿記事 by softya(ソフト屋) » 9年前

慌てなくて良いですよ。じっくり取り組んでください。

申し訳ないですが、足らない情報を足して書き直しお願いします。
・球の大きさがありません。
・バー。位置に関する情報がありません。前にあった移動範囲の情報がなくなっています。
ケアレスミスだと思うのですが、前には書かれていたことが新しいものには無くなっている事が多いみたいです。
仕様から抜け落ちるのは、設計として問題が多いので気をつけてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#37

投稿記事 by Suikaba » 9年前

ちょっと忘れがちなので、次からは紙にでもまとめておこうと思います。

画面・・・640*480
枠 ・・・画面端に存在。下にはなし。太さは3ピクセル(ドット)。移動はしない。
球・・・ 初期値はバーの座標より10ピクセル上。初期角度はー45度からー60度、45度から60度の間に開始時にランダムで設定。1フレ       ームにどれだけ移動するかは調整。枠、ブロック、バーにあたると反射する。このとき、入射角と反射角は等しくする。またブロックに       あたった場合、そのブロックを消す。大きさは半径6ピクセル。
バー・・・←→十字キーで移動。キーのとおり左右にしか移動しない。大きさは、たて12ピクセル、横80ピクセル。たまにあたった場合、反射       させる。これも1フレームにいくら移動するかは、調整。初期位置は、左上の座標でいくと、(280, 408)の位置に存在している。
ブロック・・・たて12ピクセル、横25ピクセルで1つのブロック。球があたると消滅。移動しない。10段、25列で1つのブロックの塊とする。隙間        はなし。この塊の左上の座標を(9.5,10.0)に設定。1つ1つに枠があり、識別できるようにする。

補足させていただきました。
コピペで申し訳ありませんが、ご了承ください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#38

投稿記事 by softya(ソフト屋) » 9年前

コピペでも良いですよ。
設計情報が消えることのほうが問題ですから。

じゃあ、改めて各オブジェクトを定義するのに必要なデータ項目を説明付きで書きだしてください。
各オブジェクトのデータ定義として定数と思われる色とかの情報も書いておいてください。

たとえば、球なら次の様な感じです。
[球]
 座標。この後に細かい説明。できるだけ詳しく。
  : 他にもありますよ。

こんな感じで、変数と定数を書きだしてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#39

投稿記事 by Suikaba » 9年前

こんなことをいうのは恥ずかしいですが、
どんなふうにすればいいかわからないです。
変数、定数はx, yみたいに書くのか、座標を決める変数、定数と書くのか、どうすればいいでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#40

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:こんなことをいうのは恥ずかしいですが、
どんなふうにすればいいかわからないです。
変数、定数はx, yみたいに書くのか、座標を決める変数、定数と書くのか、どうすればいいでしょうか?
実のところ自由に書いてもらって良いのですが、それだと難しいというのなら。
とりあえず、全部変数と仮定して書いてみましょうか。

[球]
 座標x,y。この後に細かい説明。できるだけ詳しく。
 球の半径。球の大きさを表します。当たり判定と描画で使用。座標との関係も書いてください。
  : 他にもありますよ。

といった感じでどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#41

投稿記事 by Suikaba » 9年前

[球]
中心の座標を(float x, float y)とし、初期位置を(320.0f,418.0f)にします。球の半径は6ピクセルです。
座標との関係って言うのがよくわかりません。どういうことですか?
質問ばっかりで申し訳ございません。これから、がんばって理解しようと努力しますので、どうかよろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#42

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:[球]
中心の座標を(float x, float y)とし、初期位置を(320.0f,418.0f)にします。球の半径は6ピクセルです。
座標との関係って言うのがよくわかりません。どういうことですか?
質問ばっかりで申し訳ございません。これから、がんばって理解しようと努力しますので、どうかよろしくお願いします。
すでに書かれていますが、中心の座標と明確に書くことが大事だったんですよ。
ただの座標と書けばNGでした。なのでOKです。
あと球の要件定義に比べると変数が足りませんので考えてみてください。
それと他のオブジェクト項目も書いてくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#43

投稿記事 by Suikaba » 9年前

了解です。
足りないといってたのは半径部分の変数のことですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#44

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:了解です。
足りないといってたのは半径部分の変数のことですか?
一番重大な要素です。
自分で書いた要件定義と変数の関係を見なおしてみてください。
あと上にも書きましたが他のオブジェクトもお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#45

投稿記事 by Suikaba » 9年前

分かりました。

[枠]
初期位置は画面左端上(0,0)から、(0,480)まで、さらに右端上(637,0)から、(637,480)までとします。あと、画面上端の枠は、(3,0)から、(637,0)まで。移動しないので、移動用変数は用意しない。
[球]
中心の座標(float ex, float ey)とすると、初期位置は(320.0f, 418.0f)とする。球の半径をfloat radiusと宣言し、6ピクセルと設定。
発射角度の変数もいりますね(たぶん)。これはint angleと宣言し、rand()関数で-45~-60,45~60度に設定します。移動距離を計算する変数も必要だと考えてfloat mx,myと宣言しておきます。
[バー]
これは各頂点の座標を左上から(float ml, float mt),(float ml, float mb),(float mr, float mt),(float mr, float mb)とします。
初期位置は、(280, 408),(280, 420),(360, 408),(360, 420)に設定。
キー入力がされているかを確認するための変数?も用意します(ちょっとややこしいのであとで)。
[ブロック]
これも移動しませんので、移動用の変数はなし。初期位置ですが、左上から(9.5f,10.0f),(21.5f,10.0f),(33.5f, 10.0f)....
という感じで並べていきます。配列を用いるのがいいかと思います。

球との当たり判定処理ですが、円形の判定処理がよく分からないです。
できれば、こちらも教えていただけると幸いです。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#46

投稿記事 by Suikaba » 9年前

それか、球の当たり判定処理を四角形だけで処理するというのはどうでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#47

投稿記事 by softya(ソフト屋) » 9年前

Suikaba さんが書きました:分かりました。

[枠]
初期位置は画面左端上(0,0)から、(0,480)まで、さらに右端上(637,0)から、(637,480)までとします。あと、画面上端の枠は、(3,0)から、(637,0)まで。移動しないので、移動用変数は用意しない。
[球]
中心の座標(float ex, float ey)とすると、初期位置は(320.0f, 418.0f)とする。球の半径をfloat radiusと宣言し、6ピクセルと設定。
発射角度の変数もいりますね(たぶん)。これはint angleと宣言し、rand()関数で-45~-60,45~60度に設定します。移動距離を計算する変数も必要だと考えてfloat mx,myと宣言しておきます。
[バー]
これは各頂点の座標を左上から(float ml, float mt),(float ml, float mb),(float mr, float mt),(float mr, float mb)とします。
初期位置は、(280, 408),(280, 420),(360, 408),(360, 420)に設定。
キー入力がされているかを確認するための変数?も用意します(ちょっとややこしいのであとで)。
[ブロック]
これも移動しませんので、移動用の変数はなし。初期位置ですが、左上から(9.5f,10.0f),(21.5f,10.0f),(33.5f, 10.0f)....
という感じで並べていきます。配列を用いるのがいいかと思います。

球との当たり判定処理ですが、円形の判定処理がよく分からないです。
できれば、こちらも教えていただけると幸いです。

それか、球の当たり判定処理を四角形だけで処理するというのはどうでしょうか?
幾つか問題がありますので列挙します。
・移動するバーは左上座標とサイズにした方が後々楽ですね。理由は座標を書き換えるだけで移動できます。4点だと4点とも書き換えないと行けません。
・当たり判定の都合上、全部の座標の持ち方を統一した方が良いのでバー、枠、ブロックを統一します。
・ブロックは生存・非生存の管理が必要です。
・これは提案ですが、ブロック全体をオブジェクトではなく、ブロック1つ1つをオブジェクトにしませんか?
・球が移動するときのパラメータはそれだけで足りますか?
・表示するときの色とかも指定してください。
・あと書き方の問題ですが、項目がよくわかるように一行一項目にしてください。座標x,yは一行でOKです。
・初期位置は表示位置と別に定義してください。
以上です。

当たり判定は四角同士にしても良いですよ。
その場合は球も四角にしてください。そうしないとプログラムするときに頭が混乱しますので。
球じゃなくてキューブって事で。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#48

投稿記事 by Suikaba » 9年前

了解です。

[枠]
初期位置は画面左端上(0,0)から、(0,480)まで、さらに右端上(637,0)から、(637,480)までとします。
あと、画面上端の枠は、(3,0)から、(637,0)まで。
移動しないので、移動用変数は用意しない。
[キューブ]
左上の座標(float ex, float ey)とする。
初期位置は(314.0f, 412.0f)とする。
色はシルバーで。
縦横ともに12ピクセル。
発射角度の変数もいりますね(たぶん)。これはint angleと宣言し、rand()関数で-45~-60,45~60度に設定します。
移動距離を計算する変数も必要だと考えてfloat mx,myと宣言しておきます。
[バー]
これは座標を左上(float ml, float mt)と宣言。
色はこれもシルバーで。
初期位置は、(280, 408)。
キー入力がされているかを確認するための変数?も用意します(ちょっとややこしいのであとで)。
[ブロック]
これも移動しませんので、移動用の変数はなし。
色は水色で。
初期位置ですが、左上から(9.5f,10.0f),(21.5f,10.0f),(33.5f, 10.0f)....
という感じで並べていきます。配列を用いるのがいいかと思います。
これは1つ1つをオブジェクトにしたつもりですが、違いますか?

キューブの変数がいまいち思いつきません。

まめっち

Re: ゲームのクラスの効率的な分け方について

#49

投稿記事 by まめっち » 9年前

今更ですいませんが、

設計も大事なんですが、
どんなにうまく設計してもおそらく納得のいかないことができたり
強引に実装したりすることになる部分があると思います。

そこの修正において結局自分で調べるなりすると思うので
とにかく手をうごかすことの方が大事というか結局は勉強になるのでは、と思いました。

ちなみに私は某ゲーム会社勤務ですが
新人さんにがよく読んでいる本を一応挙げておきます。

ゲームプログラマになる前に覚えておきたい技術

ゲームコーディング・コンプリート
---------------------------------------------
以下は少し難しいかもしれませんが
ゲームエンジン・アーキテクチャ

Effective C++

何か参考になれば幸いです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#50

投稿記事 by softya(ソフト屋) » 9年前

まめっちさんの紹介している本は良い本なので、ぜひ読んで欲しいですね。

ただ、これはこれで意味の有ることだと私は思っておりますので、Suikabaさんに異論がなければ続けたいと思います。
今さら気づかましたが、立方体ではないのでキューブじゃなくスクエアですね(^^;
まぁ、キューブということ続けます。

気になる点は、まだ統一が不十分ですね。
クラスの継承や当たり判定の処理の一元化を考えると出来るだけ同じ変数を持つように考えましょう。各オブジェクトに座標、サイズ、色の変数で統一するのがお勧めです。
で、書き忘れましたが枠もオブジェクト3つで構成したほうが良いと思います。
それに関連してブロックを配列にすると言う話が書いてありますが、オブジェクトのインスタンスを配列にするのが私は良いと思います。
キューブで不足しているのは、移動時の速度です。要件定義では書いてあったはずですがなくなっています。もちろんバーにも必要です。あと速度と角度にするかベクトルにするかはお好みで。
「移動距離を計算する変数」がいるかどうかって話はローカル変数で済む物なら不要としましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#51

投稿記事 by Suikaba » 9年前

>>まめっちさん
ありがとうございます。参考にさせていただきます。
ゲームプログラマーになるまえに~ってやつは気になってたので今度見てみます。

統一する変数
(float ml, float mt); //左上座標
float width, float height; //ブロック、バーなどのサイズ
色の変数ってどうづればいいですかね?
あと、今回はベクトルでやって生きたいと思います。
[枠]
枠はこれで3つにしたつもりでした。説明下手ですいません。
初期位置は画面左端上(0,0)から、(0,480)まで、さらに右端上(637,0)から、(637,480)までとします。
あと、画面上端の枠は、(3,0)から、(637,0)まで。
移動しないので、移動用変数は用意しない。
[スクエア]
左上の座標(float ml, float mt)とする。
初期位置は(314.0f, 412.0f)とする。
色はシルバーで。
縦横ともに12ピクセル。
発射角度の変数もいりますね(たぶん)。これはint angleと宣言し、rand()関数で-45~-60,45~60度に設定します。
移動速度は、1フレームに4ピクセル進むようにします。
[バー]
これは座標を左上(float ml, float mt)と宣言。
色はこれもシルバーで。
初期位置は、(280, 408)。
キー入力がされているかを確認するための変数?も用意します(ちょっとややこしいのであとで)。
キー入力がされている間、バーは押された方向に1フレーム3ピクセルで移動するようにします。
[ブロック]
これも移動しませんので、移動用の変数はなし。
色は水色で。
初期位置ですが、左上から(9.5f,10.0f),(21.5f,10.0f),(33.5f, 10.0f)....
という感じで並べていきます。配列を用いるのがいいかと思います。
これは1つ1つをオブジェクトにしたつもりですが、違いますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#52

投稿記事 by softya(ソフト屋) » 9年前

まず、統一する変数と初期値を各要素に書いといてくださいね。
枠・スクエア・バー・ブロックは全て統一できると思います。

例を書いておきます。
[枠] 3つのインスタンスを配列で生成。
 float ml,mt; //左上座標
 float width,height; //ブロック、バーなどのサイズ
 int color;//色
 初期化位置 (0,0)、(637,0)、(3,0)
 初期化サイズ (3,480)、(3,480)、(640-6,3)

>色の変数ってどうづればいいですかね?
int color;で良いですね。DXライブラリのGetColor()の戻り値です。色はとりあえず白とかシルバーと書いておいてください。

>あと、今回はベクトルでやって生きたいと思います。
スクエアにベクトルが抜けていますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#53

投稿記事 by Suikaba » 9年前

DirectXでやってみようかなと思いましたが、DXライブラリのほうがいいですかね?

[枠] 3つのインスタンスを配列で生成。
 float ml,mt; //左上座標
 float width,height; //ブロック、バーなどのサイズ
 int color;//色
 初期化位置 (0,0)、(637,0)、(3,0)
 初期化サイズ (3,480)、(3,480)、(640-6,3)
 色はシルバーで。
 移動しなし。
[スクエア]
float ml,mt; //左上座標
float width,height; //ブロック、バーなどのサイズ
 int color; //色
float angle; //初期角度をrand()関数で-45~-60,45~60度に設定
ベクトルは、(float x,y,z)でいいんでしょか?
初期化位置(314,412)
初期サイズ(12,12)
 移動速度は、1フレームに4ピクセル進むようにします。
 色はシルバー。
[バー]
float ml,mt; //左上座標
float width,height; //ブロック、バーなどのサイズ
int color; //色
 色はこれもシルバーで。
 初期位置は、(280, 408)
 初期サイズ(12,80)
 キー入力がされているかを確認するための変数?も用意します(ちょっとややこしいのであとで)。
 キー入力がされている間、バーは押された方向に1フレーム3ピクセルで移動するようにします。
[ブロック] 250個のインスタンスを配列で生成。
 float ml,mt; //初期位置
 float width,height; //ブロック、バーなどのサイズ
int color; //色
 色は水色で。
 初期位置 左上から(9.5,10.0),(21.5,10.0),(33.5, 10.0)....
初期サイズ(12,25)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#54

投稿記事 by softya(ソフト屋) » 9年前

>DirectXでやってみようかなと思いましたが、DXライブラリのほうがいいですかね?

難しいことをしたいなら止めませんが、私はDiectX5辺りで止まっている上にほとんど忘れているので余りお助けできないと思います。
と言うかDirectXで作成経験はあるのでしょうか?
もし新しいことを2つも始めるとしたら混乱に拍車がかかるので避けたほうが良いと思いますが。

で内容ですが
・2Dゲームのブロック崩しでスクエアのベクトルに三次元めの方向はないですからZ方向のベクトルは不要です。
これを直せばほぼ終了なので、つぎはクラス設計してみましょうか。
変数はほぼ出来ているので、各オブジェクトのメンバ関数の定義を字で書いてみましょうか。
引数、コンストラクタもお忘れなく。

例えば、
[ 枠]
 ・コンストラクタ(番号) 0,1,2の番号で枠の座標とサイズが決まります。
  :
さて後必要なものは何でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#55

投稿記事 by Suikaba » 9年前

[枠]
コンストラクタ(番号)・・・0,1,2の番号で枠の座標とサイズが決まります。
デストラクタ
描画関数・・・描画を担当。
・・・

見たいな漢字で書けばいいんですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#56

投稿記事 by softya(ソフト屋) » 9年前

英語でも、どちらでも可です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#57

投稿記事 by Suikaba » 9年前

変換ミスです。すいません。

こんな感じでかけばいいのですか?でした。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#58

投稿記事 by Suikaba » 9年前

こんなこと聞くのもなんですが、
ゲームプログラマになる前に~っていうのは、1人で開発するときも役に立ちますか?

ある人は、まだなくてもいいんじゃない?といっていたので、ちょっと気になりました。

アバター
Ciel
記事: 252
登録日時: 10年前

Re: ゲームのクラスの効率的な分け方について

#59

投稿記事 by Ciel » 9年前

その書籍は立ち読みしましたが、C++の知識がある程度ないとちょっと難しいかもしれませんね。
別に一人で開発する時でも十分役立つと思いますが。
まあ内容を理解できればの話ですがね。
oui C'est la Vie♪

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#60

投稿記事 by softya(ソフト屋) » 9年前

>こんな感じでかけばいいのですか?でした。

あぁ、なるほど。
それで良いので、どんどん書いてみてください。
あまり私の意見を気にしなくても、これなら分かりやすいと思ったら突っ走っていいですよ。

>ゲームプログラマになる前に~っていうのは、1人で開発するときも役に立ちますか?

多人数で開発するための知識では無かったはずですが。
「ゲームプログラマになる前に覚えておきたい技術|セガの新人教育カリキュラムから生まれたゲームプログラミング解説書!」
http://www.shuwasystem.co.jp/gpro-sp/
目次が見れます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2648
登録日時: 10年前
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#61

投稿記事 by ISLe » 9年前

Suikaba さんが書きました:ゲームプログラマになる前に~っていうのは、1人で開発するときも役に立ちますか?
『ゲームプログラマになる前に~』ではないですが、チーム開発手法は個人での開発にもおおいに役立つと思います。
たとえばバージョン管理ツールを導入すると変更箇所があらわになるので、さいしょから清書のつもりでコードを書こうという意識が生まれ設計に十分な時間をかけるようになりました。
変更履歴を一覧できるので設計や実装での無駄な回り道を見直して改善に役立てることができますし寝ぼけてうっかり消してしまったコードやデータを取り戻すのも簡単です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#62

投稿記事 by softya(ソフト屋) » 9年前

バージョン管理ツールは一度経験すると戻れませんね。
個人でも、Windowsのバージョン管理ツールであるtortoiseSVNを愛用しています。

Subversionサーバーを用意せずローカルリポジトリですけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#63

投稿記事 by Suikaba » 9年前

まあ、とりあえず買ってみました。お2人ともありがとうございます。

[枠]
コンストラクタ(番号) 0,1,2の番号で座標とサイズが決まります。
デストラクタ 枠の消去?
描画関数 ふつうに描画する関数。
[スクエア]
コンストラクタ 初期座標、サイズ、初期角度が決まる。
デストラクタ スクエアの消去?
描画関数 描画する。
移動関数 移動距離を計算し、次の位置を決める。
[ブロック]
コンストラクタ 250個生成し、それぞれに初期座標、サイズを決める。
デストラクタ ブロックの消去?
描画関数 描画する。
[バー]
コンストラクタ 初期位置、サイズが決まる。
デストラクタ 枠の消去?
描画関数 描画。
移動関数 移動距離計算。つぎの位置を決める。
キー入力確認関数 キー入力を確認する。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#64

投稿記事 by softya(ソフト屋) » 9年前

特別なデストラクタは不要でしょうね。画像を読み込むなる必要ですが。
あと、ブロックを消去するメンバ関数も必要そうです。あるいは、mainでブロックの生存を管理する方法を考えるか。
スクエアの移動で当たり判定が発生するわけですが、ブロックが消えることがあるわけでそれを外部に伝えなければいけませんよ。次のことが考えられます。
スクエアの移動で起こりうること。ブロックの消去。画面外でゲームオーバー。これらの内部完結しない情報をスクエア・オブジェクトが外部に伝える必要があります。
それに関連して当たり判定をするためのオブジェクトとその為のメンバ関数が各オブジェクトに必要ですね。各オブジェクトは独立して座標とサイズを持っているので受け渡す工夫も考えなくてはいけません。

[枠]
コンストラクタ(番号) 0,1,2の番号で座標とサイズが決まります。
デストラクタ 枠の消去? ← 不要。
描画関数 ふつうに描画する関数。
[スクエア]
コンストラクタ 初期座標、サイズ、初期角度が決まる。 ← ベクトル管理では無かったのでしょうか?あと初期座標は、定数だと思うので座標が決まるで良いかと。
デストラクタ スクエアの消去? ← 不要。
描画関数 描画する。
移動関数 移動距離を計算し、次の位置を決める。
[ブロック]
コンストラクタ 250個生成し、それぞれに初期座標、サイズを決める。 ← ここで250個生成するのではなくmain側で生成してくだい。枠と同様です。
デストラクタ ブロックの消去? ← 不要。
描画関数 描画する。
[バー]
コンストラクタ 初期位置、サイズが決まる。
デストラクタ 枠の消去? ← 不要。
描画関数 描画。
移動関数 移動距離計算。つぎの位置を決める。
キー入力確認関数 キー入力を確認する。  ← キーをここで確認するのなら移動関数の中でも良い気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#65

投稿記事 by Suikaba » 9年前

申し訳ありません。ここまで付き合ってもらって言うのもなんですが、受験の関係であまりできなくなると思うので、
ここで切らせてもらってもよいでしょうか。
時間的にも厳しくなってきたのです。
勝手にこんなことを書くのも失礼だとは思いますが、ここまででも十分にいろいろなことを学ばせていただきました。
時間があるときは、今回学んだことを生かしながらゲームを作ろうとおもいますので、
なにとぞ、ご理解くださるようお願い申し上げます。
ふざけてんのか!?とお思いになられるのも分かりますが、どうかお許しください。

ここまでありがとうございました。
また、お世話になることもあると思いますがよろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#66

投稿記事 by softya(ソフト屋) » 9年前

もちろん、将来を決める受験最優先でやってください。
時間があるときに続けてもらう(気晴らしに)でも構いませんよ(日記とかで続きとか)。
Suikabaさんにお任せします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

イスシ

Re: ゲームのクラスの効率的な分け方について

#67

投稿記事 by イスシ » 9年前

僕も現在、C言語の関数覚えて、DXライブラリの使い方を覚えて・・・ というところでしたので、すごく参考になりました。大変ありがとうございます。
何から手を付けていいのかなかなか分からないですからね。

最初に作ってみようと思ってるのはwizardry風の3DダンジョンRPGです。
初心者にはかなりハードですかね^^;
ワイヤーフレームのダンジョンをどう表現したらいいかに頭を悩ませています。

「ゲームプログラマになる前に覚えておきたい技術|セガの新人教育カリキュラムから生まれたゲームプログラミング解説書!」
この本、本屋さんで見つけて「いいな」と思ってました。買ってみることにします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#68

投稿記事 by softya(ソフト屋) » 9年前

イスシ さんが書きました:僕も現在、C言語の関数覚えて、DXライブラリの使い方を覚えて・・・ というところでしたので、すごく参考になりました。大変ありがとうございます。
何から手を付けていいのかなかなか分からないですからね。

最初に作ってみようと思ってるのはwizardry風の3DダンジョンRPGです。
初心者にはかなりハードですかね^^;
ワイヤーフレームのダンジョンをどう表現したらいいかに頭を悩ませています。

「ゲームプログラマになる前に覚えておきたい技術|セガの新人教育カリキュラムから生まれたゲームプログラミング解説書!」
この本、本屋さんで見つけて「いいな」と思ってました。買ってみることにします。
ワイヤーフレームなら2Dで表現できますので、3Dよりも難易度が低いですよ。
まぁ、ゲーム全体の設計の問題の方が大きいので、そちらの方が大変ですが。

あと、ドラクエ系RPGの講座を書いているので良かったら参考にしてください。
http://dixq.net/forum/blog.php?u=114&sd=a

あと「ゲームプログラマになる前に覚えておきたい技術」は、C言語ではなくC++の知識を結構必要とするので、もしC++の文法がまだなら後にしたほうが良いかも知れません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

イスシ

Re: ゲームのクラスの効率的な分け方について

#69

投稿記事 by イスシ » 9年前

妄想が先に進んでしまったタイプで恥ずかしいのですが、実は、ほかの階層との結びつきが強い、というゲームにしようと思っています。
そして、ローグライクゲーム(風来のシレンやトルネコ)のように敵は移動しているといったイメージです。

具体的にいいますと、横断歩道の上にいる状態から下階層を見下ろし、下のほうにいる敵を目視でき、その敵を飛び道具等で攻撃したりできる、という感じです・・・
でも、まずは2Dでシッカリ表現できるように頑張ってみます!

そういえば、C言語で満足してました!C++もやっておかないといけませんでしたね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: ゲームのクラスの効率的な分け方について

#70

投稿記事 by softya(ソフト屋) » 9年前

イシスさん。質問が続く様でしたら、別の質問に分けてくださいね。
ここは、Suikabaさんの質問トピックですので。
妄想が先に進んでしまったタイプで恥ずかしいのですが、実は、ほかの階層との結びつきが強い、というゲームにしようと思っています。
そして、ローグライクゲーム(風来のシレンやトルネコ)のように敵は移動しているといったイメージです。

具体的にいいますと、横断歩道の上にいる状態から下階層を見下ろし、下のほうにいる敵を目視でき、その敵を飛び道具等で攻撃したりできる、という感じです・・・
でも、まずは2Dでシッカリ表現できるように頑張ってみます!
難易度は高いですが、DXライブラリでも作れそうです。
ただ、敵をポリゴンで表現しないと階下の敵は絵的に表現できないかも知れません(板ポリでもある程度は可能)。
※ 上にも書きましたが、続けるなら別トピックでお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

イスシ

Re: ゲームのクラスの効率的な分け方について

#71

投稿記事 by イスシ » 9年前

続けてしまってすみませんでした。

ええと、今度はC++等の知識を備えて、取り組んでみて、行き詰ったらまた来てみようと思います。
RPG講座のページ、登録しました。ありがとうございました!
softya(ソフト屋) さんが書きました:これ以上、つづくと何なので私の権限で追記させていただきました。
別にC++の知識はなくてもウィザードリィタイプのゲームを作ることは可能です。
初期の本家ウィザードリィなんてアセンブラでしょうから。
C++を使いこなすことを優先するか、C言語でゲームを作ることで得られる知識を優先するかよく考えてみてください。

Suikaba
記事: 194
登録日時: 9年前

Re: ゲームのクラスの効率的な分け方について

#72

投稿記事 by Suikaba » 9年前

おっと・・・解決にするの忘れてましたね。

閉鎖

“C言語何でも質問掲示板” へ戻る