Как сделать карточную игру на питоне

Добавил пользователь Алексей Ф.
Обновлено: 19.09.2024

Я совершенно не знаком с python, и я понятия не имею, что делать с этой программой.

Я пытаюсь создать мини-карточную игру, которая выполняет следующие

  • Есть шесть игроков.
  • В начале каждой раздачи каждому игроку раздаются четыре карты.
  • Для каждого игрока все пары в руке подаются. Игрок получает одну очко за пару, состоящую из двух карт с рангом менее 10 (при подсчете туза больше 10). Игрок получает два очка для плательщика, состоящего из двух карт с рангом 10 или выше. Если рука как две пары, обе подаются. Игрок получает соответствующие очки (1 или 2) для пары.
  • Рука заканчивается после того, как пары были сброшены. (Игроки на самом деле не вводят вход или не принимают решения. Я сказал вам, что это скучная игра.) Все карты возвращаются в колоду, она перетасовывается и начинается новая рука.
  • После каждого раунда игроки перечисляются в порядке убывания итоговых очков. Если два игрока привязаны к одному количеству очков, они сначала печатаются с наименьшим номером.
  • После шести раундов игра заканчивается. Первый игрок в списке баллов (как определено выше) выигрывает игру

Результат должен выглядеть следующим образом:

В модули, которые у меня есть для этой игры, входят.

У меня большие проблемы с циклами, и я буду благодарен за любую помощь, которую я могу получить, заранее спасибо

Похоже, вы вообще не используете pointsort.py , это нормально, так как я не нуждался в этом для ожидаемого вывода.

Я также изменил drop_pair на drop_pairs и заставил его найти все пары вместо одного. Если он найдет три в своем роде, он стоит 2 балла, а четыре в своем роде стоят 3.

Я не просматривал весь ваш код, и без особого руководства, чем "помощь с циклами", я не могу помочь слишком много, но несколько вещей, которые я заметил:

В python вы можете выполнять итерацию непосредственно над списком, а не итерации от 0 до len-1 и проверки индексов. Например:

Однако иногда вы хотите итерации по ряду последовательных номеров или просто хотите, чтобы какой-то код запускался определенное количество раз, и в этом случае вы можете использовать диапазон (или xrange, который в python 2 более эффективен для больших диапазонов)

Кроме того, если вам не нужна переменная "i" для текущего номера, вы можете использовать имя "_", которое часто переназначается и является хорошим местом для нежелательных данных.

Вы также можете вставлять списки. Это очень полезно, если вы не уверены, сколько у вас будет списков. То есть, если у вас шесть игроков:

Преимущество последних двух примеров состоит в том, что вы можете легко изменить количество игроков в игре, изменив число 6 или даже используя вместо этого переменную. Они также сокращают повторение кода: ваша логика для каждого игрока, имеющего дело с их картами, копируется 6 раз, а между ними меняется только один номер. Это не очень доступно: если вы хотите добавить или удалить игроков, вам придется добавить или удалить много повторяющихся блоков из вашего кода. Вместо этого:

Прежде чем мы начнём программировать что-то полезное на Python, давайте закодим что-нибудь интересное. Например, свою игру, где нужно не дать шарику упасть, типа Арканоида. Вы, скорее всего, играли в детстве во что-то подобное, поэтому освоиться будет просто.

Логика игры

Есть игровое поле — простой прямоугольник с твёрдыми границами. Когда шарик касается стенки или потолка, он отскакивает в другую сторону. Если он упадёт на пол — вы проиграли. Чтобы этого не случилось, внизу вдоль пола летает платформа, а вы ей управляете с помощью стрелок. Ваша задача — подставлять платформу под шарик как можно дольше. За каждое удачное спасение шарика вы получаете одно очко.

Алгоритм

Чтобы реализовать такую логику игры, нужно предусмотреть такие сценарии поведения:

Хитрость в том, что всё это происходит параллельно и независимо друг от друга. То есть пока шарик летает, мы вполне можем двигать платформу, а можем и оставить её на месте. И когда шарик отскакивает от стен, это тоже не мешает другим объектам двигаться и взаимодействовать между собой.

Получается, что нам нужно определить три класса — платформу, сам шарик и счёт, и определить, как они реагируют на действия друг друга. Поле нам самим определять не нужно — для этого есть уже готовая библиотека. А потом в этих классах мы пропишем методы — они как раз и будут отвечать за поведение наших объектов.

Весь кайф в том, что мы всё это задаём один раз, а потом объекты сами разбираются, как им реагировать друг на друга и что делать в разных ситуациях. Мы не прописываем жёстко весь алгоритм, а задаём правила игры — а для этого классы подходят просто идеально.

По коням, пишем на Python

Для этого проекта вам потребуется установить и запустить среду Python. Как это сделать — читайте в нашей статье.

Начало программы

Чтобы у нас появилась графика в игре, используем библиотеку Tkinter. Она входит в набор стандартных библиотек Python и позволяет рисовать простейшие объекты — линии, прямоугольники, круги и красить их в разные цвета. Такой простой Paint, только для Python.

Чтобы создать окно, где будет видна графика, используют класс Tk(). Он просто делает окно, но без содержимого. Чтобы появилось содержимое, создают холст — видимую часть окна. Именно на нём мы будем рисовать нашу игру. За холст отвечает класс Canvas(), поэтому нам нужно будет создать свой объект из этого класса и дальше уже работать с этим объектом.

Если мы принудительно не ограничим скорость платформы, то она будет перемещаться мгновенно, ведь компьютер считает очень быстро и моментально передвинет её к другому краю. Поэтому мы будем искусственно ограничивать время движения, а для этого нам понадобится модуль Time — он тоже стандартный.

Последнее, что нам глобально нужно, — задавать случайным образом начальное положение шарика и платформы, чтобы было интереснее играть. За это отвечает модуль Random — он помогает генерировать случайные числа и перемешивать данные.

Запишем всё это в виде кода на Python:

Мы подключили все нужные библиотеки, сделали и настроили игровое поле. Теперь займёмся классами.

Шарик

Сначала проговорим словами, что нам нужно от шарика. Он должен уметь:

  • задавать своё начальное положение и направление движение;
  • понимать, когда он коснулся платформы;
  • рисовать сам себя и понимать, когда нужно отрисовать себя в новом положении (например, после отскока от стены).


Этого достаточно, чтобы шарик жил своей жизнью и умел взаимодействовать с окружающей средой. При этом нужно не забыть о том, что каждый класс должен содержать конструктор — код, который отвечает за создание нового объекта. Без этого сделать шарик не получится. Запишем это на Python:

Платформа

Сделаем то же самое для платформы — сначала опишем её поведение словами, а потом переведём в код. Итак, вот что должна уметь платформа:

  • двигаться влево или вправо в зависимости от нажатой стрелки;
  • понимать, когда игра началась и можно двигаться.

А вот как это будет в виде кода:

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

От счёта нам нужно только одно (кроме конструктора) — чтобы он правильно реагировал на касание платформы, увеличивал число очков и выводил их на экран:

У нас всё готово для того, чтобы написать саму игру. Мы уже провели необходимую подготовку всех элементов, и нам остаётся только создать конкретные объекты шарика, платформы и счёта и сказать им, в каком порядке мы будем что делать.

Посмотрите, как лаконично выглядит код непосредственно самой игры:

Что дальше

На основе этого кода вы можете сделать свою модификацию игры:

  • добавить второй шарик;
  • раскрасить элементы в другой цвет;
  • поменять размеры шарика; поменять скорость платформы;
  • сделать всё это сразу;
  • поменять логику программы на свою.

Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!
Любишь Python? Зарабатывай на нём!

Получите ИТ-профессию
Получите ИТ-профессию
Получите ИТ-профессию
Получите ИТ-профессию

Что означает ошибка IndentationError: expected an indented block

Самая популярная ошибка у начинающих программистов на Python.


Она может предсказать что угодно, если правильно её настроить.

Кнопка в виде ЛОДКИ

Просто дурь на CSS. Разок можно.

Мини-проект для тех, кому всё ещё просто.


Да, вдвоём тоже можно.

Как добавить интерактивную карту на сайт

Задача на три минуты

Приятная кодовая безделушка.

Как сделать таймер

Таймеров и трекеров полно, но мы сделаем такой, какой нужен именно вам. Это легко.

Для многих Python - это язык для написания веб проектов, машинного обучения или для анализа данных. На самом деле он более функционален и в этой статье мы вам это докажем.

Для реализации игр на Питон мы можем выбрать одну из нескольких библиотек. Можно работать с: Kivy, Tkinter, PyQt или же с любой другой библиотекой, что обеспечивает построение графического интерфейса через Python. Таких библиотек много, но мы возьмем библиотеку PyGame , которая даже своим названием говорит о её предназначении.

PyGame появился в 2000 году. С тех пор на его основе было сделано много интересных проектов . К сожалению, PyGame не универсален и разработка на нём ведется лишь под Андроид устройства.

Настройка проекта

Перед использованием PyGame его нужно установить через терминал. Прописываем команду:

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

Сюда же дописываем отслеживание действий пользователя. Если он закроет окно, то мы будем останавливать программу.

Создание платформера

Для создания платформера потребуется написать куда больше строк кода. Мы прикрепляем весь код проекта ниже. В коде есть комментарии для лучшего понимания:

Также для игры вам потребуются картинки игрока и платформы. Вы можете их скачать ниже.




(фото на задний фон)

Видео на эту тему

Также вы можете просмотреть детальное видео по разработке 2D платформера на Python + PyGame:


Дополнительный курс

На нашем сайте также есть углубленный курс по изучению языка Питон . В ходе огромной программы вы изучите не только язык Питон, но также научитесь создавать веб сайты за счёт веб технологий и фреймворка Джанго. За курс вы изучите массу нового и к концу программы будете уметь работать с языком Питон, создавать на нём полноценные ПК приложения на основе библиотеки Kivy, а также создавать веб сайты на основе библиотеки Джанго.

Больше интересных новостей

Работа с заказчиком: ошибки и решения

Работа с заказчиком: ошибки и решения

10 фильмов и сериалов для программистов

10 фильмов и сериалов для программистов

Где применяется язык Python? Сферы применения

Где применяется язык Python? Сферы применения

10 репозиториев GitHub, которые пригодятся каждому разработчику

10 репозиториев GitHub, которые пригодятся каждому разработчику

В настоящее время я пытаюсь запрограммировать (выпивку) игру под названием “Поездка на автобусе”. Моя проблема прямо сейчас не обязательно заключается в программировании игры, но она генерирует колоду карт без дубликатов. Я просмотрел весь этот форум, чтобы найти его, но единственное, что я нашел, это то, как создавать случайные карты, а не как исключать дубликаты. Это код, который я имею сейчас для создания карт:

Спасибо за вашу помощь, я понял способ, который работает для меня. Я создал def, который выглядит так:

В каждом def, где мне нужно нарисовать карту, я обращаюсь к колоде, прошу одну карточку и разбиваю ее на костюм и лицо снова (что мне нужно для игры). Это выглядит так:

Теперь каждый раз, когда мне нужно брать другую карточку в другой def, я могу просто изменить имена переменных suit1 и face1, чтобы соответствовать 2 и face2 и т.д.

Создайте список карт, а затем выведите произвольный элемент каждый раз:

Затем каждый раз, когда вам нужна новая карта:

Я бы рекомендовал использовать ваши текущие suitnum и массивы cardnum для создания реальной колоды карт, с которой вы случайно выбираете карты. Таким образом, вы можете удалить карты, когда вы их подбираете из массива.

Эта программа является реализацией Блэкджека, которая похожа на то, что играет в казино.

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

Мне нужен совет по следующим темам:

  • Мой метод и подход
  • Эффективность моего кода и возможности его короткого сокращения
  • Реализация ООП
  • Предложения для лучших практик
  • Подход к стилю
  • читабельность
  • Комментарии и методы именования переменных (использование docstring)

Поскольку я новичок в CS и Python, и это моя первая программа OOP, пожалуйста, не стесняйтесь давать мне предложения, которые могли бы помочь мне улучшить мои программы в будущем.

Метод и подход

правильность

Это я и не уверен, что это намеренное поведение или нет, поэтому не стесняйтесь игнорировать их, если они действительно правильны.

В вашей функции find_value, если у пользователя была рука Ace, Ace, Ten, ваш код сказал бы, что у них есть значение 22 (1 + 11 + 10), и, должно быть, мое понимание блэкджека заключается в том, что все тузы могут быть 1 или 11, а не только первый туз

Кроме того, в блэкджеке я уверен, что дилер должен выиграть в галстуке

Это указывает на то, что игрок выигрывает со мной в галстуке.

Захват Исключения - плохая идея

Таким образом, в python достаточно использовать функцию try, но не рекомендуется писать , кроме Exception , так как это будет ловить больше исключений, чем вы, вероятно, захотите. Вы можете определить свои собственные исключения. В этом случае я бы сделал что-то вроде этого

И я бы изменил все разделы обработки ввода, чтобы использовать это новое исключение

Использовать больше функций

Последние 100-строчные строки кода являются своего рода - без обид - большой капельки петель. Многие из них могут быть извлечены из функций. Например, у вас может быть функция getBet, а не все эти вложенные циклы.

Фактически, вы уже знаете, что цикл большого цикла в конце нужно разделить на несколько разделов, ясно, где вы разместили комментарии, вы можете видеть, где начинается и заканчивается какой раздел, каждый из этих разделов я бы реорганизовал в функцию, тогда я бы взял все эти вызовы функций в еще одну функцию, поэтому ваш код окажется связкой функций и определений классов, а затем что-то вроде этого.

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

Внедрение ООП

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

У вас может быть класс общего человека, который имеет метод выбора и имеет поле колоды, и у игрока и дилера наследуется от этого класса, тогда игрок и дилер могут быть переданы желаемой колодой после создания экземпляра. Таким образом, когда дилер рисует карту, игрок не может набрать тот же или в вашем случае, так как нет костюмов, и игрок, и дилер не могут получить 3 3

Подход к стилю

Для стилизации в python рекомендуется следовать pep8 . Есть много инструментов, которые будут форматировать ваш код для соответствия pep8. Autopep8 является хорошим, или если вы используете IDE, у него, вероятно, есть что-то встроенное, чтобы разрешить это.

читабельность

Это было очень хорошо сделано. Большинство имен переменных были описательными, некоторые из которых я бы рекомендовал изменить:

Также как cards1 и cards2 в функции print_board , так как он ясно, что один предназначен для игрока, а другой означает быть дилером

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

Ваши docstrings были хорошими описаниями одной строки, однако ни один из них не описывает, что возвращается, или передаваемые значения. Здесь является хорошим ответом на то, как форматировать ваши докстры.

Читайте также: