Ejemplo n.º 1
0
        /// <summary>
        /// ゲーム処理
        /// </summary>
        /// <param name="digit"></param>
        /// <param name="prayer1"></param>
        /// <param name="prayer2"></param>
        /// <returns></returns>
        public string GameStart(int digit, IPrayer prayer1, IPrayer prayer2)
        {
            /*エラーチェック*/
            if (prayer1 == null || prayer2 == null)
            {
                throw new ArgumentNullException();
            }

            /*宣言*/
            int times = 0;

            int[][] eatBite = new int[2][]
            {
                new[] { 0, 0 },
                new[] { 0, 0 }
            };
            int[]  call   = new int[digit];
            string winner = "";
            string log    = "";

            /*ゲーム開始前処理*/
            prayer1.Start();
            prayer2.Start();

            Console.WriteLine("Game Start!!");

            //各prayer の答えを含むため ゲーム開始前処理後に記述
            log += prayer1.getName() + ": " + ToString(prayer1.getAns()) + "  " +
                   prayer2.getName() + " : " + ToString(prayer2.getAns()) + "\n";

            /*どちらかがゲームに勝利するまでループ*/
            while (true)
            {
                times++;
                /*Player1*/
                prayer1.Call(eatBite[0]).CopyTo(call, 0);
                prayer2.Div(call).CopyTo(eatBite[0], 0);
                Console.WriteLine(prayer1.getName() + " : " + ToString(call));
                Console.WriteLine(prayer1.getName() + " : " + ToString(eatBite[0]));
                log += "(" + prayer1.getName() + ")の入力値 " + ToString(call) + "  " +
                       "判定 " + ToString(eatBite[0]) + "  ";

                /*勝利したとき*/
                if (eatBite[0][0] == digit)
                {
                    winner = prayer1.getName();
                    log   += "\n";
                    break;
                }

                /*Player2*/
                prayer2.Call(eatBite[1]).CopyTo(call, 0);
                prayer1.Div(call).CopyTo(eatBite[1], 0);
                Console.WriteLine(prayer2.getName() + " : " + ToString(call));
                Console.WriteLine(prayer2.getName() + " : " + ToString(eatBite[1]));
                log += "(" + prayer2.getName() + ")の入力値 " + ToString(call) + "  " +
                       "判定 " + ToString(eatBite[1]) + "\n";
                /*勝利したとき*/
                if (eatBite[1][0] == digit)
                {
                    winner = prayer2.getName();
                    break;
                }
            }

            Console.WriteLine("*************************************");
            Console.WriteLine("winner is " + winner);
            log += "++++++++++++++++++++++++++++++++++++++++++++++\n";
            log += winner + "の勝利  ターン数" + times + "\n";

            return(log);
        }