Comments 16
ООП у вас не используется);
Я бы запускал генерацию бомб после получения от игрока координат первого хода, чтобы исключить ситуацию случайного попадания в бомбу на первом ходу;
Как по мне, для хранения игрового поля удобнее использовать словарь, вот так:
map = {}
map[(x, y)] = 'M'
Сначала спасибо за комментарий!
1 - Насчет ООП согласен, поставил тэг, потому что хотел написать сразу две сатьи про игру “Сапёр” (консоль и Gui) и в Gui есть немного от ООП, поэтому и добавил, но согласен, что в этой статье его нет, поэтому уже убрал.
2 – Звучит логично и мне нравиться эта идея, поэтому постараюсь в скором времени поменять, но до вашего комментария я даже не думал об этом
3 – Честно, когда писал пришло в голову множество set(), чтобы не было повторов, но сейчас согласен можно и даже лучше использовать словарь. Исправлю!
А где тут про GUI? Только ради него открыл статью. В консоле такое сделать дело не хитрое.
get_bomb_count()
Что там происходит? "Ввидите два число" - на каком языке? Почему "два число", если вводится только одно. Что за магические числа 40.5 и 39.5, а логика проверки вообще непонятна.
if abs(count_of_bomb - 40.5) > 39.5:
continue
1 - Насчет ввода извиняюсь, так как при копирование из строчки в строчку не заметил ошибку в тексте, уже исправил, спасибо (вводить нужно одно число)
2 - Этот код пытается отсечь крайние значения count_of_bomb.
Если count_of_bomb меньше 1 (40.5 - 39.5 = 1) или больше 80 (40.5 + 39.5 = 80), то условие срабатывает, и такое значение игнорируется, то есть допустимый диапазон для count_of_bomb — от 1 до 80. Согласен, что проще вот так if count_of_bomb < 1 or count_of_bomb > 80
, поэтому в финальном варианте оставлю так.
Спасибо за комментарий и если есть еще вопросы или жалобы пишите
if abs(count_of_bomb - 40.5) > 39.5: continue
не могу представить, что может побудить написать проверку на 80 именно так. Чатик надиктовал?
Присутствуют вопросы, касающиеся преимущественно магических цифр и не использования псевдоконстант.
Гораздо удобнее, когда можно вынести постоянные в коде переменные либо в отдельный файл с последующим подключением его в основной код.
Магические числа, которые не поясняют зачем они нужны или по какой логике они были сюда подставлены. Методом подбора?
...
# Проверяем диапазон координат (1-9)
if abs(x - 5.5) > 4.5 or abs(y - 5.5) > 4.5:
print("Координаты должны быть от 1 до 9!")
continue
...
Волшебство, не иначе!
Согласен с замечанием. Действительно, использование 'магических чисел' снижает читаемость кода и усложняет его поддержку, но как писал в сообщении выше увидел этот способ и решил повторить. Всегда можно использовать простой метод и что будет правильным с точки 'чистоты кода', например вот такой:
Min = 1
MAX = 9
if not (Min <= x <= Max) or not (Min <= y <= Max):
print(f"Координаты должны быть от {Min} до {Max}!")
Ну или что-то похожие
...
# Проверяем диапазон координат (1-9)
if abs(x - 5.5) > 4.5 or abs(y - 5.5) > 4.5:
print("Координаты должны быть от 1 до 9!")
continue
...
Тем более такой вариант будет работать не так как ожидается: |1-5.5|=4,5; |9-5.5|=4.5, а 4,5 не > 4,5. Жертвовать читаемостью, чтобы сократить на одно сравнение думаю того вообще не стоит. Также при проверке условий стоит тестировать граничные значения, в данном случае для интервала 1...9 - это 0;2 и 8;10
Честно говоря не видел эту статью, но я не считаю, что это плохо, а наоборот хорошо, так как в самих правилах хабр написано, что если вы видели похожую статью или информацию, не надо сразу говорить, что скопировал или что-то ещё сделал плохое, а нужно просто посмотреть в ней что-то интересное и уникально, чего не было у другого автора, и написать, что не понравилось и что хорошо получилось, чтобы была инициатива продолжать свой труд.
Я думаю, что это касается и моей статьи, потому что я не говорю, что написал что-то гениально или чего не видел мир, а наоборот, что это один из простых способов написать игру, чтобы каждый мог повторить сам или просто запустить мой код для себя.
А так я рад, что в хабр есть люди, которые стремятся улучшить свой код до идеала и минимализма, как человек, который написал игру в 66 строк.
От консоли к GUI: Как написать игру «Сапёр» на Python с нуля версия консоли (часть первая)