Форум сайта python.su
0
paspal programs/111/venv/Include/kvadrat.py”, line 101, in <module>Прикреплённый файлы:
kvadrat.py (4,3 KБ)
Офлайн
294
artemIvannikov500судя по всему далеко не все, по данной конкретной ошибке точка там лишняя, должно быть
Вроде все делал по инструкции, но почему-то выдаем ошибку
[code python][/code]
Офлайн
0
А подскажите ,пожалуйста, как должен выглядеть данный код.
Офлайн
294
откуда ж мне знать? отступы должны стоять воттак:
#... class Snake(object): def __init__(self, segments): .... def move(self): #управление змейкой .... def changedirection(self,event): #event изменяет направление и если возможно меняет его .... def add_segment(self): #добавляем сегмент ....
[code python][/code]
Офлайн
0
PEHDOM
По идее он должен создать новое яблоко из функции
def apple(): # Cоздаем блок в случайной позиции карты 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")
Отредактировано artemIvannikov500 (Фев. 9, 2019 10:57:20)
Офлайн
0
Поправил код
убрал функцию create_block()
поправил создание яблок,
но появились проблемы с определением координаты X1
from tkinter import * from tkinter import messagebox import random root = Tk() # Create game window root.title("Snake-Game") HEIGHT = 800 # ВЫСОТА WIDTH = 1000 # ШИРИНА SEG_SIZE = 20 # РАЗМЕР СЕГМЕНТА ЗМЕЙКИ IN_GAME = True c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#003300") c.grid() # создаем и располагаем окно c.focus_set() class Segment(object): # create snake's segment def __init__(self, x, y): self.instance = c.create_rectangle(x, y, x + SEG_SIZE, y + SEG_SIZE, fill="orange") class Snake(object): def __init__(self, segments): self.segments = segments # создали тело змеи # возможные движения змеи self.mapping = {"Down": (0, 1), "Up": (0, -1), "Right": (1, 0), "Left": (-1, 0)} self.vector = self.mapping["Right"] # изначально движется вправо def move(self): # управление змейкой for index in range(len(self.segments) - 1): # пересчет сегментов segment = self.segments[index+1].instance c.coords(segment, x1, x2, y1, y2) # получаем координаты перед головой x1, x2, y1, y2 = c.coords(self.segments[-2].instance) # перемещаем голову в указанном направлении c.coords(self.segments[-1].instance, x1 + self.vector[0] * SEG_SIZE, x2 + self.vector[0] * SEG_SIZE, y1 + self.vector[1] * SEG_SIZE, y2 + self.vector[1] * SEG_SIZE) def changedirection(self, event): # 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) c.bind("<KeyPress>", s.changedirection) # создаем яблоки def apple(): # Cоздаем блок в случайной позиции карты 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") a = apple() # game def main(): global IN_GAME if IN_GAME: # ДВИГАЕМ ЗМЕЮ s.move() # определяем координаты головы head_coord = c.coords(s.segments[-1].instance) x1, x2, y1, y2 = head_coord # столкновение с границами экрана if x1 < 0 or x2 > WIDTH or y1 < 0 or y2 > HEIGHT: IN_GAME = False messagebox.showerror("The end", "К сожалению, но вы проиграли!") # eat elif head_coord == 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) == head_coord: IN_GAME = False root.after(100, main) else: c.create_text(WIDTH / 2, HEIGHT / 2, text="К сожалению, но вы проиграли!", font="Arial 20", fill="220022") main() root.mainloop()
Отредактировано artemIvannikov500 (Фев. 9, 2019 12:58:14)
Офлайн
294
artemIvannikov500ну дык
UnboundLocalError: local variable ‘x1’ referenced before assignment
... def move(self): # управление змейкой for index in range(len(self.segments) - 1): # пересчет сегментов segment = self.segments[index+1].instance c.coords(segment, x1, x2, y1, y2) ....
... 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) ...
[code python][/code]
Отредактировано PEHDOM (Фев. 11, 2019 10:03:49)
Офлайн