応用課題:石取りゲームを作る(1)

 お伝えしたいC言語の基礎知識は、今までの講座で以上となります。今回から数回に渡り、応用課題に挑戦してみましょう。まずは、石取りゲームをC言語で作成してみましょう。

 課題:石取りゲームを作成します。15個の石からプレイヤー(先手)とコンピュータ(後手)が交互に石を1・個取ります。最後の1個の石を取った方が負けとなります。ゲームのシステムとコンピュータの考え方(アルゴリズム)を実装しましょう。

【15個の石】
 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

 この15個の石を取り合いしていくのですが、実は、先手が必ず勝つ方法があることをご存知でしょうか。そのことを考えるために、まずは、次は相手が石を取る番のときに残りの石の数が何個であれば自分が必ず勝てるか(相手の番のときに石が1個だけになるか)を考えてみましょう。

 …… 

 答えは、「5個」です。

【5個の石】
 ○ ○ ○ ○ ○

 次が相手の番のときに残りが5個であれば、

  • 相手が1個取る(残り4個) → 自分が3個取る(残り1個)
  • 相手が2個取る(残り3個) → 自分が2個取る(残り1個)
  • 相手が3個取る(残り2個) → 自分が1個取る(残り1個)

 これで勝てるからです。では、次が相手の番のときに残りの石の数が何個であれば、一巡したときに残り5個に出来るでしょうか。答えは「9個」です。では、一巡したときに残り9個にするには何個にすれば良いか…「13個」です。スタートは15個です。つまり、初手で先手(プレイヤー)は2個の石を取り、その後は後手と先手で合計4個ずつになるように石を取っていけば確実に先手が勝ちます。逆に考えれば、後手(コンピュータ)の考え方としては、先手が勝ちパターンをわかっていなかった場合、後手が石を取った後の数が13,9,5個のどれかに合わせれば、確実に後手が勝ちます。コンピュータの考え方が、そうなるように、プログラムを組んでいきます。

 次回、このプログラムのサンプルソースを例示します。

■スポンサーリンク

このページの先頭へ