- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
ShipType Ship::getShipTypeByLength(int length)
{
switch (length) {
case 1: return BOAT;
case 2: return CRUISER;
case 3: return DESTROYER;
case 4: return BATTLESHIP;
case 5: return AIRCRAFT_CARRIER;
default:
std::cout << "No ship meets the given length: " << length << std::endl;
return ERROR_SHIP;
}
}
int Ship::getShipLengthByType(ShipType type)
{
switch (type) {
case BOAT: return 1;
case CRUISER: return 2;
case DESTROYER: return 3;
case BATTLESHIP: return 4;
case AIRCRAFT_CARRIER: return 5;
default:
std::cout << "No ship meets the given type: " << type << std::endl;
return 0;
}
}
int Ship::getShipAmountByType(ShipType type)
{
switch (type) {
case BOAT: return 4;
case CRUISER: return 3;
case DESTROYER: return 2;
case BATTLESHIP: return 1;
case AIRCRAFT_CARRIER: return 1;
default:
std::cout << "No ship meets the given type: " << type << std::endl;
return 0;
}
}
Coordinates Ship::getFirstBlockCoordinatesByShipData(int x, int y, int length, Orientation orientation)
{
Coordinates result;
if (orientation == HORIZONTAL) {
result.x = x - (length / 2);
result.y = y;
} else {
result.x = x;
result.y = y - (length / 2);
}
return result;
}
Coordinates Ship::getLastBlockCoordinatesByShipData(int x, int y, int length, Orientation orientation)
{
Coordinates result;
if (orientation == HORIZONTAL) {
result.x = x + (length / 2) + (length % 2) - 1;
result.y = y;
} else {
result.x = x;
result.y = y + (length / 2) + (length % 2) - 1;
}
return result;
}
Вот некоторые полезные функции из игры «Морской Бой», которую я зачем-то написал.
А ещё мне показалось, что проще оперировать кораблями как объектами.
Вот захочется тебе удалить корабль, который ты поставил... Придётся проверять какая у него ориентация, потом в обе стороны шагать по полю и стирать клеточки (я обычно всегда проёбываюсь и шагаю слишком далеко)... А так выкидываешь инстанс из вектора и нормально.
Но проверка расставленных юзером кораблей станет намного сложнее, да. Придётся форму распознавать а не просто полоски.
понадобится нейронка
И блокчейн!
На самом деле, он тут даже в тему -- надо посчитать хеш от поля перед началом игры и передать противнику. Тогда переставлять корабли посреди игры уже не выйдет.
Или он прям всегда с первого раза добивал, никогда не промахиваясь?
Мне после той игры было непривычно играть в другие реализации морского боя. Я удивлялся возросшей вероятности победы.
Какой анскилл )))
Можно же псевдорандомом по диагоналям чтобы по-быстрому найти длинные корабли и отбросить как можно больше пустых клеток.
В итоге получилось так, что половина назвала число меньшее, чем там было, а половина – большее, а среднее арифметическое было очень близко к фактическому количеству питушни, так что вполне возможно )))
Возможно и тут человек будет раскидывать единички подальше друг от друга "чтобы случайно не попали" и т.п.
Думаю, если ИИ будет подстраиваться под каждого игрока, то ИИ будет побеждать.
> на оставшемся широком морском просторе он раскидывал четыре единички
Так это одна из лучших стратегий игры.
Это на крестах.
На джавке или C# я бы взял enum, на котлине sealed classes
Я тогда писал в стиле ротоёба олимпиадников из вк.
В итоге у меня получился класс GameEngine (синглтон), который общается с гуём. Сам GameEngine использует NetworkingEngine (тоже синглтон), где я сру каждые 500 миллисекунд данными о курсоре оппонента и статусе хода (кликнули ли по полю).
Ещё есть два wxBoard, которые берут указатели на классы Board и отрисовывают доски с кораблями и отметками (попал/ не попал): одна доска для своей питушни, а другая – для чужой.
Всё это я пытался обернуть в RAII, но, т.к. это была лаба в конце семестра, по достижении более или менее нормального результата (в визуальном плане) я всё это забросил.
Какой киберспорт )))
Клиент ждёт, пока не придёт true и два индекса, по которым стреляет противник, а затем отправляет success_code: промахнулся, ранил или убил (если убил, то начинается передача данных корабля другому игроку, чтобы он его себе нарисовал).
Вот такой вот багор )))
"тогда" у меня тоже noname01.pas был
Не беспокойтесь. Попытайтесь следовать нашим советам и ссылкам. Если компьютер является частью локальной сети, отсоедините сетевой кабель, чтобы избежать дальнейшего распространения уёбка.
Сишка. Массив клеточек. Енум.
KISS во все поля.
Касперски интернет секурити сетуп?