- 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;
}
Вот некоторые полезные функции из игры «Морской Бой», которую я зачем-то написал.
MAKAKA 21.11.2020 16:09 # +1
bootcamp_dropout 21.11.2020 22:42 # +1
1024-- 21.11.2020 16:18 # 0
bormand 21.11.2020 16:54 # +1
oaoaoammm 21.11.2020 17:39 # 0
А ещё мне показалось, что проще оперировать кораблями как объектами.
Вот захочется тебе удалить корабль, который ты поставил... Придётся проверять какая у него ориентация, потом в обе стороны шагать по полю и стирать клеточки (я обычно всегда проёбываюсь и шагаю слишком далеко)... А так выкидываешь инстанс из вектора и нормально.
bormand 21.11.2020 20:52 # 0
Lure Of Chaos 22.11.2020 14:58 # 0
bormand 22.11.2020 15:32 # +1
Но проверка расставленных юзером кораблей станет намного сложнее, да. Придётся форму распознавать а не просто полоски.
Lure Of Chaos 22.11.2020 15:37 # 0
понадобится нейронка
bormand 22.11.2020 15:43 # +1
И блокчейн!
На самом деле, он тут даже в тему -- надо посчитать хеш от поля перед началом игры и передать противнику. Тогда переставлять корабли посреди игры уже не выйдет.
Lure Of Chaos 22.11.2020 15:46 # +1
bormand 22.11.2020 15:39 # +1
Lure Of Chaos 22.11.2020 15:41 # +1
runnonomaM 22.11.2020 16:20 # 0
Lure Of Chaos 22.11.2020 16:43 # +2
bormand 22.11.2020 18:29 # 0
Или он прям всегда с первого раза добивал, никогда не промахиваясь?
Fainal_kantdaun 23.11.2020 08:54 # +1
bormand 23.11.2020 08:56 # +1
Fainal_kantdaun 23.11.2020 08:57 # +2
bormand 23.11.2020 09:18 # +1
Fainal_kantdaun 23.11.2020 10:53 # +2
Мне после той игры было непривычно играть в другие реализации морского боя. Я удивлялся возросшей вероятности победы.
bormand 23.11.2020 10:54 # +2
Какой анскилл )))
Можно же псевдорандомом по диагоналям чтобы по-быстрому найти длинные корабли и отбросить как можно больше пустых клеток.
oaoaoammm 23.11.2020 10:58 # 0
bormand 23.11.2020 10:59 # 0
oaoaoammm 23.11.2020 11:02 # 0
В итоге получилось так, что половина назвала число меньшее, чем там было, а половина – большее, а среднее арифметическое было очень близко к фактическому количеству питушни, так что вполне возможно )))
bormand 23.11.2020 11:08 # +1
Возможно и тут человек будет раскидывать единички подальше друг от друга "чтобы случайно не попали" и т.п.
oaoaoammm 23.11.2020 11:16 # +1
Думаю, если ИИ будет подстраиваться под каждого игрока, то ИИ будет побеждать.
guest3 23.11.2020 22:57 # +1
CHayT 22.11.2020 18:39 # +4
bormand 22.11.2020 18:44 # +1
3.14159265 20.12.2020 14:23 # +1
> на оставшемся широком морском просторе он раскидывал четыре единички
Так это одна из лучших стратегий игры.
MAKAKA 21.11.2020 22:41 # +1
Это на крестах.
На джавке или C# я бы взял enum, на котлине sealed classes
bormand 23.11.2020 09:21 # 0
Я тогда писал в стиле ротоёба олимпиадников из вк.
oaoaoammm 23.11.2020 09:52 # 0
В итоге у меня получился класс GameEngine (синглтон), который общается с гуём. Сам GameEngine использует NetworkingEngine (тоже синглтон), где я сру каждые 500 миллисекунд данными о курсоре оппонента и статусе хода (кликнули ли по полю).
Ещё есть два wxBoard, которые берут указатели на классы Board и отрисовывают доски с кораблями и отметками (попал/ не попал): одна доска для своей питушни, а другая – для чужой.
Всё это я пытался обернуть в RAII, но, т.к. это была лаба в конце семестра, по достижении более или менее нормального результата (в визуальном плане) я всё это забросил.
bormand 23.11.2020 10:00 # +1
Какой киберспорт )))
oaoaoammm 23.11.2020 10:05 # +1
bormand 23.11.2020 10:14 # 0
oaoaoammm 23.11.2020 10:28 # 0
Клиент ждёт, пока не придёт true и два индекса, по которым стреляет противник, а затем отправляет success_code: промахнулся, ранил или убил (если убил, то начинается передача данных корабля другому игроку, чтобы он его себе нарисовал).
Вот такой вот багор )))
MAKAKA 23.11.2020 22:58 # 0
"тогда" у меня тоже noname01.pas был
guest3 23.11.2020 23:00 # −2
Не беспокойтесь. Попытайтесь следовать нашим советам и ссылкам. Если компьютер является частью локальной сети, отсоедините сетевой кабель, чтобы избежать дальнейшего распространения уёбка.
guest3 28.11.2020 22:13 # −1
CBuHOKYP 20.12.2020 21:21 # −1
3.14159265 20.12.2020 14:27 # +1
Сишка. Массив клеточек. Енум.
KISS во все поля.
guest3 20.12.2020 21:23 # −1
Касперски интернет секурити сетуп?