Найти - Пользователи
Полная версия: Как изменить скорость змейки
Начало » Python для новичков » Как изменить скорость змейки
1
lada0807
[code python]from tkinter import *
import random

# ширина экрана
WIDTH = 800
# высота экрана
HEIGHT = 600
# размер сегмента змейки
SEG_SIZE = 20
# переменная отвечающая за состояние игры
IN_GAME = True


# Helper functions
def create_block():
""" Создаём блок в случайном позиции на карте """
global BLOCK
posx = SEG_SIZE * random.randint(1, (WIDTH-SEG_SIZE) / SEG_SIZE)
posy = SEG_SIZE * random.randint(1, (HEIGHT-SEG_SIZE) / SEG_SIZE)
# блок это кружочек красного цвета
BLOCK = c.create_oval(posx, posy,
posx+SEG_SIZE, posy+SEG_SIZE,
fill="red")


def main():
""" Обрабатывает игровой процесс """
global IN_GAME
if IN_GAME:
# двигаем змейку
s.move()
# определяем координаты головы
head_coords = c.coords(s.segments[-1].instance)
x1, y1, x2, y2 = head_coords
# Столкновение с границами экрана
if x2 > WIDTH or x1 < 0 or y1 < 0 or y2 > HEIGHT:
IN_GAME = False
# Поедание яблок
elif head_coords == c.coords(BLOCK):
s.add_segment()
c.delete(BLOCK)
create_block()
# Самоедство
else:
# Проходим по всем сегмантам змеи
for index in range(len(s.segments)-1):
if head_coords == c.coords(s.segments[index].instance):
IN_GAME = False
root.after(100, main)
# Если не в игре выводим сообщение о проигрыше
else:
c.create_text(WIDTH/2, HEIGHT/2,
text="Игра окончена!",
font="Arial 20",
fill="red")


class Segment(object):
""" Single snake segment """
def __init__(self, x, y):
self.instance = c.create_rectangle(x, y,
x+SEG_SIZE, y+SEG_SIZE,
fill="white")


class Snake(object):
""" Simple Snake class """
def __init__(self, segments):
self.segments = segments
# possible moves
# список доступных направлений движения змейки
self.mapping = {"Down": (0, 1), "Right": (1, 0),
"Up": (0, -1), "Left": (-1, 0)}

# изначально змейка двигается вправо
self.vector = self.mapping["Right"]

def move(self):
""" Двигает змейку в заданном направлении"""
# перебираем все сегменты кроме первого
for index in range(len(self.segments)-1):
segment = self.segments[index].instance
x1, y1, x2, y2 = c.coords(self.segments[index+1].instance)
# задаём каждому сегменту позицию сегмента стоящего после него
c.coords(segment, x1, y1, x2, y2)
# получаем координаты сегмента перед ГОЛОВОЙ
x1, y1, x2, y2 = c.coords(self.segments[-2].instance)
# помещаем ГОЛОВУ в направлении указанном в векторе движения
c.coords(self.segments[-1].instance,
x1+self.vector[0]*SEG_SIZE, y1+self.vector[1]*SEG_SIZE,
x2+self.vector[0]*SEG_SIZE, y2+self.vector[1]*SEG_SIZE)

def add_segment(self):
""" Добавляет сегмент змейки """
# определяем последний сегмент
last_seg = c.coords(self.segments[0].instance)
# определяем координаты куда поставить следующий сегмент
x = last_seg[2] - SEG_SIZE
y = last_seg[3] - SEG_SIZE
# добавляем змейке ещё один сегмент в заданном координатах
self.segments.insert(0, Segment(x, y))

def change_direction(self, event):
""" Изменяет направление движения змейки """
# event передаст нам символ нажатой клавиши
# и если эта клавиша в доступных направлениях
# изменяем направление
if event.keysym in self.mapping:
self.vector = self.mapping[event.keysym]


# Создаём окно
root = Tk()
# Устанавливаем название окна
root.title("Волков Дмитрий")

# оздаём экземпляр класса Canvas заливаем зелёным цветом
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#4f2642")
c.grid()
# Наводим фокус на Canvas, чтобы мы могли ловить нажатия клавиш
# catch keypressing
c.focus_set()
# создаём набор сегментов
segments = [Segment(SEG_SIZE, SEG_SIZE),
Segment(SEG_SIZE*2, SEG_SIZE),
Segment(SEG_SIZE*3, SEG_SIZE)]
# сама змейка
s = Snake(segments)
# Reaction on keypress
c.bind("<KeyPress>", s.change_direction)

create_block()
main()
# Запускаем окно
root.mainloop()
[/code]
PEHDOM
если в целом то никак, “ваша” змейка не имеет такого понятия(атрибута) как скорость и передвигается на 1 сегмент себя за один такт игры. В данной реализации вы можете изменять только общую скорость игры которая задается строкой :
 root.after(100, main)
чем меньше первый аргумент тем больше скорость, больше - скорость игры меньше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB