Как сделать игру кости python

Добавил пользователь Владимир З.
Обновлено: 19.09.2024

Ваш друг разработал игру с двумя игроками. Два игрока, называемые A и B, по очереди бросают обычный шестигранный кубик, причем первым бросает A.

Первый игрок, который бросает шестерку, выигрывает игру. Вы и ваш друг не согласны с вероятностью победы А в игре, и поэтому вы решаете смоделировать игру с помощью компьютера.

Таким образом: напишите программу на Python, которая выполняет 10 испытаний, каждое из которых состоит из 10000 игр, и для каждого испытания печатает долю игр, выигранных игроком A.

Это код, который я получил до сих пор, он просто возвращает число около 1667 и каждый раз. Мне в основном интересно, как отличить А или Б от победы в игре.

Любая помощь будет оценена!

Отредактированный код

Лучший способ получить чистый код - разделить по functions каждую из выполняемых задач, что означает:
1. Запустите игру → Для каждого броска костей
2. Запустите игру → Чередование игр между A и B, пока первый не получит 6 на кости (здесь, учитывая, что если A получает 6, B даже не нужно играть, так как A выиграл)
3. Запустите пробную версию → Состоит из определенного количества игр
4. Запустите основную программу → Состоит из воспроизведения всего необходимого количества проб

Ниже приведено одно из возможных решений (здесь вы видите, что моя функция play уже возвращает результат, то есть, выиграл игрок или нет):

Вам действительно нужно только подсчитать выигрыши для игрока A. Поскольку вы играете 10000 игр за пробу, если вы знаете количество игр, которые выиграл A, вы знаете, что другие игры должны быть выиграны B, и A + B = 10000.

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

Вы можете использовать логическое значение isPlayerA чтобы узнать, чья это очередь. Начните с isPlayerA = True а затем переключите его с isPlayerA = not isPlayerA .

Я новичок в изучении Python и изо всех сил пытаюсь создать эту азартную игру с броском в кости. Я потратил на это хорошую неделю, и все еще просто разочарован тем, что не могу заставить его работать должным образом / полностью. В основном мне трудно заставить его правильно распечатать и продолжать спрашивать пользователя о броске костей (от 2 до 12). Заранее благодарю всех за помощь и предложения!

3 ответа

Вы total_bank() метод может вызвать проблемы.

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

ТАКЖЕ вам понадобится много global ключевые слова в этом случае. Хотя использовать его не рекомендуется, но я думаю, что в данном случае это нормально. На самом деле вы не меняете сумму банка - это bank переменная - это локальная переменная, то есть вы не можете получить к ней доступ за пределами total_bank функция. Тебе придется вернуться bank каждый раз, когда вы это называете.

Итак, код должен быть

Однако это может не подходить для ваших целей. Например, вы можете посмотреть лимитную ставку и т. Д. Я просто упрощаю это.

Что-то вроде этого - то, что вы ДЕЙСТВИТЕЛЬНО можете захотеть, но я не уверен.

Надеюсь, что это ответ на ваш вопрос!

Струны F

F-строки заменяют все, что находится в волнистых скобках <>, значением выражения, например, возвращаемым значением из функции или просто любой переменной / значением:

В вашей функции prog_info операторы печати на самом деле не нуждаются в F-строках, однако такие строки должны использовать F-строки, поскольку вам нужно подставлять значения в:

Игровой цикл

Вы можете реализовать цикл while True с оператором if внутри для выхода, если какое-либо из ваших условий не выполнено

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

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

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

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

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

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

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

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

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

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




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

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

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


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

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

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

9 топовых фреймворков AngularJS в 2021 году

9 топовых фреймворков AngularJS в 2021 году

5 команд терминала, которые должны знать все

5 команд терминала, которые должны знать все

Разработчик-полиглот: зачем знать несколько языков программирования?

Разработчик-полиглот: зачем знать несколько языков программирования?

Почему Python – лучший выбор для машинного обучения

Почему Python – лучший выбор для машинного обучения

Создание игры Arkanoid на PyGame Zero

В данной статье мы расскажем, как при помощи Python и PyGame Zero можно быстро и легко написать клон игры Арканоид (Breakout).

Содержание статьи

Что ж, приступим!

Весь код, который будет использоваться в данном руководстве, доступен по ссылке.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Изображения были взяты с Kenney. На данном сайте есть множество клевых бесплатных ассетов для создания игры. Обязательно зацените его!

Установка Pygame Zero

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

Здесь мы импортируем Pygame Zero. Переменная TITLE — это заголовок отображаемого окна, а переменные WIDTH и HEIGHT определяют ширину и высоту данного окна соответственно.

Метод pgzrun.go() запускает программу.

Вы должны увидеть пустое окно:

Игра Арканоид на Python

Давайте попробуем отобразить несколько игровых блоков.

Добавим следующий код под высотой и шириной:

Actor отвечает за то, как Pygame Zero будет показывать картинки. Изображения всегда хранятся в папке images , которая находится в том же месте, где расположен скрипт игры.

Мы также указываем начальные позиции x и y для тех изображений, которые будут загружены:

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

Итак, у нас есть изображения, загруженные в память, однако они пока не отображаются. Давайте это исправим. В Pgzero есть встроенная функция draw() , которая вызывается автоматически при запуске игры. Есть также функция update , которая вызывается 60 раз в секунду и обновляет экран по мере вашего движения.

По сути, у нашей игры будет 60 FPS.

Функции update() и draw() в Pgzero

Функции update и draw похожи — разница лишь в том, что update вызывается 60 раз в секунду, в то время как draw вызывается только в тех случаях, когда что-то нужно изменить, нарисовать…

Здесь нет никаких строгих правил, но я бы использовал функцию update для вещей, которые часто меняются. Например, для стенки с кирпичиками и мячика. В то время как для фоновых изображений можно использовать draw .

Создание двигающейся панели и мячика

Для начала воспользуемся функцией draw() , а update() пока оставим пустой:

Игра Арканоид на Python

Давайте сделаем еще кое-что. Вам не кажется, что сейчас фон очень скучный? Давайте сделаем его немного повеселее.

Обновим функцию draw() :

В качестве фона мы используем файл background.jpg , который находится в папке images . Функция blit() рисует наше изображение на экране. Кортеж (0,0) является стартовой позицией, где x=0 и y=0 . Систему координат в Pygame Zero мы обсудим немного позже.

Игра Арканоид на Python

Создание стенки с кирпичиками для игры Арканоид

Сейчас мы займемся созданием стенки с кирпичиками, которых будет сбивать мяч.

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

Игра Арканоид на Python

Очевидно, что строить стенку по одному кирпичику за раз будет очень долго и муторно. Давайте используем цикл for, чтобы упростить задачу.

Здесь мы создаем начальные переменные для координат x и y — bar_x инициализируется на 120 , а bar_y — на 100 .

Мы выполняем цикл 8 раз. Почему 8? Потому что именно столько кирпичиков мы можем удобно разместить на экране.

Для каждого цикла мы создаем объект Actor , инициализируем его координаты x и y и рисуем все на экране. Затем делаем следующее:

Игра Арканоид на Python

Неплохо. Теперь нужно разложить все остальные кирпичи. Я планирую построить 3 ряда, причем цвет каждого будет отличаться.

Первым делом я хочу превратить приведенный выше код в удобную функцию:

Здесь я поместил использованный раннее код в функцию place_blue_bars() .

Я мог бы создать больше функций наподобие create_red_bars() и так далее, но, думаю, будет лучше использовать более умный подход.

Итак, у нас будет общая функция place_bars() :

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

Передадим начальные координаты x и y первого кирпичика, а также изображение, которое мы будем использовать. Конечная функция выглядит следующим образом:

Единственное изменение заключается в том, что мы инициализируем x , y и изображение из полученных входных данных.

coloured_box_list = [ "element_blue_rectangle_glossy.jpg" , "element_green_rectangle_glossy.jpg" , "element_red_rectangle_glossy.jpg" ]

У нас есть список с 3 изображениями. Мы инициализируем значения x и y . Затем делаем цикл for по списку:

Нам нужно сделать y += 50 в каждом цикле, иначе кирпичики будут располагаться друг над другом.

Нам нужно сделать еще кое-что. Создадим кирпичики, но отображать их не будем. Обновим функцию draw() :

Игра Арканоид на Python

Теперь у нас есть красивый макет. Наконец-то можно заняться логикой!

Добавление физики для двигающейся панели

Давайте начнем с добавления физики для нижней панели. Нам нужно, чтобы игрок мог двигать данный элемент туда-сюда, стараясь отбить мячик. В Pygame Zero это сделать очень просто — вы можете просто проверить события клавиатуры напрямую. Давайте обновим функцию update() :

if keyboard.left проверяет, нажата ли левая стрелка на клавиатуре, и если да, то изменяет x-позицию двигающейся панели на -5 (то есть перемещает ее влево на 5 пикселей). И то же самое происходит для правой стрелки на клавиатуре.

Почему я выбрал 5 пикселей? Чтобы найти баланс между слишком быстрым/медленным перемещением. Попробуйте изменить значения на 1 и 10 и посмотрите, что получится.

Нажмите на левую и правую стрелки — теперь вы можете перемещать нижнюю панель.

Добавление физики для движения мячика в игре

Помните, что встроенный метод update() вызывается 60 раз в секунду. Поэтому любая игровая логика, например, перемещение мяча, проверка столкновений (коллизии) и тому подобное, будет происходить здесь.

Мы создадим новую функцию update_ball() , которую будем вызывать из функции update() .

Таким образом мы меняем позиции x и y для мяча.

Система координат в Pygame Zero

Система координат в PyGame Zero

Координаты верхней левой части экрана — 0, 0 то есть x=0, y=0 .

Если вы двигаетесь вправо, то значение x возрастает.

Если вниз, то возрастает значение y .

При движении влево, уменьшается x . При движении вправо, увеличивает x .

Для передвижения вниз, увеличиваем y . Вверх — уменьшаем y .

Учитывая все это:

ball.x -= 1 двигает мяч влево (так как -1 = влево, +1 = вправо)

ball.y -= 1 двигает мяч вверх (так как -1 = вверх, +1 = вниз)

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

Мяч за пределами экрана! Вот незадача!

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

Давайте добавим проверку.

Сначала добавим глобальную переменную для скорости x и y . Добавьте эти глобальные переменные в верхнюю часть файла:

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

Python предоставляет встроенную библиотеку под названием pygame, которая использовалась для разработки игр. Как только мы поймем базовые концепции языка программирования, мы сможем разработать игру на Python с библиотекой Pygame с привлекательной графикой, подходящей анимацией и звуком.

Pygame – это кроссплатформенная библиотека, которая используется для разработки видеоигр. Она включает компьютерную графику и звуковые библиотеки. Она разработана Питом Шиннерсом для замены PySDL.

Установка Pygame

Откройте терминал командной строки и введите следующую команду, чтобы установить pygame.

Простой пример Pygame

Вот следующий пример создания простого окна pygame.

Как разработать игру на Python

Вся графика будет отображаться в окне pygame.

Давайте разберемся с основным синтаксисом вышеуказанной программы.

import pygame – это модуль, который позволяет нам работать со всеми функциями pygame.

pygame.init() – используется для инициализации всех необходимых модулей pygame.

pygame.display.set_mode((ширина, высота)) – используется для изменения размера окна. Он вернет объект поверхности. Объект поверхности используется для выполнения графических операций.

pygame.QUIT – используется для закрытия события, когда мы нажимаем крестик в углу окна.

pygame.display.flip() – используется для отображения любого обновления игры. Если мы внесем какие-либо изменения, нам нужно будет вызвать функцию display.flip().

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

Давайте разберемся со следующим примером рисования фигуры на экране.

Рисование фигуры на экране

В приведенном выше примере мы нарисовали различные формы, такие как треугольник, прямая линия, прямоугольник, эллипс, круг, дуга, закрашенный круг и овал. Мы использовали функцию pygame.draw в соответствии с формой с подходящими аргументами.

Пример – разработка игры Snake с использованием Pygame

Выход разработки игры Snake

Мы можем играть снова, нажав кнопку ОК. Мы можем увидеть наш результат в терминале Pycharm(мы использовали Pycharm IDE; вы можете использовать любую Python IDE).

Код игры

Скопируйте приведенный выше код и вставьте его в свою среду IDE и получайте удовольствие. Чтобы понять концепции Pygame, посетите наш полный учебник по Pygame.

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