Войти Создать аккаунт

Игра «Морской бой» · Шаг 1 из 5

Расставить флот

Флот — десять кораблей: один в четыре палубы, два в три, три в две и четыре однопалубных. Корабль стоит прямо — по строке или по столбцу, — и корабли не касаются друг друга даже углами. Расставлять нужно случайно, иначе противник выучит, где стоят корабли. Но «случайно» в программе — это выбор из списка, и чтобы два верных решения выбирали одно и то же, список должен быть у всех одинаковым.

Что сделать

Расставьте флот случайно: корабли по очереди, каждый — случайным выбором из всех мест, где он встаёт и никого не касается.

Что приходит

  • flot — длины кораблей в порядке расстановки, например [4, 3, 3, 2, 2, 2, 1, 1, 1, 1]

  • n — сторона квадратного моря; клетки — (строка, столбец) от 0 до n − 1

  • sluchay — генератор случайностей, как random.Random

Что вернуть

Список кораблей в порядке flot; корабль — список клеток-кортежей от верхней или левой к нижней или правой.

Допишите функцию rasstavit в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

В игре

Игра зовёт rasstavit дважды в начале партии: для вашего флота и для флота противника. Решите шаг — и корабли встанут каждый раз по-новому.

Без этого шага: флот всегда стоит одинаково — полосками у левого края, и противник знает это так же хорошо, как вы.

Пример

Три корабля — в три, две и одну палубу — на море 5 × 5, генератор с затравкой 7. Для трёхпалубного выписываются все места по правилам из «Подробных правил», и sluchay.choice выбирает одно; клетки вокруг него становятся запретными. Потом так же двухпалубный, потом однопалубный.

Тот же пример кодом
Перед вызовом
import random
Вызов
rasstavit([3, 2, 1], 5, random.Random(7))
Вернуть
[[(1, 1), (1, 2), (1, 3)], [(3, 1), (3, 2)], [(4, 4)]]

Готовая игра →

Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.