Написать игру Сапёр (Mines) на Python с использованием библиотеки Tkinter оказалось не сложно. В этой статье покажем все этапы создания этой игры, которая массово была представлена публике в Windows 95. Следует отметить, что в Windows 3.11 игра winmine уже была. Но кто теперь это вспомнит?
Создадим поле из кнопок 16х16=256 кнопок.
from tkinter import * from random import choice frm = []; btn = [] # Списки с фреймами и кнопками tk = Tk() tk.title(‘Achtung, Minen!’) for i in range(0, 16): frm.append(Frame()) frm[i].pack(expand=YES, fill=BOTH) for j in range(0, 16): btn.append(Button(frm[i], text=’ ‘, font=(‘mono’, 16, ‘bold’), width=2, height=1,)) btn[i*16+j].pack(side=LEFT, expand=NO, fill=Y) mainloop()
Кнопки размещаются в 16 горизонтальных фреймах. Список btn состоит из 256 кнопок.
Создадим список playArea — игровое поле и переменную счётчик ходов — nMoves. Игровое поле playArea содержит 256 элементов (целые числа). Где число -1 мина, числа 0 . 8 количество мин вокруг клетки. Будем ставить мины на поле после первого хода игрока, с тем, чтобы первый ход не закончился взрывом.
КАК ЧИТАТЬ ИСХОДНЫЕ КОДЫ | СОВЕТЫ ОТ СОЕРА
Каждый ход игрока выводит на нажатую кнопку соответствующее значение из списка playArea и деактивирует кнопку.
from tkinter import * from random import choice frm = []; btn = [] # Списки с фреймами и кнопками playArea = []; nMoves = 0 # Игровое поле и счётчик ходов def play(n): # n — номер нажатой кнопки global nMoves nMoves += 1 if nMoves == 1: # Если это первый ход игрока, i = 0 while i 15: if playArea[i-17] == -1: k += 1 # слева сверху if i < 240: if playArea[i+15] == -1: k += 1 # слева снизу if i not in range(-1, 256, 16): if playArea[i+1] == -1: k += 1 # справа if i >15: if playArea[i-15] == -1: k += 1 # справа сверху if i < 240: if playArea[i+17] == -1: k += 1 # справа снизу if i >15: if playArea[i-16] == -1: k += 1 # сверху if i < 240: if playArea[i+16] == -1: k += 1 # снизу playArea[i] = k btn[n].config(text=playArea[n], state=DISABLED) # Отображаем игровую ситуацию tk = Tk() tk.title(‘Achtung, Minen!’) for i in range(0, 16): # Размещаем кнопки frm.append(Frame()) frm[i].pack(expand=YES, fill=BOTH) for j in range(0, 16): btn.append(Button(frm[i], text=’ ‘, font=(‘mono’, 16, ‘bold’), width=2, height=1, command=lambda n=i*16+j: play(n))) btn[i*16+j].pack(side=LEFT, expand=NO, fill=Y) playArea.append(0) # Создаём элементы списка playArea mainloop()
С такой программой уже можно играть в сапёра, но нет, ставших нам уже привычными, некоторых мелочей:
- Вместо «0» должна отображаться пустая кнопка с изменённым цветом.
- Вместо «-1» необходимо вывести изображение мины.
- Если мы нарвались на мину:
- необходимо вывести на экран все мины и
- необходимо вывести на экран «Game Over»
- в дальнейшем не допустить вывод на экран сообщения «You win!»
from tkinter import * from random import choice frm = []; btn = [] # Списки с фреймами и кнопками playArea = []; nMoves = 0 # Игровое поле и счётчик ходов def play(n): # n — номер нажатой кнопки global nMoves nMoves += 1 if nMoves == 1: # Если это первый ход игрока, i = 0 while i 15: if playArea[i-17] == -1: k += 1 # слева сверху if i < 240: if playArea[i+15] == -1: k += 1 # слева снизу if i not in range(-1, 256, 16): if playArea[i+1] == -1: k += 1 # справа if i >15: if playArea[i-15] == -1: k += 1 # справа сверху if i < 240: if playArea[i+17] == -1: k += 1 # справа снизу if i >15: if playArea[i-16] == -1: k += 1 # сверху if i < 240: if playArea[i+16] == -1: k += 1 # снизу playArea[i] = k btn[n].config(text=playArea[n], state=DISABLED) # Отображаем игровую ситуацию if playArea[n] == 0: btn[n].config(text=’ ‘, bg=’#ccb’) elif playArea[n] == -1: if nMoves < (256 — 40): # Если игрок ещё не выиграл, то проиграл tk.title(‘Your game is over.’) nMoves = 256 # Если проиграл, то уже не выиграет for i in range(0, 256): if playArea[i] == -1: btn[i].config(text=’u2665′) if nMoves == (256 — 40): # Если все клетки открыты, это победа tk.title(‘You win!’) def marker(n): # помечаем клетку под которой возможно скрывается мина. btn[n].config(text=’u2661′) tk = Tk() tk.title(‘Achtung, Minen!’) for i in range(0, 16): # Размещаем кнопки frm.append(Frame()) frm[i].pack(expand=YES, fill=BOTH) for j in range(0, 16): btn.append(Button(frm[i], text=’ ‘, font=(‘mono’, 16, ‘bold’), width=2, height=1, command=lambda n=i*16+j: play(n))) btn[i*16+j].pack(side=LEFT, expand=NO, fill=Y) btn[i*16+j].bind(», lambda event, n=i*16+j: marker(n)) playArea.append(0) # Создаём элементы списка playArea mainloop()
Онлайн чат на Python в 100 строк кода!
Добавим кнопку «New game» и взрывы мин в случае поражения.
# Mines # This is my version of the game, known as mines or Minesweeper. # # Created on June 25, 2021. # Author: Diorditsa A. # I thank Sergey Polozkov for checking the code for hidden errors. # # mines.py is distributed in the hope that it will be useful, but # WITHOUT WARRANTY OF ANY KIND; not even an implied warranty # MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See. See the GNU General Public License for more information. # You can get a copy of the GNU General Public License # by link http://www.gnu.org/licenses/ from tkinter import * from random import choice frm = []; btn = [] # Списки с фреймами и кнопками playArea = []; nMoves = 0; mrk=40 # Игровое поле, счётчик ходов и маркеров def play(n): # n — номер нажатой кнопки global nMoves, mrk nMoves += 1 if nMoves == 1: # Если это первый ход игрока, tk.title(‘Achtung, ‘+str(mrk)+’ Minen!’) i = 0 while i 15: if playArea[i-17] == -1: k += 1 # слева сверху if i < 240: if playArea[i+15] == -1: k += 1 # слева снизу if i not in range(-1, 256, 16): if playArea[i+1] == -1: k += 1 # справа if i >15: if playArea[i-15] == -1: k += 1 # справа сверху if i < 240: if playArea[i+17] == -1: k += 1 # справа снизу if i >15: if playArea[i-16] == -1: k += 1 # сверху if i < 240: if playArea[i+16] == -1: k += 1 # снизу playArea[i] = k btn[n].config(text=playArea[n], state=DISABLED) # Отображаем игровую ситуацию if playArea[n] == 0: btn[n].config(text=’ ‘, bg=’#ccb’) elif playArea[n] == -1: btn[n].config(text=’u2665′) if nMoves ‘, lambda event, n=i*16+j: marker(n)) playArea.append(0) # Создаём элементы списка playArea tk.update() Button(tk, text=’New game’, font=(16), # Создаём кнопку «New game» command=newGame).pack(side=LEFT, expand=YES, fill=Y) btnBG = btn[0].cget(‘bg’) # Запоминаем цвет кнопки по умолчанию mainloop()
# Mines # This is my version of the game, known as mines or Minesweeper. # # Created on June 25, 2021. # Author: Diorditsa A. # I thank Sergey Polozkov for checking the code for hidden errors? # # mines.py is distributed in the hope that it will be useful, but # WITHOUT WARRANTY OF ANY KIND; not even an implied warranty # MARKETABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See. See the GNU General Public License for more information. # You can get a copy of the GNU General Public License # by link http://www.gnu.org/licenses/ from tkinter import * from random import choice import time frm = []; btn = [] # Списки с фреймами и кнопками xBtn = 16; yBtn = 16 # Размеры поля (количество кнопок) playTime = 0 # Время игры mines = xBtn * yBtn * 10 // 64 # Количество мин imgMark = ‘u2661’; imgMine = ‘u2665’ # Символ маркера и мины playArea = []; nMoves = 0; mrk=0 # Игровое поле, счётчик ходов и маркеров tk = Tk() tk.title(‘Achtung, Minen!’) tk.geometry(str(44*xBtn)+’x’+str(44*yBtn+10)) def play(n): # n — номер нажатой кнопки global xBtn, yBtn, mines, nMoves, mrk, playTime if len(playArea) < xBtn*yBtn: # Если поле ещё не создано return() nMoves += 1 if nMoves == 1: # Если это первый ход игрока, playTime = time.time() i = 0 while ixBtn-1: if playArea[i-xBtn-1] == -1: k += 1 # слева сверху if i < xBtn*yBtn-xBtn: if playArea[i+xBtn-1] == -1: k += 1 # слева снизу if i not in range(-1, xBtn*yBtn, xBtn): if playArea[i+1] == -1: k += 1 # справа if i >xBtn-1: if playArea[i-xBtn+1] == -1: k += 1 # справа сверху if i < xBtn*yBtn-xBtn: if playArea[i+xBtn+1] == -1: k += 1 # справа снизу if i >xBtn-1: if playArea[i-xBtn] == -1: k += 1 # сверху if i < xBtn*yBtn-xBtn: if playArea[i+xBtn] == -1: k += 1 # снизу playArea[i] = k if btn[n].cget(‘text’) == imgMark: # Если поле было промаркировано mrk -= 1 tk.title(‘Achtung, ‘+str(mines-mrk)+’ Minen!’) btn[n].config(text=playArea[n], state=DISABLED, bg=’white’) # Отображаем игровую ситуацию if playArea[n] == 0: # Пустое поле без соседей btn[n].config(text=’ ‘, bg=’#ccb’) elif playArea[n] == -1: # Ой мина! btn[n].config(text=imgMine) if nMoves = mrk: # Если игрок ещё не выиграл, то проиграл nMoves = 32000 # Если проиграл, то уже не выиграет chainReaction(0) # Цепная реакция tk.title(‘Your game is over.’) if nMoves == (xBtn*yBtn — mines) and mines == mrk: # Если все клетки открыты и мины помечены tk.title(‘You win! ‘+str(int(time.time() — playTime))+’ сек’) winner(0) def chainReaction(j): # Цепная реакция if j 256: btn[i].config(font=(‘mono’, 8, ‘normal’)) btn[i].config(command=lambda n=i: play(n)) btn[i].bind(», lambda event, n=i: marker(n)) btn[i].pack(side=LEFT, expand=YES, fill=BOTH, padx=0, pady=0) btn[i].update() playArea.append(0) # Создаём элементы списка playArea frmTop = Frame() # Создаём кнопки «New game» frmTop.pack(expand=YES, fill=BOTH) Label(frmTop, text=’ Новая игра: ‘).pack(side=LEFT, expand=NO, fill=X, anchor=N) Button(frmTop, text=’5×5′, font=(16), command=set5x5).pack(side=LEFT, expand=YES, fill=X, anchor=N) Button(frmTop, text=’8×8′, font=(16), command=set8x8).pack(side=LEFT, expand=YES, fill=X, anchor=N) Button(frmTop, text=’10×14′, font=(16), command=set10x14).pack(side=LEFT, expand=YES, fill=X, anchor=N) Button(frmTop, text=’16×16′, font=(16), command=set16x16).pack(side=LEFT, expand=YES, fill=X, anchor=N) Button(frmTop, text=’32×32’, font=(16), command=set32x32).pack(side=LEFT, expand=YES, fill=X, anchor=N) mainloop()
Рис. Игра Сапёр с полем 32х32
- Вы здесь:
- Главная
- Робототехника
- Пишем игру Сапёр на Python
- Игра Сапёр v3 на Python
- Игра Flip-Flop v3
- Lines98
- Микрофон
- Калькулятор v3
- Где ест уж v3
- Транзистор и фоторезистор.
- Датчик препятствий
- Игровое поле из Button
- Игра Memory
- Датчик инфракрасных импульсов
- Типы C++
- 3-D модель катушки ротора
- ESP32-C3 Wi-Fi точка доступа
- ESP32-C3 FTM
- ESP32-C3 Sigma-Delta модуляция
- Установка Arduino IDE для ESP32-C3
- ESP32-C3 analogReadMilliVolts
- ESP32-C3 Serial.print
- ledcWriteNote для ESP-C3-Kit
- Плата ESP-C3-32S Kit
- ШИМ в ESP-C3 Kit
- Программа Blink для ESP-C3 Kit
- Подключение ESP-C3-Kit к Arduino IDE
- Плата ESP-C3-13 Kit
- Калькулятор с tkinter
- Драйвер моторов MX1508
- Калькулятор на Arduino
- Raspberry Pi Pico Python SDK
- Raspberry Pi Pico C/C++ SDK
- Программирование на MMBASIC
- PicoMiteVGA
- Сервопривод и Ардуино
- Arduino машина с ИК управлением
- Двигатель постоянного тока
- ИК пульт ДУ
- Ультразвуковой дальномер HC-SR04
- АЦП и ШИМ в Arduino
- Крестики нолики v2.0
- Программа для музыкальной шкатулки
- Ханойские башни, игра
- Flip-Flop 4×4 и ООП
- AT90S2013 с внешним генератором
- Игра Кто быстрее
- Игра головоломка Peg
- Поход в пустыню
- Оригинальная игра Сапёр
- Программирование ATtiny861
- Программирование AT90S2013
- StringVar или ООП
- Клеточный автомат Конвея
- Flip-Flop 4×4 .
- ООП, after() функция задержки в tkinter
- Программирование AtTiny 13, 45, 85
- Игра-головоломка Где ест уж
- Игра-головоломка Чайный сервиз
- Пишем игру Flip-Flop v2
- Игра Быки и коровы на Python v2
- Крестики нолики
- Python сортировка
- Игра Красный или Синий?
- Индикатор 788BS
- Python Факториал
- Генератор псевдослучайных чисел
- Датчик температуры в ATtiny88
- Serial порт в ATtiny88
- Пишем библиотеку для MAX7219 и LED матрицы
- MAX7219 и Arduino
- Прерывания PCINT в Arduino
- Функция sleep() в Arduino для ATtiny88
- ATtiny88 datasheet на русском
- Фьюзы ATtiny88
- Arduino Fading and Blink
- Алгоритм Евклида. Нахождение НОД
- Python Числа Фибоначчи
- Python Tkinter игра Пикассо и Модильяни
- Ищем программатор для STM 32F030F4P6
- Python Tkinter игра Раскраска
- Пишем игру Быки и Коровы на Python
- Головоломка Ханойские башни на Python
- Головоломка Ханойские башни на Си
- Пишем игру Сапёр на Python
- Raspberry Pi Pico fading.py
- LCD МТ-16S2H и LiquidCrystal_74HC595
- EasyEDA для инженеров-электронщиков
- LCD МТ-16S2H и LiquidCrystalRus
- Raspberry Pi Pico и MicroPython
- Пишем игру пятнашки на Python
- Пишем игру на Python
- ESP8266 версии плат
- Регистр К155ИР13
- Linux или FreeBSD
- Триггеры
- Счетчик импульсов на 7493
- Счетчик импульсов на D-триггерах
- Цифровые индикаторы с общим катодом
- ATtiny88 программируем в Arduino IDE
- Конденсатор в кружке Робототехника
- Генератор на 555-м таймере
- Генератор НЧ на LM358
- Tkinter виджеты
- Pydoc в Python
- LM358 управление голосом
- Несимметричный мультивибратор
- QX5252F схема включения
- DC-DC uk преобразователь на QX5252
- DC-DC преобразователь на QX5252
- Python с Pygame обработка столкновений
- Логика в Python
- Сова на телевизор
- Транзисторы p-n-p и n-p-n
- IDLE
- Thonny установка и настройка
- Timer/Counter1 ATmega328
- Arduino IDE
- ATMEGA8
- Прерывания по таймерам в Arduino
- DC-DC преобразователь
- LED лампа светодиодная
- MOSFET
- Концепция музыкальной программы для Arduino
- Стробоскоп на 555-м таймере
- ШИМ на 555-м таймере
- ШИМ управление мощностью нагрузки
- Вентилятор для CPU и Arduino
- ATmega328P
- Храним константы в Flash-памяти программ
- Храним константы в EEPROM
- Параметры по умолчанию
- Цикл for in в Arduino
- Драйвер MAX7219 и светодиодная матрица 8х8
- WS2811 и RGB светодиод
- Assembler в Arduino
- Python Gtk игра Раскраска
- LGT8F328P в Arduino IDE
- Адрес i2c
- Музыкальная шкатулка
- LCD 1602 i2c и Arduino
- Корпус VESA для Orange Pi PC 2
- Blink для адресуемых RGB светодиодов
- ESP8266-01 Web-сервер
- ESP8266 прошивка AT-espressif
- Edragon, ESP firmware
- Esptool
- ESP8266 в Arduino IDE
- ESP8266-01 подключение USB-UART
- ESP8266-01 AT интерпретатор
- CuteCom монитор порта
- ESP8266-01 подключение
- SSD1306 IIC print()
- ATMega328 в Arduino без кварца
- Фьюзы в Arduino UNO
- Программирование Arduino Pro Mini
- L7805 стабилизатор напряжения
- MLX90614 — ИК термометр
- Датчик ИК импульсов
- Arduino-Hava Nagila
- Arduino-Финская полька
- Arduino-Гимн РФ
- Arduino-Григ В пещере Горного Короля
- heaptrack профилировщик памяти
- Консольная программа на Visual J#
- Консольная программа на C#
- Консольная программа на Visual Basic.NET
- Blender на русском
- Arduino Digispark ATTiny85
- cairo.Context object Деформации
- cairo.Context object Фигуры Лиссажу
- cairo.Context object Движение по криволинейной траектории
- cairo.Context object Пинг-понг по стенкам
- cairo.Context object Загружаем картинку
- cairo.Context object Трансформация прямоугольных координат
- cairo.Context object Штриховые линии
- cairo.Context object Шар с радиальной заливкой
- cairo.Context object Градиентная заливка
- cairo.Context object Сдвигаем и вращаем начало координат
- cairo.Context object Начало координат
- cairo.Context object Сглаживание контура изображения или шрифта
- cairo.Context object Углы соединения линий
- cairo.Context object Рисуем линии
- Gtk Drawin Area и GObject
- Gtk Drawin Area и PangoCairo
- Python Gtk окно с текстом
- Python Gtk игра Flip-Flop
- Python Gtk Крестики — нолики
- Anjuta Gtk Python Кнопка
- Visual Studio Code редактор
- Vala язык программирования
- Anjuta Gtk Python
- Glade Gtk Python сигналы
- Glade Gtk Python
- Python графическая библиотека Turtle
- Python графическая библиотека GTK
- Python графическая библиотека Tkinter
- Инкубатор
- Пример программы на Python с библиотекой Pygame
- Создание игр на Python с Pygame
- Классическая игра Жизнь
- Игра Жизнь на дисплее SSD1306 и Arduino
- SSD1306 Display
- Импульсный регулятор мощности на Ардуино
- Оператор switch case. Электронная игра на Arduino.
- Игра инверсия
- Android пишем программу на C++
- Цикл while. Алгоритм Евклида.
- Geany пишем программу на C++
- Как скомпилировать cpp под Linux
- Схема преобразователя напряжения на транзисторе
- Схема фонарика с 2-мя батарейками
- Author Login
- Карта сайта
Источник: adior.ru
Простые игры для кодирования на Python
Сегодня мы научимся кодировать несколько простых игр, используя распространенные модули Python.
Сегодня мы научимся кодировать несколько простых игр, используя распространенные модули Python.
Почему мы используем Python?
Python – это известный язык программирования. Python код очень легко понять и написать. Считается, что он удобен для разработчиков. Любой новичок может научиться кодировать на Python в течение короткого промежутка времени.
Вот некоторые из самых интересных особенностей этого языка:
- Python – это язык с открытым исходным кодом и распространяется свободно
- Портативный и динамический
- Python супер легко понять и т. д.
Создание простых игр в Python
Давайте теперь реализуем несколько простых игр в Python, которые вы можете построить как новичок, чтобы начать свой путь обучения!
1. Игра викторина в Python
Это очень простая текстовая игра на Python. Это маленькая викторина, которую вы можете сделать для себя или своих друзей. Нам не нужно импортировать какие-либо модули для этой игры, что облегчает её! Попробуйте сами.
- Оператор if-else – Для проверки ответов
- Оператор print – для печати выходов
print(‘Welcome to AskPython Quiz’) answer=input(‘Are you ready to play the Quiz ? (yes/no) :’) score=0 total_questions=3 if answer.lower()==’yes’: answer=input(‘Question 1: What is your Favourite programming language?’) if answer.lower()==’python’: score += 1 print(‘correct’) else: print(‘Wrong Answer :(‘) answer=input(‘Question 2: Do you follow any author on AskPython? ‘) if answer.lower()==’yes’: score += 1 print(‘correct’) else: print(‘Wrong Answer :(‘) answer=input(‘Question 3: What is the name of your favourite website for learning Python?’) if answer.lower()==’askpython’: score += 1 print(‘correct’) else: print(‘Wrong Answer :(‘) print(‘Thankyou for Playing this small quiz game, you attempted’,score,»questions correctly!») mark=(score/total_questions)*100 print(‘Marks obtained:’,mark) print(‘BYE!’)
Welcome to AskPython Quiz Are you ready to play the Quiz ? (yes/no) :yes Question 1: What is your Favourite programming language?python correct Question 2: Do you follow any author on AskPython? yes correct Question 3: What is the name of your favourite website for learning Python?askpython correct Thankyou for Playing this small quiz game, you attempted 3 questions correctly!
Marks obtained: 100.0 BYE!
2. Игра в Pong на Python
Большинство из нас слышали о знаменитой игре в Pong. Многие из нас любят играть.
Сегодня мы научимся кодировать эту классическую игру с помощью языка программирования python!
Прежде чем начать кодировать, необходимо установить модуль turtle. Этот модуль представляет собой библиотеку Python, которая позволяет пользователям создавать картины и фигуры, предоставляя им виртуальный холст.
Если у вас его еще нет, вы можете установить библиотеку, используя pip.
C:UsersAdmin>pip install turtle
Вы можете узнать больше о библиотеке turtle из их официальной документации
Попробуйте код самостоятельно!
import turtle as t playerAscore=0 playerBscore=0 #create a window and declare a variable called window and call the screen() window=t.Screen() window.title(«The Pong Game») window.bgcolor(«green») window.setup(width=800,height=600) window.tracer(0) #Creating the left paddle leftpaddle=t.Turtle() leftpaddle.speed(0) leftpaddle.shape(«square») leftpaddle.color(«white») leftpaddle.shapesize(stretch_wid=5,stretch_len=1) leftpaddle.penup() leftpaddle.goto(-350,0) #Creating the right paddle rightpaddle=t.Turtle() rightpaddle.speed(0) rightpaddle.shape(«square») rightpaddle.color(«white») rightpaddle.shapesize(stretch_wid=5,stretch_len=1) rightpaddle.penup() rightpaddle.goto(-350,0) #Code for creating the ball ball=t.Turtle() ball.speed(0) ball.shape(«circle») ball.color(«red») ball.penup() ball.goto(5,5) ballxdirection=0.2 ballydirection=0.2 #Code for creating pen for scorecard update pen=t.Turtle() pen.speed(0) pen.color(«Blue») pen.penup() pen.hideturtle() pen.goto(0,260) pen.write(«score»,align=»center»,font=(‘Arial’,24,’normal’)) #code for moving the leftpaddle def leftpaddleup(): y=leftpaddle.ycor() y=y+90 leftpaddle.sety(y) def leftpaddledown(): y=leftpaddle.ycor() y=y+90 leftpaddle.sety(y) #code for moving the rightpaddle def rightpaddleup(): y=rightpaddle.ycor() y=y+90 rightpaddle.sety(y) def rightpaddledown(): y=rightpaddle.ycor() y=y+90 rightpaddle.sety(y) #Assign keys to play window.listen() window.onkeypress(leftpaddleup,’w’) window.onkeypress(leftpaddledown,’s’) window.onkeypress(rightpaddleup,’Up’) window.onkeypress(rightpaddledown,’Down’) while True: window.update() #moving the ball ball.setx(ball.xcor()+ballxdirection) ball.sety(ball.ycor()+ballxdirection) #border set up if ball.ycor()>290: ball.sety(290) ballydirection=ballydirection*-1 if ball.ycor() 390: ball.goto(0,0) ball_dx = ball_dx * -1 player_a_score = player_a_score + 1 pen.clear() pen.write(«Player A: <> Player B: <> «.format(player_a_score,player_b_score),align=»center»,font=(‘Monaco’,24,»normal»)) os.system(«afplay wallhit.wav) if(ball.xcor()) < -390: # Left width paddle Border ball.goto(0,0) ball_dx = ball_dx * -1 player_b_score = player_b_score + 1 pen.clear() pen.write(«Player A: <>Player B: <> «.format(player_a_score,player_b_score),align=»center»,font=(‘Monaco’,24,»normal»)) os.system(«afplay wallhit.wav) # Handling the collisions with paddles. if(ball.xcor() > 340) and (ball.xcor() < 350) and (ball.ycor() < paddle_right.ycor() + 40 and ball.ycor() >paddle_right.ycor() — 40): ball.setx(340) ball_dx = ball_dx * -1 os.system(«afplay paddle.wav) if(ball.xcor() < -340) and (ball.xcor() >-350) and (ball.ycor() < paddle_left.ycor() + 40 and ball.ycor() >paddle_left.ycor() — 40): ball.setx(-340) ball_dx = ball_dx * -1 os.system(«afplay paddle.wav)
3. Игра Hungry Snake на Python
Это была наша любимая игра, когда мы были детьми. На самом деле мы можем реализовать эту игру в python, импортируя всего два модуля! Как это круто!
Во-первых, нам нужно установить библиотеку turtle. Если у вас она еще не установлена, откройте свой cmd и введите следующую команду.
C:UsersAdmin>pip install turtle
Теперь мы установим случайное модуль. Случайный модуль используется для генерации случайных чисел. В вашем типе CMD в следующей команде.
Теперь мы установим модуль random2. Модуль random2 используется для генерации случайных чисел. Выполните в cmd следующую команду.
C:UsersAdmin>pip install random2
Попробуйте сами код ниже и наслаждайтесь игрой!
import turtle import random w = 500 h = 500 food_size = 10 delay = 100 offsets = < «up»: (0, 20), «down»: (0, -20), «left»: (-20, 0), «right»: (20, 0) >def reset(): global snake, snake_dir, food_position, pen snake = [[0, 0], [0, 20], [0, 40], [0, 60], [0, 80]] snake_dir = «up» food_position = get_random_food_position() food.goto(food_position) move_snake() def move_snake(): global snake_dir new_head = snake[-1].copy() new_head[0] = snake[-1][0] + offsets[snake_dir][0] new_head[1] = snake[-1][1] + offsets[snake_dir][1] if new_head in snake[:-1]: reset() else: snake.append(new_head) if not food_collision(): snake.pop(0) if snake[-1][0] > w / 2: snake[-1][0] -= w elif snake[-1][0] < — w / 2: snake[-1][0] += w elif snake[-1][1] >h / 2: snake[-1][1] -= h elif snake[-1][1] < -h / 2: snake[-1][1] += h pen.clearstamps() for segment in snake: pen.goto(segment[0], segment[1]) pen.stamp() screen.update() turtle.ontimer(move_snake, delay) def food_collision(): global food_position if get_distance(snake[-1], food_position) < 20: food_position = get_random_food_position() food.goto(food_position) return True return False def get_random_food_position(): x = random.randint(- w / 2 + food_size, w / 2 — food_size) y = random.randint(- h / 2 + food_size, h / 2 — food_size) return (x, y) def get_distance(pos1, pos2): x1, y1 = pos1 x2, y2 = pos2 distance = ((y2 — y1) ** 2 + (x2 — x1) ** 2) ** 0.5 return distance def go_up(): global snake_dir if snake_dir != «down»: snake_dir = «up» def go_right(): global snake_dir if snake_dir != «left»: snake_dir = «right» def go_down(): global snake_dir if snake_dir!= «up»: snake_dir = «down» def go_left(): global snake_dir if snake_dir != «right»: snake_dir = «left» screen = turtle.Screen() screen.setup(w, h) screen.title(«Snake») screen.bgcolor(«blue») screen.setup(500, 500) screen.tracer(0) pen = turtle.Turtle(«square») pen.penup() food = turtle.Turtle() food.shape(«square») food.color(«yellow») food.shapesize(food_size / 20) food.penup() screen.listen() screen.onkey(go_up, «Up») screen.onkey(go_right, «Right») screen.onkey(go_down, «Down») screen.onkey(go_left, «Left») reset() turtle.done()
Заключение
Вот и все! Это некоторые из простых игр в Python, которые вы можете создать как новичок и повеселиться! Мы любили создавать эти игры, и мы надеемся, что у вас тоже получиться!
Читайте ещё по теме:
- Разработка игр Rock Paper Scissors на Python
- Реализация Ханойской башни на Python
- Создайте MineSweeper, используя Python из основных для продвинутых
- Научите своих детей построить собственную игру с Python – 1
- Как я использовал Python, чтобы проанализировать игру престолов
- Улучшите свои навыки Python, кодируя игру змеи
- ПОСЛЕДНЯЯ часть – научите своих детей создавать свою собственную игру с помощью Python.
Источник: pythobyte.com
Использование языка программирования Python вместе с Arduino
В настоящее время Arduino является одной из самых мощных и простых в использовании платформ с открытым исходным кодом. Однако тенденции современного мира таковы, что часто электронными платформами необходимо управлять с помощью высокоуровневого общецелевого языка программирования чтобы сделать их более эффективными и дружественными. Одним из таких языков является Python, который представляет собой интерпретируемый, объектно-ориентированный, высокоуровневый язык программирования с динамической семантикой и высокоуровневыми встроенными структурами данных, что делает его весьма привлекательным для быстрой разработки приложений.
Объединение возможностей Arduino и Python открывает двери для множества новых возможностей, поскольку Python имеет повышенную производительность и умеет взаимодействовать с другими платформами, такими как openCV, Matlab и т. д.
В этой статье мы изучим как установить Python на компьютер и как его использовать вместе с Arduino для включения/выключения встроенного в плату Arduino светодиода.
Установка Python на ваш компьютер
В данном разделе статьи будет рассмотрена установка языка программирования на компьютер с 32 или 64-битной windows. Установка Python на компьютеры под управлением MAC и Linux будет отличаться.
Для установки Python выполните следующую последовательность шагов:
1. Установите 32-битную версию Python 2.7.9 IDLE на ваш компьютер. Не скачивайте 64-битную версию Python или его более свежую версию поскольку они могут быть не совместимы с используемыми нами библиотеками Arduino. Даже если ваш компьютер работает на 64-битной операционной системе, то вы все равно можете использовать на нем 32-битную версию Python.
Примечание : оригинал данной статьи был написан в 2017 году, поэтому, возможно, сейчас Arduino IDE уже поддерживает совместимость с более свежими версиями Python (этот вопрос будет уточняться в дальнейшем).
2. Запустите на выполнение скачанный установочный файл и установите эту версию языка Python на ваш компьютер. Не изменяйте каталог для установки Python, оставьте его по умолчанию — C:Python27.
3. Возможно, во время установки Python на него будет “ругаться” антивирус – не обращайте на это внимание.
После установки Python вы можете проверить действительно ли он установлен на ваш компьютер введя в строке поиска Windows строку “Python IDLE”.
После его запуска вы должны увидеть на экране компьютера “Python shell” (оболочка Python) как показано на следующем рисунке.
Вы можете непосредственно писать программу в этой оболочке или же создать новый файл и писать и проверять программу в нем. Теперь давайте удостоверимся в том, что Python работает. Для этого напечатайте “print (1+1)” и нажмите enter. Вы должны после этого увидеть в оболочке напечатанный результат вычислений – 2.
Установка PySerial в Python
Следующим шагом необходимо установить программу PySerial, которая представляет собой Python API module (модуль прикладного программного интерфейса Python’а), с помощью которого можно считывать и записывать данные в последовательном виде в плату Arduino или любой другой микроконтроллер.
Кликните на Pyserial Windows чтобы скачать PySerial. По приведенной ссылке вы можете скачать установочный файл этого приложения и установить его. Не изменяйте настройки (в том числе и каталог для установки) во время установки приложения – оставьте их по умолчанию.
Теперь давайте убедимся в том, что PySerial корректно установлена и работает. Для этого снова откройте Python Shell и напечатайте в нем “import serial”. Если библиотека успешно установлена, то после этого вы не увидите никаких сообщений об ошибке как показано на следующем рисунке.
Дальнейший материал статьи предполагает что вы хотя бы немного знакомы с платформой Arduino и умеете загружать в нее программы. Если это не так, то советуем ознакомиться с руководством по Arduino для начинающих.
Наша первая совместная программа на Arduino и Python
Как отмечалось ранее, в этой программе мы будем управлять встроенным в плату Arduino светодиодом.
Программа для Arduino
Полный текст программы для платы Arduino приведен в конце статьи, здесь же обсудим наиболее важные его фрагменты.
Внутри функции setup мы инициализируем последовательную связь со скоростью 9600 бод/с и зададим режим работы для контакта, с которого будем управлять светодиодом. Также мы передадим приветственное сообщение в Python при помощи последовательной связи.
Источник: microkontroller.ru