Программа змейка на питоне код

В этой части изучения Tkinter мы создадим клон игры Nibbles (змейка). Nibbles – это первоначальная версия классической змейки. Впервые ее создали в конце 70х годов. Позже она была перенесена на ПК. В этой игре игрок управляет змейкой. Цель игры – съесть как можно больше яблок.

После каждого съеденного яблока тело змеи увеличивается. Во время движения змейка должна уклоняться от стен и собственного тела.

Этапы разработки игры на Tkinter

Размер каждого соединения змейки – 10 пикселей. Змейка управляется стрелками на клавиатуре. Изначально у змейки есть всего три соединения. Игра начинается мгновенно. Когда игра заканчивается, на экране появляется надпись «Игра Закончена».

Для начало, мы создаем Canvas виджет. Объектами в игре являются изображения. Мы используем методы canvas для создания объектов изображения. Также, мы используем методы canvas для обнаружения объектов на холсте при помощи тегов, и для обнаружения столкновений с другими объектами.

import sys
import random
from PIL import Image , ImageTk
from tkinter import Tk , Frame , Canvas , ALL , NW
class Cons :
BOARD_WIDTH = 300
BOARD_HEIGHT = 300
DELAY = 100
DOT_SIZE = 10
MAX_RAND_POS = 27
class Board ( Canvas ) :
def __init__ ( self ) :
super ( ) . __init__ (
width = Cons . BOARD_WIDTH , height = Cons . BOARD_HEIGHT ,
background = «blue» , highlightthickness = 0
self . initGame ( )
self . pack ( )
def initGame ( self ) :
Инициализация игры.

Змейка за 5 минут на Python

self . inGame = True
self . dots = 3
self . score = 0
# Переменные для передвижения замеи.
self . moveX = Cons . DOT_SIZE
self . moveY = 0
# Изначальные стартовые координаты яблоки.
self . appleX = 100
self . appleY = 190
self . loadImages ( )
self . createObjects ( )
self . locateApple ( )
self . bind_all ( «» , self . onKeyPressed )
self . after ( Cons . DELAY , self . onTimer )
def loadImages ( self ) :
Подгружаем нужные изображения для игры.

self . idot = Image . open ( «dot.png» )
self . dot = ImageTk . PhotoImage ( self . idot )
self . ihead = Image . open ( «head.png» )
self . head = ImageTk . PhotoImage ( self . ihead )
self . iapple = Image . open ( «apple.png» )
self . apple = ImageTk . PhotoImage ( self . iapple )
except IOError as e :
sys . exit ( 1 )
def createObjects ( self ) :
Создание объектов на холсте.
self . create_text (
30 , 10 , text = «Счет: <0>» . format ( self . score ) ,
tag = «score» , fill = «white»
self . create_image (
self . appleX , self . appleY , image = self . apple ,
anchor = NW , tag = «apple»
self . create_image ( 50 , 50 , image = self . head , anchor = NW , tag = «head» )
self . create_image ( 30 , 50 , image = self . dot , anchor = NW , tag = «dot» )
self . create_image ( 40 , 50 , image = self . dot , anchor = NW , tag = «dot» )
def checkAppleCollision ( self ) :
Проверяем, не столкнулась ли голова змеи с яблоком.

apple = self . find_withtag ( «apple» )
head = self . find_withtag ( «head» )
x1 , y1 , x2 , y2 = self . bbox ( head )
overlap = self . find_overlapping ( x1 , y1 , x2 , y2 )
for ovr in overlap :
if apple [ 0 ] == ovr :
self . score += 1
x , y = self . coords ( apple )
self . create_image ( x , y , image = self . dot , anchor = NW , tag = «dot» )
self . locateApple ( )
def moveSnake ( self ) :
Меняем положение змеи на холсте.
dots = self . find_withtag ( «dot» )
head = self . find_withtag ( «head» )
items = dots + head
while z < len ( items ) — 1 :
c1 = self . coords ( items [ z ] )
c2 = self . coords ( items [ z + 1 ] )
self . move ( items [ z ] , c2 [ 0 ] — c1 [ 0 ] , c2 [ 1 ] — c1 [ 1 ] )
self . move ( head , self . moveX , self . moveY )
def checkCollisions ( self ) :
Проверка на столкновение змеи с другими объектами.

Змейка на Python за 5 минут [ Pygame ]

dots = self . find_withtag ( «dot» )
head = self . find_withtag ( «head» )
x1 , y1 , x2 , y2 = self . bbox ( head )
overlap = self . find_overlapping ( x1 , y1 , x2 , y2 )
for dot in dots :
for over in overlap :
if over == dot :
self . inGame = False
self . inGame = False
if x1 > Cons . BOARD_WIDTH — Cons . DOT_SIZE :
self . inGame = False
self . inGame = False
if y1 > Cons . BOARD_HEIGHT — Cons . DOT_SIZE :
self . inGame = False
def locateApple ( self ) :
Распределяем яблоки по холсту (canvas).
apple = self . find_withtag ( «apple» )
self . delete ( apple [ 0 ] )
r = random . randint ( 0 , Cons . MAX_RAND_POS )
self . appleX = r * Cons . DOT _ SIZE
r = random . randint ( 0 , Cons . MAX_RAND_POS )
self . appleY = r * Cons . DOT_SIZE
self . create_image (
self . appleX , self . appleY , anchor = NW ,
image = self . apple , tag = «apple»
def onKeyPressed ( self , e ) :
Управляем змеей через стрелки клавиатуры.
key = e . keysym
LEFT_CURSOR_KEY = «Left»
if key == LEFT_CURSOR_KEY and self . moveX <= 0 :
self . moveX = — Cons . DOT_SIZE
self . moveY = 0
RIGHT_CURSOR_KEY = «Right»
if key == RIGHT_CURSOR_KEY and self . moveX >= 0 :
self . moveX = Cons . DOT_SIZE
self . moveY = 0
RIGHT_CURSOR_KEY = «Up»
if key == RIGHT_CURSOR_KEY and self . moveY <= 0 :
self . moveX = 0
self . moveY = — Cons . DOT_SIZE
DOWN_CURSOR_KEY = «Down»
if key == DOWN_CURSOR_KEY and self . moveY >= 0 :
self . moveX = 0
self . moveY = Cons . DOT_SIZE
def onTimer ( self ) :
Создает игровой цикл для каждого события таймера
self . drawScore ( )
self . checkCollisions ( )
if self . inGame :
self . checkAppleCollision ( )
self . moveSnake ( )
self . after ( Cons . DELAY , self . onTimer )
self . gameOver ( )
def drawScore ( self ) :
Рисуем счет игры
score = self . find_withtag ( «score» )
self . itemconfigure ( score , text = «Счет: <0>» . format ( self . score ) )
def gameOver ( self ) :
Удаляем все объекты и выводим сообщение об окончании игры.
self . delete ( ALL )
self . create_text ( self . winfo_width ( ) / 2 , self . winfo_height ( ) / 2 ,
text = «Игра закончилась со счетом <0>» . format ( self . score ) , fill = «white» )
class Snake ( Frame ) :
def __init__ ( self ) :
super ( ) . __init__ ( )
self . master . title ( ‘Змейка’ )
self . board = Board ( )
self . pack ( )
nib = Snake ( )
root . mainloop ( )
if __name__ == ‘__main__’ :

Читайте также:
Топ программ для прослушивания музыки на Андроид

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

  • BOARD_WIDTH и BOARD_HEIGHT обозначают размер игрового поля.
  • DELAY – скорость игры;
  • DOT_SIZE — размер яблока и соединения змейки;
  • MAX_RAND_POS – создание случайной точки для яблока.

Метод iniGame() инициализирует переменные, загружает изображения игры и запускает функцию таймера.

self . createObjects ( )
self . locateApple ( )

Метод createObject() создает объекты на холсте, а locateApple() устанавливает яблоко на случайную точку на холсте.

self . bind_all ( «» , self . onKeyPressed )

Создаем игру-змейку, используя модуль Turtle в Python.

Создаем игру-змейку, используя модуль Turtle в Python.

Змеиная игра – это аркадная игра-лабиринт, разработанная Gremlin Industries и опубликованная Sega в октябре 1976 года. Она считается искусной игрой и популяризируется среди людей на протяжении поколений. Змейка в игре Snake управляется с помощью четырех кнопок направления относительно направления, в котором она движется. Цель игрока в игре — набрать как можно больше очков, собирая еду или фрукты. Игрок проигрывает, когда змея ударяется о стену или сама себя.

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

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

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

Также для этой программы можно использовать VSCode. Установите Python3 из расширения VSCode. Затем сохраните программу в виде your_filename.py.

Ниже приведен пошаговый подход к созданию игры «Змейка» с использованием модуля «Черепаха»:
Шаг 1: Мы будем импортировать модули в программу и задавать значения по умолчанию для игры.

import turtle import time import random delay = 0.1 score = 0 high_score = 0

Шаг 2: Теперь мы создадим отображение игры, то есть экран окна игры, где мы создадем голову змеи и еду для змеи в игре и будем отображать результаты в верхней части.

# Creating a window screen wn = turtle.Screen() wn.title(«Snake Game») wn.bgcolor(«blue») # the width and height can be put as user’s choice wn.setup(width=600, height=600) wn.tracer(0) # head of the snake head = turtle.Turtle() head.shape(«square») head.color(«white») head.penup() head.goto(0, 0) head.direction = «Stop» # food in the game food = turtle.Turtle() colors = random.choice([‘red’, ‘green’, ‘black’]) shapes = random.choice([‘square’, ‘triangle’, ‘circle’]) food.speed(0) food.shape(shapes) food.color(colors) food.penup() food.goto(0, 100) pen = turtle.Turtle() pen.speed(0) pen.shape(«square») pen.color(«white») pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write(«Score : 0 High Score : 0″, align=»center», font=(«candara», 24, «bold»))

Создаем игру-змейку, используя модуль Turtle в Python.

Шаг 3: Теперь мы будем проверять ключ для движений змеи. Нажимая на ключевые слова, обычно используемые для игр «w», «a», «s» и «d», мы можем управлять движениями змеи по экрану.

# assigning key directions def group(): if head.direction != «down»: head.direction = «up» def godown(): if head.direction != «up»: head.direction = «down» def goleft(): if head.direction != «right»: head.direction = «left» def goright(): if head.direction != «left»: head.direction = «right» def move(): if head.direction == «up»: y = head.ycor() head.sety(y+20) if head.direction == «down»: y = head.ycor() head.sety(y-20) if head.direction == «left»: x = head.xcor() head.setx(x-20) if head.direction == «right»: x = head.xcor() head.setx(x+20) wn.listen() wn.onkeypress(group, «w») wn.onkeypress(godown, «s») wn.onkeypress(goleft, «a») wn.onkeypress(goright, «d»)

Читайте также:
Какой оператор в программе организует ввод данных

Шаг 4: Теперь, наконец, мы создадим игровой процесс, в котором будет происходить следующее:

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

segments = [] # Main Gameplay while True: wn.update() if head.xcor() > 290 or head.xcor() < -290 or head.ycor() >290 or head.ycor() < -290: time.sleep(1) head.goto(0, 0) head.direction = «Stop» colors = random.choice([‘red’, ‘blue’, ‘green’]) shapes = random.choice([‘square’, ‘circle’]) for segment in segments: segment.goto(1000, 1000) segments.clear() score = 0 delay = 0.1 pen.clear() pen.write(«Score : <>High Score : <> «.format( score, high_score), align=»center», font=(«candara», 24, «bold»)) if head.distance(food) < 20: x = random.randint(-270, 270) y = random.randint(-270, 270) food.goto(x, y) # Adding segment new_segment = turtle.Turtle() new_segment.speed(0) new_segment.shape(«square») new_segment.color(«orange») # tail colour new_segment.penup() segments.append(new_segment) delay -= 0.001 score += 10 if score >high_score: high_score = score pen.clear() pen.write(«Score : <> High Score : <> «.format( score, high_score), align=»center», font=(«candara», 24, «bold»)) # Checking for head collisions with body segments for index in range(len(segments)-1, 0, -1): x = segments[index-1].xcor() y = segments[index-1].ycor() segments[index].goto(x, y) if len(segments) > 0: x = head.xcor() y = head.ycor() segments[0].goto(x, y) move() for segment in segments: if segment.distance(head) < 20: time.sleep(1) head.goto(0, 0) head.direction = «stop» colors = random.choice([‘red’, ‘blue’, ‘green’]) shapes = random.choice([‘square’, ‘circle’]) for segment in segments: segment.goto(1000, 1000) segment.clear() score = 0 delay = 0.1 pen.clear() pen.write(«Score : <>High Score : <> «.format( score, high_score), align=»center», font=(«candara», 24, «bold»)) time.sleep(delay) wn.mainloop()
Полный код программы :
# import required modules import turtle import time import random delay = 0.1 score = 0 high_score = 0 # Creating a window screen wn = turtle.Screen() wn.title(«Snake Game») wn.bgcolor(«blue») # the width and height can be put as user’s choice wn.setup(width=600, height=600) wn.tracer(0) # head of the snake head = turtle.Turtle() head.shape(«square») head.color(«white») head.penup() head.goto(0, 0) head.direction = «Stop» # food in the game food = turtle.Turtle() colors = random.choice([‘red’, ‘green’, ‘black’]) shapes = random.choice([‘square’, ‘triangle’, ‘circle’]) food.speed(0) food.shape(shapes) food.color(colors) food.penup() food.goto(0, 100) pen = turtle.Turtle() pen.speed(0) pen.shape(«square») pen.color(«white») pen.penup() pen.hideturtle() pen.goto(0, 250) pen.write(«Score : 0 High Score : 0″, align=»center», font=(«candara», 24, «bold»)) # assigning key directions def group(): if head.direction != «down»: head.direction = «up» def godown(): if head.direction != «up»: head.direction = «down» def goleft(): if head.direction != «right»: head.direction = «left» def goright(): if head.direction != «left»: head.direction = «right» def move(): if head.direction == «up»: y = head.ycor() head.sety(y+20) if head.direction == «down»: y = head.ycor() head.sety(y-20) if head.direction == «left»: x = head.xcor() head.setx(x-20) if head.direction == «right»: x = head.xcor() head.setx(x+20) wn.listen() wn.onkeypress(group, «w») wn.onkeypress(godown, «s») wn.onkeypress(goleft, «a») wn.onkeypress(goright, «d») segments = []

Источник: uproger.com

Создание игры-змейки с помощью Python

Здравствуйте, читатели, давайте создадим игру на Python. Да, вы не ослышались! Мы будем создавать простую игру-змейку, используя библиотеку pygame.

Вспомните старые времена, когда все играли в культовую игру про змей. Давайте возродим те старые времена и построим их самостоятельно! Итак, в этом уроке мы будем создавать эту культовую игру.

Итак, приступим к созданию нашей игры. Мы будем делать это шаг за шагом, чтобы получить четкое представление о каждой части игры и ее назначении в нашей игре! Итак, приступим:

Импорт библиотек

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

import pygame import time import random

pygame: эта библиотека поможет нам получить все графические компоненты для сборки игры.

random: эта библиотека поможет нам создавать еду в случайных местах в игре.

Читайте также:
Какие программы используют в ресторанах

время: Это помогает нам использовать в игре функции, связанные со временем, например скорость змейки.

Запуск игры и настройка графики

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

pygame.init()

Затем мы хотели бы определить цвета, которые мы будем использовать в игре, с помощью обозначений RGB. Получите коды RGB из Интернета и поместите их в качестве координат для цветовых переменных. Мы определили 6 цветов в нашей игре, но вы можете использовать любой цвет по вашему выбору. Убедитесь, что цветовые комбинации подходят для игры.

white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213)

Затем мы должны определить размер дисплея, на котором будет работать наша игра. Итак, в этом случае мы должны определить высоту 600 пикселей и ширину 800 пикселей.

width = 800 height = 600

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

dis = pygame.display.set_mode((width, height)) pygame.display.set_caption(‘Shubham Snake Game’)

Определение переменных, используемых в игре

Теперь мы инициализируем нашу переменную часов, которая будет использовать пакет времени, который мы импортировали ранее. Эта переменная «часы» позаботится обо всех связанных со временем запросах в нашем полном коде.

clock = pygame.time.Clock()

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

snake_block = 10 snake_speed = 12

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

font_style = pygame.font.SysFont(“bahnschrift”, 25) score_font = pygame.font.SysFont(“comicsansms”, 35)

Определение вспомогательных функций

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

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

Приведенная ниже функция принимает счет как параметр, который она отображает. Мы посчитаем счет позже в нашей программе.

def Your_score(score): value = score_font.render(«Your Score: » + str(score), True, yellow) dis.blit(value, [0, 0]

Далее мы будем определять нашу змею. Без змеи наша игра не имеет значения. Итак, давайте сделаем самую важную часть нашей игры — змею. Мы определим цвет и положение змеи и ее размер, то есть snake_block.

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

def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])

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

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

def message(msg, colour): mesg = font_style.render(msg, True, colour) dis.blit(mesg, [width / 6, height / 3])

Создание игрового цикла

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

Начнем с определения двух логических переменных: game_over и game_close. Они будут описывать состояния игры.

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

game_over = False game_close = False

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru