「キーボードからの入力で画面のキャラクターを上下左右に動かす」このような動作をさせたい場合、どのようなクラスが考えられますか?この文章から見たまま抽出するのであれば「キーボード入力のためのクラス」「キャラクターを管理するクラス」が必要なのかな?と思います。他のサイトには同じ動作のはずなのに、さらに「画像クラス」「スプライトクラス」「コントローラクラス(?)」などたくさんのクラスが必要だと書いてありました。どれから作り始めればよくて、どれとどれがどんな関係にあるのか、さっぱりでございます。私にクラス設計の考え方を教えてもらえませんか?まずは簡単な例を、と思いまして上記の「」内の動作を想定して作りたいです。オフトピックC++入門サイトは読み終わっております。応用して何かを制作する力はまだありませぬ。2年前こんにちはクラス作成にはセンスが必要らしいです。自身の座標(と向きもいるかな?)をメンバ変数に、指定された方向に指定された長さだけ移動する関数をメンバ関数にもつ「キャラクタークラス」キャラクタークラスにはメンバ変数として画像クラスを持たせるか、画像クラスを継承させます。(継承するなら座標は画像クラスに持たせたほうがいいかも?)メンバ変数として画像クラスを持たせる場合、前方宣言などで余計なインクルードを省略できます。(c++の場合)画像クラスを継承させる場合は、画像クラスの配列に格納することができるようになるのでまとめて処理ができるようになります。私個人の意見としましては、メンバ変数として持たせるのがいいかと思います。(継承させても画像クラスの配列に格納したことが今までなかったため^^;)入力クラスも実装したら便利なのかもしれませんが、今回のような場合でしたら、クラスにするまでもないとおもいます。[hr]というわけで、今回必要なのはキャラクタークラスと画像クラスだとおもいます^^c++初心者を自負しています。質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^回答者さんには精一杯感謝します。返信ありがとうございます。>purinさんああっ!そうなんですね!てっきり画像クラスは継承させて使うものだとばかり思い込んでいたのでメンバ変数として使うとは分かりませんでした。(C++入門者失格かも、、、)たしかに画像クラスを配列にする状況はあんまり思いつかないかもです。分からないところがあって、メンバ変数として画像クラスを持たせる場合、前方宣言などで余計なインクルードを省略できます。入力クラスも実装したら便利なのかもしれませんが、今回のような場合でしたら、クラスにするまでもないとおもいます。ありますがクラスに属さない関数というのはアリなのでしょうか?実は例題のプログラムを考えていて一番迷っているのがここでして、確かにクラスに属さないタダの関数にしてしまえば色々楽なのですがそれはオブジェクト指向的には許されているのかという入門者にしてはちょっと生意気な疑問が湧きまして足踏みしている状態です。返信ありがとうございます。>usaoさんチャートがすごく分かりやすくて捗ります。分かりやすいチャートなので自分の中の考えを整理するために利用させていただきました。「キャラクタのーの座標を変更する役割を持つ誰か」に,その移動方向を通達するのか?キャラクターがどの方向にどれだけ動くのかを決定するのはキャラクタークラス自身ではないのですか?キャラクタークラスが現在のキーの状態を見るためにキーボードクラスのインターフェースを持っている、という設計を私は想定していました。......でも実を言うとこの設計はまったく自信がないのでもっと良い設計があればぜひご教授していただきたいのです。以下、ゲームプログラミングの館からパクってクラス風にしただけの使用予定ソースコードです。override;};肝心の例題のプログラムはこれから手を付ける段階なのでこのコードが実際に動作するかはわかりません。2年前>usaoさんミスったあああ!(ぼくもわからんです。)編集して修正しておきました。2年前>usaoさん私の考えなのに私より上手くまとめてくださいました。ありがとうございます。usaoさんの方法についてですが、一体どういった意図があってそうしているのでしょうか?(1)の「キーボードクラスとキャラクタークラスの間に誰か仲介人を挟む」というのはキーコンフィグをしたいときに便利だとか、それに付随して入力デバイスがキーボードじゃなくなったときにメンテしやすいなどの利点があるのかなーと予想しています。(違ったら教えてください)それから、(4)のところでわざわざ「自発的にではなく」と書いてあるということは自発的ではない場合のメリットが何か存在するのか併せて教えてほしいです。前方宣言などでインクルードを省ける、、、という部分ですが、おっしゃる通りメンバ変数にクラスのポインタを持たせることです。gazou.hファイルに画像クラスの宣言を書いて、character.hで画像クラスを前方宣言してキャラクタークラスのメンバ変数に画像クラスのポインタを持たせて、character.cppでgazou.hをインクルードする。することでgazou.hが変更された場合のリビルド被害が減らせます。Pimplイディオムなどを使うとメンバ変数をほぼ完全に隠蔽できたりします。今、やむを得ない理由があってオブジェクト指向についての本を読んでいます。その本では、「オブジェクト指向でプログラムする際、一般的にクラスに属さない普通の関数を作ることはない」と書かれていました。偉い人が書いた本なのだからきっとクラスに属さない関数を作ることはないのだと思います。いってすべての関数を無理やりクラスにまとめるのも違うと私は思います。(初心者の意見ですが^^;)オブジェクト指向というのはプログラミングの手法の一つであって、「オブジェクト指向こそ最強!」というわけではないと思います。オブジェクト指向を使うと便利になる箇所、普通の関数を使うと楽になる箇所などがきっとあるはず、、、!つまり何が言いたいかっていうと、適材適所なんじゃないかなあ、ということです。オブジェクト指向かと思いきや、いきなり普通の関数ばっか出てきてもいいじゃないか、ということです^p^c++初心者を自負しています。質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^回答者さんには精一杯感謝します。御二方、ご返信ありがとうございます。内容は読ませていただきました。明日、昼から時間がとれるのでそのときに今までのご指導を踏まえてソースコードを書いてみたいと思います。手短な返答で申し訳ないです。2年前>purinさんPimplイディオム、初めて聞きました。確かにこう書けば、ヘッダファイルが簡潔に書けるのとコンパイル時間が短くなりますね!ヒープを使うのとクラスが増えちゃうのがデメリットって感じでしょうか。今の私だとクラスがたくさん増えると面倒に見えちゃうんですよね。実をいうと私、オブジェクト指向を使うと何がどう便利になるのかというのはよくわかっていません。入門サイトで「こんな機能があって便利である」と言われただけで、まだ実際に使って便利と実感できたわけではないですし。色々なC言語の入門サイトを読み漁っていると、どのサイトでも大抵最後の方のページに次のステップとしてC++が紹介されているんですよね。purinさんの言う「オブジェクト指向こそ最強!」的な発想に陥っているのかもしれません。くる方法が今後見つかるかは分かりませんが、適材適所という言葉を信じて今回は普通の関数でいくつもりです。おかげで熱が冷めないうちに作りたいものを作れます。後押ししてくれてありがとうございます。2年前>usaoさん「キーボードからの入力で画面のキャラクターを上下左右に動かす」という最初の例題と並行して練習として簡易インベーダーゲームをC++で書いています。(インベーダーゲームに関してはキーボード入力もクラスとして書いています。)そこでusaoさんに教えていただいた考え方がピタッと一致した感じです。「player(自機)クラスが外から言われたとおりに動く」という実装にしてkeyboardクラスと離したおかげでキーボードで動かないenemy(侵略者)クラスやbullet(弾)クラスと同じcharクラスから継承させることができました。usaoさんの言わんとしていたこととずれてるかもしれませんが、とりあえずパズルのピースがはまった感じで気持ちがいいです。気持ちよくなった(エクスタシー)だけで、playerを「どんな名前の誰」が動かすのかという根本的な部分が分からないのでもう少し考えてみたいです。指導と呼ぶのは違う感.教えていただいている立場なのに指導という言葉はふさわしくなかったと思います。古くからあるゲーム設計を調べると、設計の糸口が掴めるかもしれません。ミクプラは自由にリンクできます。