アプリ版:「スタンプのみでお礼する」機能のリリースについて

enum ResultOfFight { PLAYERWIN, ENEMYWIN, DRAW };

class Battle
{
public:
ResultOfFight Fight(Player* player, Trainer* enemy);
ResultOfFight Fight(Player*player, Monster* monster)
{
Toumei x;
x.PlusMonster(monster);
return Fight(player,&x);
}
}

今時分はvoid Battle::Fight(){・・・・}の中身を書いているですが
(1)enum ResultOfFight { PLAYERWIN, ENEMYWIN, DRAW }; への返し方
(2)
ResultOfFight Fight(Player*player, Monster* monster)
{
Toumei x;  
x.PlusMonster(monster);    
return Fight(player,&x); ←これが何を意味しているかが分からない
}

この二つがよく分かっていません

理解していないばかりに、分かりづらく質問をしているのかもしれませんが
どなたかご教授してくださると嬉しいです

A 回答 (3件)

(1)とりあえず「への返し方」は「の返し方」でしょうか?


そうだとすると、{...}の中のいずれかを返せばいいのです。
これは、その値そのままを書かなくてはならないというのではなくそのような値を返す関数を呼び出した結果を返してやってもいいのです。

(2)見たとおり、Fight(player,&x)の結果をこの関数の戻り値にしているだけです。
…とはいえ、全くの初心者にはちょっと分かりづらいテクニックを使っているようです。

テクニックその1:関数/メソッドのオーバーロード
C++では引数の型が違えば同じ名前の関数やメソッドを複数定義できます。これをオーバーロード(多重定義)といいます。
あなたが質問されている関数はResultOfFight Fight(Player*player, Monster* monster)で、それと別に直前でResultOfFight Fight(Player* player, Trainer* enemy)が宣言されています。2番目の変数の型が違うので、この2つは別の関数です。

テクニックその2:クラスの継承
しかし、関数呼び出しの引数として渡している型はToumei*で、Monster*でもTrainer*でもありません。
これはクラス名等からの憶測なのですが、このソースはポケモンのようにモンスターをトレーニングしてトレーナー同士で対戦するゲームのソースの一部ではないのでしょうか。
だとしたら、トレーナー同士の対戦と野良モンスターとの戦いで戦闘ロジックを共通化したいところですが、(これまたクラス名と問題の関数の処理からの推察ですが)野良モンスターとの戦いを「透明なトレーナーがいる」ものとしてトレーナー同士の対戦ロジックに渡して共通化しているように思います。
親クラスのポインタには子クラスのポインタが問題なく代入できますので、TrainerがToumeiの親クラスであるならば2番目がTrainer*型のほうのFightが呼び出されます。

…でも、あなたが質問された事柄はC++の学習をきちんとしていれば簡単なことです。きついことを言うようですが、もう一度C++の勉強をしなおしてからこのソースに手をつけたほうがいいかと思います。

この回答への補足

(1)とりあえず「への返し方」は「の返し方」でしょうか?
そうだとすると、{...}の中のいずれかを返せばいいのです。
これは、その値そのままを書かなくてはならないというのではなくそのような値を返す関数を呼び出した結果を返してやってもいいのです。

すいません
具体的な例を教えていただけませんでしょうか?

またこういったものを勉強するにあたって
参考になるようなサイトというものをご存じないでしょうか?

補足日時:2010/12/19 15:00
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2011/01/31 05:04

http://homepage2.nifty.com/well/Index.html
例えばこのサイトとか参考になります。
読んでも分からない部分があるようなら回答します。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2011/01/31 05:04

サイトを使って勉強するのもいいですが、


まずは入門書を1冊読み通してみてはどうでしょうか。

ゲームプログラミング(らしきもの)に手を出すのは、
その後でも遅くないと思います。
ていうか、基本ができてなければ、応用問題は解けないですよね。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2011/01/31 05:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!