C++プログラムの設計

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

C++プログラムの設計

#1

投稿記事 by 工業高生・戸松 » 10年前

初めて、この掲示板を利用させていただきます戸松と申します。
現在、工業高生なのですが困っていることがありまして高校の課題研究についてです。
私はプログラム設計なんて、まともにしたことがないのに課題研究でゲームを作ることにしてしまいました。
案の定、序盤で行き詰ってしまい、一人では期限である11月に間に合いそうもない為、お力を貸して頂きたいです。

正直、分からないことはゲームプログラミングの全てなのですが
特に質問したいのはC++プログラムの設計についてです。

C++ではまずクラスを作り、インスタンスを生成して、インスタンスの関数を実行すると聞きました。
そこで気になるのがインスタンスの生成場所です。
例えば、キーボードで操作するものが主人公の場合、主人公インスタンスと同じ場所にキーボードインスタンスを生成します。
しかし、キーボードで操作するものが主人公だけではなく、他のオブジェクトもあった場合(メニュー画面の矢印など)に
そのオブジェクトは先程、生成されたキーボードインスタンスにはアクセスできません。
(メニュー画面インスタンスは主人公インスタンスとは違う場所にある為)
メニュー画面インスタンスを主人公インスタンスと同じ場所に生成すれば、この問題は解決できるかもしれませんが
それだとコードがごちゃごちゃになってしまいそうです。

以上が私が現在、悩んでいる問題です。
この問題の解決方法、正しい設計の仕方を私に教えてください。
よろしくお願いします。

コンパイラにはVC++、ライブラリにはDXライブラリを想定しています。
C++の機能は分かっているつもりです。

hide

Re: C++プログラムの設計

#2

投稿記事 by hide » 10年前

その場所とやらとはなんなのでしょうか。

工業高生・戸松

Re: C++プログラムの設計

#3

投稿記事 by 工業高生・戸松 » 10年前

説明不足の点がありました。申し訳ありません。

main―┬―menu
     └―playerとkeyboard
このように設計した場合、キーボードの情報をメニューに伝えることができなかったので
解決方法を知りたく質問させていただきました。
main経由で伝える方法も考えましたが、その為にmainがキーボード情報保存用の変数を
持つのはおかしいのではないかと思いました。
また、manuが深い階層にいる場合、mainとmenuの中間のインスタンス全てが情報保存用の変数を
持たなくてはいけない為、これもおかしいのではないかと思いました。

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

Re: C++プログラムの設計

#4

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

過去ログでも何度か話題になってますが、綺麗にオブジェクト指向にするのは経年(時間)と手間がかかります。
つまり経験値が必要なんですが時間がないとのことなので難しいかと思います。ハマると時間を失いますのでゲーム完成を優先すべきです。
お急ぎですので、キーボード処理全般をシングルトンにしてしまうと言う手があるかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

工業高生・戸松

Re: C++プログラムの設計

#5

投稿記事 by 工業高生・戸松 » 10年前

申し訳ありません。過去ログを読ませていただいても解決することが難しかったので質問させてください。
シングルトンについて調べさせていただきましたが、
この方法を用いて解決したところで、そのプログラムはオブジェクト指向と呼べますか?
課題研究のテーマを「オブジェクト指向を用いたゲームプログラミング」で提出してしまったもので・・・
(碌に知らないことをテーマにしてしまったことは反省しています)

最悪、歩いてジャンプするだけのプログラムでも良いので知りたいのですが
やはり、それでも経年は要するものなのでしょうか?

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

Re: C++プログラムの設計

#6

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

シングルトンも十分にオブジェクト指向の一部です。
綺麗に設計することばかり考えると先に勧めないので、一部はなんちゃってオブジェクト指向でも良いので完成させることを優先すべきです。
結局、ちゃんと設計できないと手戻りが多発して先に進めません。
ちゃんと設計するには経験値(膨大な試行錯誤)が必要なのです。

参考過去ログ。ここらの話の内容を理解してさくっと作れるならやったほうが良いと思いますが私は難しいと思います。
「キー入力クラスの設計 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15685
「変数のカプセル化を守りながらのデータの受け渡しについて • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=15592

>最悪、歩いてジャンプするだけのプログラムでも良いので知りたいのですが
>やはり、それでも経年は要するものなのでしょうか?

それはシングルトンとしての話でしょうか?
それとも、純粋にゲームの作り方でしょうか?
オブジェクト指向なら、1つの方法はコントローラクラスがキーボードクラスにジャンプの有無を聞いて、ジャンプならコントローラクラスからプレーヤークラスのジャンプ・メソッドを呼び出すというのがひとつの方法です。ただ、この説明だけで実装できるぐらい経験がないとハマると思います。
他にも実装方法がありますが、それは紹介したトピックで出てきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

工業高生・戸松

Re: C++プログラムの設計

#7

投稿記事 by 工業高生・戸松 » 10年前

ありがとうございました。
シングルトンと教えてもらったリンクを参考にして今日明日でサンプルを作って研究してみます。
ただ、まだ理解できなさそうな部分があるのでサンプルを作り上げてから、また質問させてください。

ISLe()

Re: C++プログラムの設計

#8

投稿記事 by ISLe() » 10年前

利用者側がシングルトンだと信じて使うシングルトンはグローバル変数と同じなのでオブジェクト指向的には問題あるような気がしますが。
工業高生・戸松 さんが書きました:また、manuが深い階層にいる場合、mainとmenuの中間のインスタンス全てが情報保存用の変数を
持たなくてはいけない為、これもおかしいのではないかと思いました。
わたしはおかしくないと思います。

武器クラスへのプレイヤー位置情報の渡し方
質問の内容としてはこちらのトピックと同じではないでしょうか。

ユーザー操作(いわゆるコントローラーオブジェクト)へのアクセスとか、アプリケーションレベルの情報へのアクセスとか、コンテキストにインターフェースを追加していくことで機能を増やせます。
ある程度柔軟性はありますが、離れたオブジェクトにアクセスするために上位層と絡むので、クラス階層の設計は重要です。

閉鎖

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