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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
safari

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

#1

投稿記事 by safari » 12年前

今日連続の質問になってしまいますが
無礼を承知で質問させていただきます
私、C言語初心者でございます

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

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

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

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

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#2

投稿記事 by Dixq (管理人) » 12年前

ゲームプログラムの設計については
http://dixq.net/g/index.html#GameDesign
ゲームプログラム設計
をご覧ください。

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

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

ソフト屋 外出中

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

#3

投稿記事 by ソフト屋 外出中 » 12年前

C言語の組み方としても、externに頼る設計は良
い設計とは言えません。
モジュール化で調べて貰うと分かると思いますが、最大でファイルスコープに納める設計をされた方がよいと思います。

safari

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

#4

投稿記事 by safari » 12年前

プログラミングの館、読ませていただきました
とても分かりやすい説明がなされていましたが
例ではmain関数にまとめられた情報だけを使って描画や計算をしていました

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

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

ソフト屋 外出中

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

#5

投稿記事 by ソフト屋 外出中 » 12年前

そこが問題点ですね。フアイルをまたがってデータを受け渡すことは極力避けなくてはいけません。
描画専用とか作ってしまうと避けれないので作ってはいけないのです。
敵処理等オブジェクトで分けると避けることができます。

ソフト屋 外出中

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

#6

投稿記事 by ソフト屋 外出中 » 12年前

ゲームプログラミングの館にもそう書いてあるはずですよ

safari

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

#7

投稿記事 by safari » 12年前

全ての描画処理を一括りにするのではなくて
敵の移動計算や敵の描画は敵処理ファイルにまとめ、
自機の移動計算や自機の描画は自機処理ファイルにまとめるということでしょうか?
なんどもすいません


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

ソフト屋 外出中

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

#8

投稿記事 by ソフト屋 外出中 » 12年前

そのとおりで外部公開の必要があるのは当リ判定の情報など極わずかです。公開情報もexternではなく情報取得関数を用意してください

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#9

投稿記事 by Dixq (管理人) » 12年前

> 例ではmain関数にまとめられた情報だけを使って描画や計算をしていました

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

閉鎖

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