/// <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(""); } }
/// <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); }
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); }
/// <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); }
/// <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); } } } } }