![]() |
|
![]() ![]() ![]() |
|
LeSagra |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.11.2011 Репутация: нет Всего: нет |
Здравствуйте! курс подходит к концу и нужно сдавать программки ((: я непрошу чтобы вы мне ее написали, просто помогите чисто теоретически, пишу я на языке Picky некому он незнаком, препод его написал сам... он у нас такой - странный.
В чем заключается задача: Нужно написать консольный морской бой, где все будет 2 игрока и у каждого по полю 10х10, и на каждом из полей корабли, 2 х 3Палубных, 3 х 2Палубных и 15 х 1Палубных. Координаты где ставить корабли будут считаться из файла данные.тхт, и потом координаты выстрелов также будут считаться оттуда, но на данном этапе "разработки" проблема вот в чем: не могу решить как лучше записывать корабли: Вариант 1: инфа в каждой ячейке. будут пустые ячейки с таки миже регистрами(препод неразрешает пользоватся регистрамы с вариантными записями. ТипКорабль рекорд утоплен: булеан; подбитый: булеан; кординатыкорабля: ТипКорординаты; *массив с 2 ячеек в каждой из них еще один массив из 2 ячеек для записи координат начала и конца корабля* енд рекорд; ТипЯчейка рекорд скрыто: булеан; вода: булеан; корабль: ТипКорабль; енд рекорд; Вариант 2: поле не имеет никакого отношения к кораблям для них отдельный ссылочный тип, где будут висеть все корабли и по выстрелу буду проверять каждый из них, но так мне кажется очень долго искать будет, даже если оптимизировать что убитые уже корабли в конец слаживать и в них не искать, тогда в таком формате проверять что рядом нет корабля при постройке поля будет как то "геморно"? 3й Вариант: Ваш вариант. В конце программа должна на печатать что то вроде этого: 1 2 3 4 5 6... 1####УУУ# 2##В##### 3###ПП### 4######## В - Вода(попал в воду) П - Попадание в корабль У - Корабль утоплен. Да и подскажите все что можете, я тут прочитал что лучше сделать ранг 12х12 для проверки принадлежности корабля к рангу, но игровое поле только 10х10, вещи в таком духе п.с: если гдето видите лагуны в описании то пишите, допишу. |
|||
|
||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
Когда я делал такую игрушку. Создавал двух мерный массива целых чисел в них цифра 0 -означала пустую клетку(вода). 1 - одна клетка корабля, 2- попадание в корабль. убит или попадание в корабль определял условием: "если вокруг(по вертикали и горизонтали) цифры 2 больше нет цифр 1, то убит, в противном случае ранен". Создавал дополнительный массив в котором отмечал выстрелы в этом массиве и цифро -0 означает ячейка уже проверена по ней стрелять не надо. цифра 1 означала убитый, 2 раненый корабль, цифра 3 означала ячейки по которой еще не стреляли. Такие же 2 массива создавал для второго игрока. У меня индексы в массиве это и есть координаты расстановки кораблей и координаты для выстрелов. Еще делал рандомную расстановку кораблей в начале игры. Логика выстрелов вначале рандомная, потом в зависимости от ранил или убил начинал обстреливать ячейки вокруг раненого корабля.. и еще после уничтожения корабля нужно было вокруг него отметить ячейки по которым уже не надо стрелять. Добавлено @ 11:13
у меня еще присутствовал 1х 4 палубный.. и 4 х 1 палубных.. но это не столь важно. Главное, чтобы корабли умещались на поле и разделялись пустой клеткой)) Это сообщение отредактировал(а) миг - 6.11.2011, 11:21 --------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Если бы я реализовывал такое, то сделал бы гибрид варианта 1 и варианта 2.
Т.е. каждый корабль хранится в виде отдельной структуры в некотором массиве. А поле представляет собой двумерный массив, каждая клетка которого хранит указатель на корабль, стоящий в этой клетке, или nil - если в этой клетке ничего не стоит. Тогда мы получаем все преимущества обоих способов: по координатам клетки на поле мы сразу можем узнать, какой корабль тут стоит, и наоборот, для каждого корабля мы знаем все его клетки. |
|||
|
||||
LeSagra |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.11.2011 Репутация: нет Всего: нет |
то есть указатель на корабль? позицию в памяти ? или просто "номер" что ему присвою я? если в памяти то тогда нужно будет сколько указателей кк и кораблей? или так: берем переменную типа указатель ей присваиваем где в памяти хранится корабль и в структуре корабля уже описаны клетки что у него есть и какие раненые, да? можете навести пример дикларации указателя для корабля? спасибо, заинтересовал ваш ответ. и как ето будет выгдлядить с разными типами кораблей? тоже нужно динамический указатель в зависимости от каличества палуб?? п.с. сам дуал ето дела что то похожое только место уакзателя "номер" присваевать регистру в динамическом масиве. п.п.с. может я немножко запутался, расскажите детальности. Спасибо ![]() Это сообщение отредактировал(а) LeSagra - 7.11.2011, 11:08 |
|||
|
||||
maxdiver |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
Я вижу себе это так.
Есть запись "Корабль", у которой есть такие поля:
Есть двумерный массив "Поле", каждая ячейка которого - запись "Клетка поля" с полями:
|
|||
|
||||
LeSagra |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.11.2011 Репутация: нет Всего: нет |
а если после конфигурации поля, тоесть выстроить динамический список кораблей и потом от сортировать их, то запись в масиве поле (указатель в памяти) уже будет неверным, да?
Добавлено через 5 минут и 56 секунд тоже нужно проверять был ли выстрел раньше в ячейку, наверно записать корабль как ранг не получится, препод дает координаты выстрелов в файле и как попало, если 2 раза в одно и то самое место нужно игнорировать, а если в ранг корабля то можно весь корабль убить стреляя в одно точку, конечно можно прогонять через уже выстрелившие координаты(отдельный массив) но думаю долго так каждый рас, как то не оперативно. посоветуете записывать корабль ячейками?? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |