ページ 11

ゲームプログラミング 関数分割

Posted: 2013年7月27日(土) 23:21
by safari
今日連続の質問になってしまいますが
無礼を承知で質問させていただきます
私、C言語初心者でございます

さきほど、こちらのサイトの龍神録の館を少しだけ読ませていただいたのですが
ファイルを分割し、様々な機能を散り散りに置いて、プログラム全体を把握しやすくするとありました
こちらのサイトで使われている変数はすべてグローバル変数のようでしたが
これをローカル変数に置き換えようとしたところで疑問に思ったことがあります

ゲームの描画処理をすべて一つの関数に任せようと思ったとき、
当然、敵やプレイヤーキャラやステージの情報をこの描画関数に渡す必要があるのですが
その描画関数に情報を渡す仕事をする関数を
一々、それぞれの計算用関数と別途に用意しなくてはいけないのでしょうか?

例えば、
プレイヤーキャラでいえば「プレイヤーキャラの計算用関数」と「プレイヤーキャラの情報を描画関数に渡す関数」
敵キャラでいえば「敵キャラの計算用関数」と「敵キャラの情報を描画関数に渡す関数」
ステージでいえば「ステージの計算用関数」と「ステージの情報を描画関数に渡す関数」
このようにわざわざ全ての種類のオブジェクトに描画関数に情報を渡す関数を作ってやる必要があるのでしょうか
それともなにか思い違いをしていますかね

よろしければご回答よろしくお願いいたします

Re: ゲームプログラミング 関数分割

Posted: 2013年7月27日(土) 23:28
by Dixq (管理人)
ゲームプログラムの設計については
http://dixq.net/g/index.html#GameDesign
ゲームプログラム設計
をご覧ください。

> ゲームの描画処理をすべて一つの関数に任せようと思ったとき、

ゲームの描画処理を全て一つの関数に任せようとするのは、
オブジェクト指向的には間違いです。
龍神録の館では共通で使う全ての変数をグローバル変数にすることで設計する手法を紹介していますが、
本来変数は隠蔽化すべきで、オブジェクト指向的に考えるなら、
敵・プレイヤー・背景などごとに変数を持ち、計算部・描画部を持って管理すべきでしょう。

Re: ゲームプログラミング 関数分割

Posted: 2013年7月27日(土) 23:56
by ソフト屋 外出中
C言語の組み方としても、externに頼る設計は良
い設計とは言えません。
モジュール化で調べて貰うと分かると思いますが、最大でファイルスコープに納める設計をされた方がよいと思います。

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 00:27
by safari
プログラミングの館、読ませていただきました
とても分かりやすい説明がなされていましたが
例ではmain関数にまとめられた情報だけを使って描画や計算をしていました

例とは違い、敵キャラの情報や自機の情報がソースファイルをまたいで
ばらばらに置いてあった場合、自機の描画関数や敵の描画関数に情報を渡す関数が
必要になってきて、更にそれをオブジェクトの種類毎に用意しなくてはいけない気がするのですが…
正解をご教授してください

それ以外はソフト屋さんの助言に逆らうexternを多用するやり方しか思いつきません

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 00:36
by ソフト屋 外出中
そこが問題点ですね。フアイルをまたがってデータを受け渡すことは極力避けなくてはいけません。
描画専用とか作ってしまうと避けれないので作ってはいけないのです。
敵処理等オブジェクトで分けると避けることができます。

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 00:40
by ソフト屋 外出中
ゲームプログラミングの館にもそう書いてあるはずですよ

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 00:54
by safari
全ての描画処理を一括りにするのではなくて
敵の移動計算や敵の描画は敵処理ファイルにまとめ、
自機の移動計算や自機の描画は自機処理ファイルにまとめるということでしょうか?
なんどもすいません


ソフト屋 外出中 さんが書きました:ゲームプログラミングの館にもそう書いてあるはずですよ
申し訳ありません 熟読しておりませんでした

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 08:53
by ソフト屋 外出中
そのとおりで外部公開の必要があるのは当リ判定の情報など極わずかです。公開情報もexternではなく情報取得関数を用意してください

Re: ゲームプログラミング 関数分割

Posted: 2013年7月28日(日) 08:53
by Dixq (管理人)
> 例ではmain関数にまとめられた情報だけを使って描画や計算をしていました

本当に全部よく読まれましたか?
d.1~d.6節で、モジュールごとに計算・描画する方法を紹介していますよ。