.NET 4.x Морской бой: генератор кораблей работает нелогично - C#
Формулировка задачи:
Проблема такая, не строит корабли так как надо. Либо консоль зависает, либо пропускает некоторые корабли. Где ошибка ? Скинул генератор кораблей.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace mds { class Program { static void Main(string[] args) { string[,] A = new string[25, 25]; //создаём массивы string[,] B = new string[25, 25]; int k = 4, z = 1, x, y, xt, yt, xd, yd, xd1, yd1; //создаём переменные bool clear = true; // создаём переменную типа "условие" Random rand = new Random(); //создаём обьект класса .рандом. //---------------------------------------------------------------------------------// for (int i = 0; i <= 11; i++) //заполняем массив { for (int n = 0; n <= 11; n++) { A[i, n] = "*"; B[i, n] = "*"; } } //---------------------------------------------------------------------------------// while (k >= 1) { if (k == 4) { z = 1; } // к - количество клеток. z - количество кораблей. if (k == 3) { z = 2; } if (k == 2) { z = 3; } if (k == 1) { z = 4; } for (int u = 1; u <= z; u++) { Start: clear = true; x = rand.Next(2, 9); //случайно выбираем позицию для корабля. y = rand.Next(2, 9); xt = x; yt = y; for (int i = 1; i < k; i++) //проверям, есть место для коробля или нет по вертикали. { if (A[yt, xt] == "*") { yt++; clear = clear && true; } else { yt++; clear = clear && false; } } if (clear == false) // если по вертикали нету места, проверем по горизонтали. { clear = true; yt = y; for (int i = 1; i <= k; i++) { if (A[yt, xt] == "*") { xt++; clear = clear && true; } else { xt++; clear = clear && false; } } } if (clear == true) // проверяем, нет ли рядом кораблей. { xd = x - 1; yd = y - 1; xd1 = xt + 1; yd1 = yt + 1; for (int i = yd; i <= yd1; i++) { for (int n = xd; n <= xd1; n++) { if (A[i, n] == "*") { clear = clear && true; } else { clear = clear && false; } } } if (clear == true) // если нету кораблей, ставим корабль на своё место. { for (int i = y; i <= yt; i++) { for (int n = x; n <= xt; n++) { A[i, n] = "#"; } } } else { goto Start; } Console.WriteLine(x + "" + y); } } k--; } for (int i = 1; i <= 10; i++) { Console.WriteLine(A[i,1]+""+A[i,2]+""+A[i,3]+""+A[i,4]+""+A[i,5]+""+A[i,6]+""+A[i,7]+""+A[i,8]+""+A[i,9]+""+A[i,10]); } Console.ReadLine(); } } }
Решение задачи: «.NET 4.x Морской бой: генератор кораблей работает нелогично»
textual
Листинг программы
List<string> freeCells = new List<string>(); for (int l = 0; l < 9; l++) { for (int m = 0; m < 9; m++) { freeCells.Add(String.Format("{0}{1}", l, m)); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д