• 締切済み

囚人のジレンマゲーム C言語

囚人のジレンマゲームをC言語で作りました。そのうちのこの部分を変えて、相手が協調の際に9回まで裏切り、後は全部協調とするにはどうしたらいいのでしょうか。 int you(int bc) //PLAYER1 { int ret; /* if(bc==COOPERATION){ret=COOPERATION;} else{ret=DEFECTION;} */ ret=DEFECTION; return(ret); }

みんなの回答

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.4

> 副作用が大きすぎると感じます。 ご指摘のとおりかと思います。 具体的に副作用を明示しないのは不親切かと思いましたので、 補足をば。 主に、ゲームを2回以上プレーしようとした際にcountを初期化する方法がないため 2ゲーム目以降、1手目で裏切ってしまうバグが発生します。 1回ごとにプロセスが終了するのであれば、この限りではありません。 他に見落としてる副作用があったら指摘していただけるとありがたいです。

回答No.3

> 呼び出し側を変えたくないのであれば、static int使うといいですよ。 お奨めしかねます。 この関数は戦略を練るのが目的。カウントアップが目的じゃない。 副作用が大きすぎると感じます。

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.2

呼び出し側を変えたくないのであれば、static int使うといいですよ。 int you(int bc) { static int count = 0; count++; return count <= 9 ? DEFECTION : COOPERATION; }

回答No.1

いったい何がわからんのですか? int you(int 回数) {  return (回数<=9) ? DEFECTION : COOPERATION; } /* 呼び出し側も適切に書き換えてください */

関連するQ&A