2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
||||||
1 | ||||||
Консольный "Морской бой"31.05.2020, 03:48. Показов 3845. Ответов 13
Метки enum, двухмерный массив, игра морской бой, консольное приложение, си для начинающих, типы данных (Все метки)
Доброго времени суток господа. Не так давно узнал что моя сладкая жизнь на первокурсника после сессии так просто не заканчивается. И на мою голову упал курсач по проге .В общем я взял свою волю в кулак и 2 дня смотрел обучающие уроки по теме "Морской бой в консоли СИ". По итогам я написал 285 строчек кода, больше я наверное в жизни в ручную сам не писал.
И на удивление код работает, вот только как сделать дальше я так понять и не могу, в этими обзорами влез в темы, о которых ни малейшего понятия не имею, а сроки горят Осталось доделать: 1) Логоритм генерации кораблей "&". ( На данный момент он записан статично void ship_generate) 2) Изменения символа при выстреле (нажатии Enter). По идеи для реализации нужно еще 2 массива по типу p1_data 3) Ну и в идеале нужно что бы ход второго игрока делал компьютер, но я честно говоря даже представить на данный момент не могу, как это реализовать Если у кого есть несколько минут свободного времени, помогите пожалуйста
0
|
31.05.2020, 03:48 | |
Ответы с готовыми решениями:
13
Консольный морской бой Консольный Морской бой на Си Морской бой на СИ Расстановка кораблей Морской бой |
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
||||||
02.06.2020, 02:38 [ТС] | 2 | |||||
Может у кто-то есть желание помочь не бесплатно. 2й пункт я почти реализовал )
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
||||||
03.06.2020, 06:06 | 3 | |||||
Алгоритм расстановки кораблей в случайном порядке. Тупой как пробка, просто расставляет случайным образом, никакой оптимизации, и да, под ваш код не писал, поскольку заниматься еще и интеграцией никакого желания нет:
1
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
|
03.06.2020, 06:08 [ТС] | 4 |
Больше спасибо, сегодня попробую интегрировать в свой код
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
|
03.06.2020, 08:23 | 5 |
Допустим в массиве filed[10][10] записаны наши корабли, где 0 - означает пустое место, а 1 - палубу корабля.
Тут есть два способа реализации, либо мы создаем параллельный массив shots[10][10], где 0 - ячейка, куда мы можем выстрелить, а 1 - ячейка, куда мы уже стреляли. Либо мы используем сразу массив field[][], считая что можем стрелять по ячейкам с 0 или 1, и отмечая выстрелы другим числом, например, 3 - для попадания в пустое место, и 4 - для попадания по кораблю. Также нам понадобится переменная, в которой мы будем считать количество сделанных выстрелов. Теперь генерируем случайную позицию x и y выстрела, от 0 до 10 Если количество выстрелов не равно 10*10 и если в ячейке shots[y][x] стоит 1, т.е. мы уже стреляли по этим координатам, повторяем цикл. Проверяем можем ли сделать выстрел, стреляем, проверяем попадание по кораблю, ставим shots[y][x] в 1 и увеличиваем число выстрелов на 1. Добавлено через 1 минуту Вообще рекомендую почитать для общего развития.
0
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
||||||
05.06.2020, 03:40 [ТС] | 6 | |||||
Доброй ночи, сегодня наконец то у меня спала депрессия после прошлых неудач и я осилил интеграцию вашей части кода. И я очень вам благодарен
Что касается "второй игрок компьютер" я решил забить, так как и сам уже с трудом понимаю что к чему в моем уже наверное "быдло коде" Осталась последняя просьба к вам, и последняя преграда на моем пути Не могу понять, как мне менять поля на игровом поле ( где стреляют ) P.s. наглеть не буду, но было бы не плохо если бы у вас был код такой же как как и для генерации , только для выстрелов на игровом поле
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
||||||
05.06.2020, 18:07 | 7 | |||||
я уже говорил вам про интеграцию, вот вам пример обстрела всего поля с кораблями:
строка 39 заменяет строки 37, 38
0
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
|
05.06.2020, 18:25 [ТС] | 8 |
Благодарю, сейчас надеюсь солянка заработает )
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
|||||||||||
05.06.2020, 19:29 | 9 | ||||||||||
В таком виде компьютер будет стрелять по нашим кораблям.. вернее по полю до тех пор, пока на поле есть хотя бы 1 клетка, по которой он еще не стрелял. Как минимум нам стоит изменить условие, т.е. чтобы компьютер стрелял до тех пор, пока на поле есть хотя бы одна непотопленная палуба, т.е. нам нужно повторять цикл до тех пор, пока в массиве field[][] есть хотя бы одна ячейка со значением 1:
Конечно, в таком виде испоьзовать этот алгоритм как какое-то подобие ИИ не стоит, посокльку после попадания по кораблю, компьютеру необходимо хотя бы обстрелять соседние клетки и удостовериться, что он полностью потопил корабль.. ну как минимум. По-хорошему, конечно, где-то стоит держать еще и информацию о кораблях, чтобы сразу получать информацию о том потоплен ли корабль, или просто подбит. В принципе у нас уже есть структура, опсиывающая корабль, так что можно при размещении кораблей на поле, просто запоминать эти корабли где-то в массиве, а в структуру добавить поле, которое будет учитывать количество поврежденных или наоборот, целых палуб корабля. Тогда можно просто пробегать по массиву кораблей и смотреть есть ли еще неповрежденные палубы, тогда и проверка на возможность сделать выстрел сокращается в разы, поскольку опросить массив из 10 кораблей куда быстрее, чем все игровое поле 10 на 10. И я уж молчу про какую-то продвинутую логику, вроде деления поля на клетки 4х4, 3х3 и т.д. и планомерный и целеноправленный их обстрел. Добавлено через 29 минут Как вариант, нам известно сколько у нас кораблей и сколько у них палуб, так что мы можем посчитать общее количество палуб всех кораблей на поле и просто стрелять, пока количество поврежденных палуб не станет равным общему числу палуб флота:
0
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
||||||
05.06.2020, 20:48 [ТС] | 10 | |||||
ИИ это вещь интересная, правда у меня почему то не получается интегрировать вывод символов.
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
||||||
05.06.2020, 23:21 | 11 | |||||
Ну.. почти готовый вариант, комп играет сам с собой. Мне сейчас неоткуда взять машину с windows, поэтому реализовать адекватный ввод с клавиатуры не могу, так что пока оставил для пользователя генерацию случайной позиции выстрела:
0
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
|
06.06.2020, 05:43 [ТС] | 12 |
Большое спасибо за почти готовый кодс, правда там все немного по другому реализовано, сложновато понять. Так что, пока курсор не хочет интегрироваться, но надеюсь что завтра у меня наконец то все получиться
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
||||||
06.06.2020, 19:07 | 13 | |||||
Сообщение было отмечено Keitaro_Fox как решение
Решение
1
|
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
|
|
06.06.2020, 19:15 [ТС] | 14 |
Вы просто лучший
0
|
06.06.2020, 19:15 | |
06.06.2020, 19:15 | |
Помогаю со студенческими работами здесь
14
Игра морской бой против компьютера Морской бой. Выбор структуры данных Морской бой. Функция авторасстановки кораблей Не могу найти ошибку(морской бой) Мозг для компьютера в игре морской бой Игра морской бой. Функция проверки - ранен корабль или убит Окно для игры "Морской бой" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |