2014-10-02 3 views
-1

Мне сказали сделать проект игры на корабле с полем 10x10. На данный момент мне нужно знать, как произвольно создавать позиции корабля в поле (это массив 10x10). Поля не могут быть друг на друге, и они не могут быть рядом друг с другом. они также могут быть горизонтальными или вертикальными.Заполните поле битвы игровым полем C

мне нужно поместить следующие корабли: 1 корабль из пяти полей 1 корабль из четырех полей 2 кораблей трех полей 3 кораблей двух 4 кораблей одного

я действительно не видел как я могу это сделать. это то, что у меня есть до сих пор:

void generateField(int field[][dim]) 
{ 
    int i,j; 
    for (i=0; i<dim; i++) 
    { 
     for (j=0; j<dim; j++) 
     { 
      field[i][j] = 0; 
     } 
    } 
} 

Это делает поле всем нулем. Я хочу генерировать лодки, как я уже говорил

+0

Можно разместить несколько первые кораблей таких, что другие нет места осталось? Тогда назначение было бы немного сложнее. В противном случае это сводится к размещению их по одному. Вам понадобится обычная процедура для тестирования на столкновение. («Учитывая лодку длины l, начинающуюся с x, y с ориентацией N, W, S или E, она перекрывает или оставляет границы или имеет соседа?») Затем вы повторяете свои лодки; выберите кандидат, начиная координаты и направления случайным образом снова и снова, пока ваша рутина не будет одобрена. –

ответ

2

Похоже, вы хотите иметь метод, который возьмет int (size_of_boat), а затем выберите случайное число для x и y (скажем: 2,5).

все, что вам нужно сделать, это проверить, можете ли вы поместить это судно, начиная с этой точки.
1. Идите влево для size_of_boat. если вы не нашли другого «занятого» бита, или вы не сошли с доски. хорошо.
2. если нет, то проверьте ...
3. Право ...
4. вниз ...

если вы нашли направление, установить эти биты в массиве к истине, и возвращает истину , Если нет, это означает, что вы не можете поставить корабль такого размера в этом положении, поэтому произвольно выполните поиск другой позиции и повторите попытку.

Это не оптимальный алгоритм, но я уверен, что это достаточно для ваших нужд

Смежные вопросы