Member 13533562 Ответов: 2

Как создать массив, чтобы зафиксировать количество символов до 5?


Мне нужно придумать игру "бум-линкор" для моего задания. Я столкнулся с проблемой создания массива, который будет фиксировать размер корабля до 5 символов. Любая добрая помощь действительно ценится, спасибо.

Что я уже пробовал:

void initializeShipsEasy(int ships[][2]) {

	int ship, last;

	for (ship = 0; ship < SHIPS_EASY; ship++) {
		ships[ship][0] = rand() % 20;
		ships[ship][1] = rand() % 60;

		//let's check if this shot was not tried
		//if it was, just get out of the 'do while' loop when draws a pair that was not tried 
		for (last = 0; last < ship; last++) {
			if ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]))
				do {
					ships[ship][0] = rand() % 20;
					ships[ship][1] = rand() % 60;
				} while ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]));
		}

	}
}

ZurdoDev

На чем конкретно вы застряли?

Member 13533562

я не знаю, как сделать корабль длиной в 5 символов и разместить их на доске размером 20 х 60

Sinisa Hajnal

Вы знаете, как сделать корабль из 2 или 3 квадратов? В чем разница с 5?

Member 13533562

к сожалению, вопрос требует № 5

ZurdoDev

Для этого потребуется много кода, и я не думаю, что кто-то напишет столько кода для вас. Я предлагаю вам начать, а затем спросить, когда вы застряли на чем-то более конкретном.

Richard MacCutchan

Сначала вам нужно создать 2D-массив, который представляет собой доску. Затем вы заполняете 5 соседних квадратов (горизонтально или вертикально) по мере необходимости. Отметьте каждый квадрат, чтобы вы могли проверить, существует ли корабль в любом месте. Сначала нарисуйте его на бумаге, чтобы вы могли визуализировать то, что вам нужно создать.

2 Ответов

Рейтинг:
2

KarstenK

Это очень просто: вы должны посчитать, сколько полей уже используется и чем остановить создание корабля. Вы также должны проверить, что корабль не выходит из игровой площадки. В лучшем случае стоит проверить, что начальная точка обеспечивает достаточно места, а в остальном переместить ее правильно.

Используйте массив fix playground в качестве глобального экземпляра, например шахматную доску:

char playground[60][60] = {0};// 60 x 60 and set to zero

горизонтальный корабль:
int startx = 50;// or some random
int starty = 10;// or some random
//check border x 
if( startx + 5 > 60 ) {
  startx = 60 - 5;
}
//TODO: check x on the upper side and check y !!!
for(int i = 0; i < 5; i++ ) {
  playground[startx+i][starty] = 1; //build ship 
}
Если вы напишете функцию вокруг него, вы можете сделать так, чтобы "5" имел входной параметр для построения других кораблей.


Рейтинг:
2

W∴ Balboos, GHB

Это задание - я дам вам мысли о том, что вам нужно думать, и некоторые указатели - но вы должны сами вкладывать эту мысль, чтобы вы могли научиться делать это сами!

1 - Вам нужно выбрать направление для его роста (v или h)
2 - Вам нужно выбрать начальную точку для корабля (диапазон положения ограничен 1)
3 - вам нужно заполнить его хранилище до любой длины корабля, который вы пожелаете (например, 5).
4 - Вы должны убедиться, что ни одна из его данных не перекрывается с другими данными корабля

Кроме того, поскольку ваши корабли прямые, вам нужно выбрать только одну точку, чтобы нарисовать оставшуюся. Вы всегда можете нарисовать его в одном и том же направлении, ограничив начальный диапазон, чтобы сохранить его на игровом поле.

Теперь - вы знаете задания, которые должны быть выполнены (чтобы заполнить доску) - но теперь вам нужно выяснить, как их выполнять.

Кроме того, научитесь разбирать проблему на самые элементарные части, которые вы можете. Это самая важная часть решения проблемы - и она становится инстинктивной, если вы хорошо в этом разбираетесь.