from tkinter import * from math import * from threading import * import time class Jalutaja(Thread): def alusta(self, x, y, r, nurk, samm, ala): self.x=x self.y=y self.r=r self.nurk=nurk self.samm=samm self.ala=ala self.arvutaLiikumine() self.joonista() def joonista(self): self.ring=self.ala.create_oval(self.x-self.r, self.y-self.r, self.x+self.r, self.y+self.r) self.joon=self.ala.create_line(self.x, self.y, self.x+self.dx, self.y-self.dy) def liigu(self): self.ux=self.x+self.dx self.uy=self.y-self.dy if self.kasSobibUusKoht(): self.x=self.ux self.y=self.uy self.ala.coords(self.ring, self.x-self.r, self.y-self.r, self.x+self.r, self.y+self.r) self.ala.coords(self.joon, self.x, self.y, self.x+self.dx, self.y-self.dy) def vasakule(self, syndmus): self.nurk+=0.1 self.arvutaLiikumine() def paremale(self, syndmus): self.nurk-=0.1 self.arvutaLiikumine() def arvutaLiikumine(self): self.dx=self.samm*cos(self.nurk) self.dy=self.samm*sin(self.nurk) def run(self): while True: self.liigu() time.sleep(0.5) def kasSobibUusKoht(self): if self.ux<0: return False if self.uy<0: return False if self.ux>self.ala.laius: return False if self.uy>self.ala.korgus: return False return True class JalutusHaldus: def alusta(self): self.aken=Tk() self.ala=Canvas(self.aken) self.ala.pack() self.ala.focus_set() self.ala.laius=300 self.ala.korgus=200 self.tegelane1=Jalutaja() self.tegelane1.alusta(100, 150, 30, pi/6, 20, self.ala) self.tegelane2=Jalutaja() self.tegelane2.alusta(300, 150, 20, 5*pi/6, 20, self.ala) self.tegelane1.start() self.tegelane2.start() self.aken.mainloop() j=JalutusHaldus() j.alusta()