Я сейчас программирую игру на линкоре, и я сделал сетку 10х10, используя 2 для петель.Теперь я хочу изменить цвет ячейки в зависимости от того, есть там корабль или нет.
В настоящее время в качестве тестового примера у меня есть корабль размера 3 с координатами (1,4), идущий горизонтально.Корабли хранятся как корабли [i] = ShipData (int размер, логическое значение isHor Horizontal, Int слева, int top).У меня несколько разных красок на мой взгляд, и shipPaint должен заполнить ячейки черным, однако я не уверен, как поступить, так как я не знаю, как проверить корабль во время моего метода onDraw.
ИтакВот мой метод рисования начальной сетки внутри метода onDraw:
for (int i = 0; i < noOfColumns; i++) {
int ystart = i * boxWidth;
for (int j = 0; j < noOfRows; j++) {
int xstart = j * boxWidth;
box = new Rect(ystart, xstart, (ystart+boxWidth), (xstart+boxWidth));
int var = mGame.cellStatus(i, j);
switch (var)
{
case -1: paint = fillPaint;
case 0: case 1: case 2: case 3: case 4: paint = shipPaint;
}
canvas.drawRect(box, paint);
canvas.drawRect(box, borderPaint);
}
}
Проблема в том, что я не знаю, как написать метод cellStatus, который должен возвращать -1, если это пустая ячейкаили от 0 до 4, если это часть определенного корабля (всего 5 кораблей.
). Поэтому мне нужно получить данные из класса ShipData, который имеет 4 переменные, т.е. ship [i] = ShipData (size, isHorizontal(слева, сверху), и вычислите, есть ли блок корабля в любой данной ячейке, и раскрасьте ячейку соответствующим образом. В настоящее время каждая ячейка имеет тот же цвет, что и мой метод, который еще не был написан.Поэтому мне нужно проверить (1,4) (2,4) (3,4) и вернуть 0 из cellStatus, но я понятия не имею, как написать cellStatus. Параметры для cellStatus (столбец, строка), и егопубличный int внутри моей игрыclass.
Чтобы уточнить, мой метод cellStatus должен проверить, есть ли блок корабля в любой заданной координате, предположительно, путем чтения из типа переменной класса ShipData.У ShipData есть несколько методов, таких как getLeft, getTop, getRight и getBottom, и я не уверен, как превратить ввод столбца, строки в фактические данные о каждой ячейке, как описано выше.Поэтому вывод cellStatus должен быть равен -1 для пустой ячейки и 0-4 для каждого из 5 кораблей.
Извиняюсь за длинный вопрос, я старался быть как можно точнее.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я предоставлю ее.
К сожалению, мой старый пост не получил никаких ответов, и с тех пор я добился определенного прогресса,
@Override
public int cellStatus(int column, int row) {
int cellStatus = 0;
for (int i = 0; i < 5; i++){
int maxSize = ships[i].getSize();
for (int size = 0; size < maxSize; size++ ) {
ships[i].getLeft();
}
cellStatus = ships[i].getLeft();
}
return cellStatus;
}
Это то, что я получил до сих пор, но я не уверен, как заставить cellStatus возвращать желаемое значение для КАЖДОЙ координаты корабля, я просто не знаю, как перебирать значения, используя startLeft, startTop, ориентацию и т. Д.