電子書籍の厳選無料作品が豊富!

囚人のジレンマゲームをC言語で作りました。そのうちのこの部分を変えて、相手が協調の際に9回まで裏切り、後は全部協調とするにはどうしたらいいのでしょうか。

int you(int bc) //PLAYER1
{
int ret;

/*
if(bc==COOPERATION){ret=COOPERATION;}
else{ret=DEFECTION;}
*/
ret=DEFECTION;
return(ret);
}

A 回答 (4件)

> 副作用が大きすぎると感じます。



ご指摘のとおりかと思います。
具体的に副作用を明示しないのは不親切かと思いましたので、
補足をば。

主に、ゲームを2回以上プレーしようとした際にcountを初期化する方法がないため
2ゲーム目以降、1手目で裏切ってしまうバグが発生します。
1回ごとにプロセスが終了するのであれば、この限りではありません。

他に見落としてる副作用があったら指摘していただけるとありがたいです。
    • good
    • 0

> 呼び出し側を変えたくないのであれば、static int使うといいですよ。



お奨めしかねます。
この関数は戦略を練るのが目的。カウントアップが目的じゃない。
副作用が大きすぎると感じます。
    • good
    • 0

呼び出し側を変えたくないのであれば、static int使うといいですよ。


int you(int bc)
{
static int count = 0;
count++;
return count <= 9 ? DEFECTION : COOPERATION;
}
    • good
    • 0

いったい何がわからんのですか?



int you(int 回数) {
 return (回数<=9) ? DEFECTION : COOPERATION;
}

/* 呼び出し側も適切に書き換えてください */
    • good
    • 0

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