Создайте сетку, на которой может передвигаться марсоход, для этого имплементируйте тип MarsGrid. Чтобы безопасно использовать несколько горутин за раз, вам понадобится задействовать мьютекс. Код должен делать нечто подобное:

Теперь измените пример с марсоходом из урока про конкурентность. Вместо только локального обновления координат, марсоход будет использовать объект MarsGrid, переданный в функцию NewRoverDriver. Если марсоход доходит до границ сетки или до какого-то препятствия, он должен двинуться в какое-то другое случайное направление.

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

Теперь вы можете запустить несколько марсоходов через вызов NewRoverDriver и посмотреть, как они перемещаются по сетке.

Сообщение об открытиях

Нам нужно обнаружить жизнь на Марсе, поэтому отправим несколько марсоходов вниз для поиска, они должны будут сообщить нам, когда жизнь будет найдена. Каждой клетке сетки присваивается вероятность жизни, то есть случайное число между 0 и 1000. Если марсоход находит клетку со значением выше 900, возможно, это жизнь, и он должен отправить радио сообщение обратно на Землю.

К несчастью, не всегда можно отправить сообщение сразу, потому что спутники не всегда в нужном положении. Имплементируйте горутину буфера, что получает сообщение, отправленное из марсохода и сохраняет срез в буфер, пока не получится отправить что-то на Землю.

Имплементируйте Земплю (Earth) как горутину, что получает сообщения только периодически (в реальности несколько часов каждый день, но вы можете сделать интервал короче этого). Каждое сообщение должно содержать координаты клетки, где жизнь может быть найдена, а также само значение жизни.

Возможно, вы также захотите назвать каждый марсоход и включить название в сообщение, чтобы было видно, откуда пришло сообщение. Может быть полезно включить название в лог сообщений, выводимых марсоходом, чтобы вы могли отследить прогресс каждого марсохода.

Установите ваши марсоходы так, чтобы они могли свободно заниматься поиском. Посмотрите, что получится!

Понравилась статья?

Поддержи наш проект, чтобы мы могли создать больше хорошего контента!