Ich möchte einen Gegner laufen lassen, der von Türmen beschossen wird, jeder Turm hat eine bestimmte Reichweite und die Gegner können nur auf einem bestimmten Pfad wandeln. Meine Idee wäre, einen imaginären Kreis um den Turm zu ziehen und mit einem Thread abzufragen, ob sich ein Gegner darin befindet, den Schuss werde ich dann durch Sinus/Kosinus und Gegnergeschwindigkeit errechnen.
Aber wie kann ich überprüfen, ob sich mein Gegner im Kreis befindet ?
Anbei mein Code:
Code: Alles auswählen
from Tkinter import*
from math import*
from thread import*
from time import*
#from ModulGegner import*
#from ModulTuerme import*
class TURMnormal:
def __init__(self,feld):
self.Feuerkraft=20
self.Feuerrate=2
self.Reichweite=10
self.canvas=feld
self.X=0
self.Y=0
self.Turmgrafik=self.canvas.create_oval(200,200,210,210,fill='blue')
class GEGNERnormal:
def __init__(self,feld,Ge):
self.v= 5 #(1:39)
self.t= 0.1
self.Leben= 100
self.canvas=feld
self.posy = 5
self.Gegnergrafik=self.canvas.create_oval(255,0,245,10,fill='red')
if (Ge==False):
Ge=True
start_new_thread(self.Gegnerbewegung,())
def Gegnerbewegung(self):
while (True):
self.canvas.move('g',0,self.v*self.t)
sleep(self.t)
self.posy += self.v*self.t
print self.posy
class SPIEL:
def __init__(self):
self.Ge=False
self.Spielfeld=Tk()
self.feld=Canvas(width=500,height=500,bg='yellow')
self.feld.pack(expand=YES, fill=BOTH)
self.feld.create_line(225,0,225,500,fill='black')
self.feld.create_line(275,0,275,500,fill='black')
self.feld.create_rectangle(225,450,275,500,fill='blue')
frame=Frame(self.Spielfeld)
frame.pack()
hm=Button(frame,text='Turm',command=self.TURMnormalerzeugung)
hm.pack(side=LEFT)
self.Spielfeld.bind('<B1-Motion>',self.Turmbewegung)
hm1=Button(frame,text='Gegner',command=self.Gegnererzeugung)
hm1.pack(side=LEFT)
self.tag=''
self.nummer=0
self.tuerme= []
self.Spielfeld.mainloop()
def TURMnormalerzeugung(self):
self.tag=self.tag+'t'
self.TURMnormal=TURMnormal(self.feld)
self.tuerme.append(self.TURMnormal)
self.feld.addtag_withtag(self.tag,self.TURMnormal.Turmgrafik)
def Turmbewegung(self,event):
if event.x<225 or event.x>275:
self.feld.delete(self.TURMnormal.Turmgrafik)
self.TURMnormal.Turmgrafik=self.feld.create_oval(event.x-5,event.y-5,event.x+5,event.y+5,fill='black')
self.feld.addtag_withtag(self.tag,self.TURMnormal.Turmgrafik)
self.tuerme[self.nummer].X=event.x
self.tuerme[self.nummer].Y=event.y
def Gegnererzeugung(self):
self.GEGNERnormal=GEGNERnormal(self.feld, self.Ge)
self.feld.addtag_withtag('g',self.GEGNERnormal.Gegnergrafik)
self.Ge=True
Towerdefense=SPIEL()