.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));
}
}