Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Морской Бой консольный, структура данных. |
Автор: LeSagra 2.11.2011, 19:03 |
Здравствуйте! курс подходит к концу и нужно сдавать программки ((: я непрошу чтобы вы мне ее написали, просто помогите чисто теоретически, пишу я на языке 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, вещи в таком духе п.с: если гдето видите лагуны в описании то пишите, допишу. |
Автор: maxdiver 6.11.2011, 18:03 |
Если бы я реализовывал такое, то сделал бы гибрид варианта 1 и варианта 2. Т.е. каждый корабль хранится в виде отдельной структуры в некотором массиве. А поле представляет собой двумерный массив, каждая клетка которого хранит указатель на корабль, стоящий в этой клетке, или nil - если в этой клетке ничего не стоит. Тогда мы получаем все преимущества обоих способов: по координатам клетки на поле мы сразу можем узнать, какой корабль тут стоит, и наоборот, для каждого корабля мы знаем все его клетки. |
Автор: LeSagra 7.11.2011, 11:05 | ||
то есть указатель на корабль? позицию в памяти ? или просто "номер" что ему присвою я? если в памяти то тогда нужно будет сколько указателей кк и кораблей? или так: берем переменную типа указатель ей присваиваем где в памяти хранится корабль и в структуре корабля уже описаны клетки что у него есть и какие раненые, да? можете навести пример дикларации указателя для корабля? спасибо, заинтересовал ваш ответ. и как ето будет выгдлядить с разными типами кораблей? тоже нужно динамический указатель в зависимости от каличества палуб?? п.с. сам дуал ето дела что то похожое только место уакзателя "номер" присваевать регистру в динамическом масиве. п.п.с. может я немножко запутался, расскажите детальности. Спасибо ![]() |
Автор: maxdiver 8.11.2011, 12:12 |
Я вижу себе это так. Есть запись "Корабль", у которой есть такие поля:
Есть двумерный массив "Поле", каждая ячейка которого - запись "Клетка поля" с полями:
|
Автор: LeSagra 8.11.2011, 12:34 |
а если после конфигурации поля, тоесть выстроить динамический список кораблей и потом от сортировать их, то запись в масиве поле (указатель в памяти) уже будет неверным, да? Добавлено через 5 минут и 56 секунд тоже нужно проверять был ли выстрел раньше в ячейку, наверно записать корабль как ранг не получится, препод дает координаты выстрелов в файле и как попало, если 2 раза в одно и то самое место нужно игнорировать, а если в ранг корабля то можно весь корабль убить стреляя в одно точку, конечно можно прогонять через уже выстрелившие координаты(отдельный массив) но думаю долго так каждый рас, как то не оперативно. посоветуете записывать корабль ячейками?? |