Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2017, 14:31   #1
Николай4434
Новичок
Джуниор
 
Регистрация: 08.10.2017
Сообщений: 1
По умолчанию Код выдает ошибку при вводе 9 строки

from tkinter import *
root = Tk()
root.title("Snake")
root.mainloop()
WIDTH = 800
HEIGHT = 600
SEG_SIZE = 20
IN_GAME = True
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#003300")
c.grid()
c.focus_set()
class Segment(object):
def __init__(self, x, y):
self.instance = c.create_rectangle(x, y,
x+SEG_SIZE, y+SEG_SIZE,
fill="white")
class Snake(object):
def __init__(self, segments):
self.segments = segments
self.mapping = {"Down": (0, 1), "Up": (0, -1),
"Left": (-1, 0), "Right": (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 change_direction(self, event):
if event.keysym in self.mapping:
self.vector = self.mapping[event.keysym]
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))
segments = [Segment(SEG_SIZE, SEG_SIZE),
Segment(SEG_SIZE*2, SEG_SIZE),
Segment(SEG_SIZE*3, SEG_SIZE)]
s = Snake(segments)
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 x1 < 0 or x2 > WIDTH or y1 < 0 or y2 > HEIGHT:
IN_GAME = False
elif head_coords == c.coords(BLOCK):
s.add_segment()
c.delete(BLOCK)
c.create_block()
else:
for index in range(len(s.segments)-1):
if c.coords(s.segments[index].instance) == head_coords:
IN_GAME = False
else:
c.create_text(WIDTH/2, HEIGHT/2,
text="GAME OVER!",
font="Arial 20",
fill="#ff0000")
c.bind("", s.change_direction)
Николай4434 вне форума Ответить с цитированием
Старый 08.10.2017, 15:11   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Это, вероятно, очень секретная ошибка, раз Вы не смогли привести нам её текст..
Но телепатические способности подсказали, что на строке
Код:
root.mainloop()
программа остановилась, и Вы спокойно закрыли окно Tk, чтобы таки продолжить ввод. Разумеется, окно в этот момент перестало существовать, и попытка создать Canvas для несуществующего окна дала предсказуемый сбой.

Перенесите вызов mainloop() в самый конец программы.
Black Fregat вне форума Ответить с цитированием
Старый 10.10.2017, 01:17   #3
klaus_nuk
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 25
По умолчанию

Ошибку в студию?
klaus_nuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста! написать программу, которая при вводе пользователем даты рождения выдает ближайший "счастливый" год Den_Dodge Помощь студентам 10 12.09.2015 22:28
перевод строки при вводе Chugun Общие вопросы C/C++ 2 12.03.2012 15:38
простой код...почему выдает ошибку access violation at address!?? sleevman Помощь студентам 2 28.10.2009 20:47
Выдает ошибку следующий код: Polotenchik Общие вопросы Delphi 16 25.07.2009 22:27