예제 #1
0
        /// <summary>
        /// 出力します
        /// </summary>
        /// <param name="bord"></param>
        public static void bordview(Bord bord)
        {
            Console.WriteLine("今はこんな状況です");
            Console.Write("   1");
            for (int k = 2; k <= bord.bord.GetLength(0); k++)
            {
                Console.Write($"  {k}");
            }

            Console.WriteLine("");
            for (int i = 0; i < bord.bord.GetLength(0); i++)
            {
                Console.Write($"{i + 1}|");
                for (int j = 0; j < bord.bord.GetLength(1); j++)
                {
                    if (bord.bord[i, j] == Rows.Circle.ToString())
                    {
                        Console.Write("〇|");
                    }
                    else if (bord.bord[i, j] == Rows.Cross.ToString())
                    {
                        Console.Write("X|");
                    }
                    else
                    {
                        Console.Write(" |");
                    }
                }

                Console.WriteLine("");
            }
        }
예제 #2
0
        /// <summary>
        /// 置く予定の場所がnullかどうか判定します
        /// </summary>
        /// <param name="num">入力された版目</param>
        /// <param name="bord">盤の情報・状況</param>
        /// <param name="human">プレイヤーの情報</param>
        /// <returns>置けそうだったらtrue 置けないならfalse</returns>
        public bool RowCount(int[] num, Bord bord, Human human)
        {
            if (bord.bord[num[0], num[1]] == null)
            {
                return(true);
            }

            return(false);
        }
예제 #3
0
        public bool RowCount(int[] num, Bord bord, Human human)
        {
            if (human.Rows == Rows.Circle)
            {
                bord.bord[(num[0]), (num[1])] = Rows.Circle.ToString();
            }
            else
            {
                bord.bord[(num[0]), (num[1])] = Rows.Cross.ToString();
            }

            return(true);
        }
예제 #4
0
        /// <summary>
        /// 置いたところから周囲8方向を見て何個同じコマが並んでいるかカウントします
        /// </summary>
        /// <param name="num">入力された版目</param>
        /// <param name="bord">盤の情報・状況</param>
        /// <param name="human">プレイヤーの情報</param>
        /// <returns>規定個数以上あったらtrue なかったらfalse</returns>
        public bool RowCount(int[] num, Bord bord, Human human)
        {
            // 書いたものを1として数えておく
            int count = 1;

            // 周囲8方向を見る二重ループ
            for (int i = -1; i <= 1; i++)
            {
                for (int j = -1; j <= 1; j++)
                {
                    count = 0;
                    // 置いたコマを見ないようにする条件
                    if (i == 0 && j == 0)
                    {
                        continue;
                    }

                    // 配列の添え字に予期しない数値が入るのを抑制
                    if (num[0] + i < 0 || num[1] + j < 0 || num[0] + i >= bord.size + 2 || num[1] + j >= bord.size + 2)
                    {
                        continue;
                    }

                    // 周囲8マスを調べてコマが置いてあるか判定
                    if (bord.bord[(num[0] + i), (num[1] + j)] != null)
                    {
                        // 置いてあったら自分のかどうか判定
                        if (bord.bord[num[0] + i, num[1] + j] == human.Rows.ToString())
                        {
                            count++;
                            // 自分のだった場合、何個並んでいるか数える
                            for (int k = 1; k <= bord.size; k++)
                            {
                                // 配列の添え字を超えそうになったら飛ばす
                                if (num[0] + i * k < 0 || num[1] + j * k < 0 || num[0] + i * k >= bord.size + 2 ||
                                    num[1] + j * k >= bord.size + 2)
                                {
                                    continue;
                                }

                                // 1マス進んだ先にコマがあるかどうか判定
                                if (bord.bord[num[0] + i * k, num[1] + j * k] == null)
                                {
                                    break;
                                }

                                // あったらそれが自分の書いたものか判定
                                if (bord.bord[num[0] + (i * k), num[1] + (j * k)] == human.Rows.ToString())
                                {
                                    Console.WriteLine(count);
                                    count++;
                                }
                            }

                            // 反対側も数える kに-1を積るだけ
                            for (int k = 1; k <= bord.size; k++)
                            {
                                if (num[0] + i * -k < 0 || num[1] + j * -k < 0 || num[0] + i * -k >= bord.size + 2 ||
                                    num[1] + j * -k >= bord.size + 2)
                                {
                                    continue;
                                }

                                if (bord.bord[num[0] + i * -k, num[1] + j * -k] == null)
                                {
                                    break;
                                }

                                if (bord.bord[num[0] + i * -k, num[1] + j * -k] == human.Rows.ToString())
                                {
                                    Console.WriteLine(count);
                                    count++;
                                }
                            }

                            // n個以上あったら帰る
                            if (count >= bord.size)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }
예제 #5
0
        /// <summary>
        /// n目並べ
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 初期設定
            Check    check    = new Check();
            Put      put      = new Put();
            Jugement jugement = new Jugement();

            // 盤を作成 n*nの二次元配列
            Bord bord = new Bord();

            //何目並べか入力を促します。
            bord.sizeinput();

            // 二人のプレイヤーを作成
            // まる
            Human player = new Human
            {
                Rows = Rows.Circle
            };

            // 名前の入力を促します
            player.nameinput();

            // ばつ
            Human enemy = new Human
            {
                Rows = Rows.Cross
            };

            enemy.nameinput();

            // ここから戦い
            while (true)
            {
                // 今の盤の状況を表示させます
                View.bordview(bord);
                // 置きたい場所を入力させます
                int[] num = player.putinput(bord.bord);
                // 置きたい盤にコマがないか判定します
                // ここの入れ子はぐちゃってる 悲しい 
                if (check.RowCount(num, bord, human: player))
                {
                    // なかったら置きます
                    if (put.RowCount(num, bord, human: player))
                    {
                        // 置きたい盤の周辺に同じコマが何個あるか判定します
                        if (jugement.RowCount(num, bord, human: player))
                        {
                            Console.WriteLine($"{player.Name}さんの勝ちです。");
                            View.bordview(bord);
                            Environment.Exit(0);
                        }
                    }
                }

                // 今の盤の状況を表示させます
                View.bordview(bord);
                // 置きたい場所を入力させます
                num = enemy.putinput(bord.bord);
                // 置きたい盤にコマがないか判定します
                if (check.RowCount(num, bord, human: enemy))
                {
                    // なかったら置きます
                    if (put.RowCount(num, bord, human: enemy))
                    {
                        // 置きたい盤の周辺に同じコマが何個あるか判定します
                        if (jugement.RowCount(num, bord, human: enemy))
                        {
                            Console.WriteLine($"{enemy.Name}さんの勝ちです。");
                            View.bordview(bord);
                            Environment.Exit(0);
                        }
                    }
                }
            }
        }