第271話 石取りゲームと、思考と、利用の仕方

 おも研の部室で、ベークが新魔法の課題に挑戦し始めた。

 苦戦しているようだ。


 お題は石取りゲーム。

 石が何個かあり。

 プレイヤーは交互に石を取る。

 ただし、この時1個から3個までしか取れない。

 石は必ず取らなくてはいけない。

 最後の一個を取った方が負けだ。


 問題は魔道具側の思考だ。

 ここで必要な事は最後の手番で、1個残す。

 その前の手番では5個残す。

 そしてその前では9個残す。

 その前の手番では13個残す。


 つまり4で割って余り1になるようにすれば良い。


 プログラムでは『answer=x%4-1』


 『x』に今の石の数を入れるとこの数式で『answer』に取るべき石の数が入る。

 『%』はモジュロでこの場合は4で割った余りが入る。


 『answer』がゼロだった場合は負けパターンなので、ランダムに1から3個取る。

 そういうふうにプログラムすれば良い。


 ベークは最初に石の数を決定するところから躓いた。

 ここは『x=rand()%20+20』ぐらいで良いだろう。

 それを教えた。


 そして、問題のループと分岐だ。

 ループは『x』が0以下になると負けで終り。


 分岐は手番の制御と、答えが0個だった場合の処理。

 それと終わった後の勝利者の表示。

 ここにも分岐は必要だ。


 完成した魔法はこんな感じだ。


#include <stdio.h>

#include <stdlib.h>

void main(void)

{

 int x,answer,player; /*『x』は石の数。『answer』は取る石の数。『player』は0は魔道具、1は人間*/

 x=rand()%20+20; /*石の数は20個から39個*/

 player=0; /*最初は魔道具*/

 printf("石の数は%d\n",x);


 while(x>0){ /*ループと終了判定*/

  if(player==0){ /*魔道具サイド*/

   printf("魔道具の番です\n");

   answer=x%4-1; /*数決定*/

   if(answer==0){

    answer=rand()%3+1; /*負けパターンならランダム*/

    if(x==1){

     answer=1; /*負けなので最後の石を取る*/

    }

   }

  }

  else{

   printf("あなたの番です\n");

   scanf("%d",&answer); /*石の数入力*/

   if(answer<1 || answer>3){ /*反則判定*/

    x=0; /*反則処理*/

    printf("反則負けです\n");

    answer=0;

   }

  }

  x=x-answer; /*石を取る*/

  printf("石を%d個取りました。残り%d個です\n",answer,x);

  player=(player+1)%2; /*プレイヤーチェンジ*/

 }

 if(player==0){ /*勝ちメッセージ*/

  printf("魔道具の勝ちです\n");

 }

 else{

  printf("あなたの勝ちです\n");

 }

}


 改良点は色々とある。

 石の取れる範囲でなければ再入力させるとか。

 ランダムで魔道具がヘボな手を打つとか。


 これの新魔法版をベークが作ったわけだが、最初はバグが沢山あって見れたもんじゃなかった。

 俺の解答を最後には見せてやった。


「ううっ、分岐が簡単だなんて言った俺の馬鹿」

「やーい、やーい、馬鹿」


 マイラが煽る。


「あなただってできないでしょ」


 リニアがそう言ったが、ベークに助け舟を出したのではなさそうだ。


「階層の管理さえちゃんとすれば余裕ですね。空白でそれをしているのでしょう」


 レクティにはどうやれば良いのか分かったようだ。


「なるほどね。私にもできそう」


 分岐を侮るとはセレンもベークみたいになりそうだ。

 人がやると簡単に出来そうに思うんだよな。

 コロンブスの卵だ。


「もう僕は新魔法は自分で作らない。頭がぐちゃぐちゃでどうしたら良いか」

「ベーク様、頑張って♡」


「くっ、ラチェッタの愛と期待が重い」

「ベーク、言っておくがこんなのは入門編だぞ」

「所詮、僕は魔王にはなれない」


「やーい、負け犬。じゃあ何にならなれるの?」

「ぐっ、少なくともタイトの魔法は翻訳できる」

「それって寄生しているって事よね」

「人を上手く使うのも才能ですわ」


 ラチェッタがそう言ってフォローした。


「そうだな。ベークは俺の使い方を考えると良い。タイトぅって言うだけが能じゃないぞ」

「ぐっ、分かったよ。タイトの上手い使い方を考える」


 さて、どんな貢物を持って来るかな。

 面白い物を持って来たら魔法を教えてやろう。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る