Ich bin seid einiger Zeit am programmieren eines computerspieles und bin schon relativ weit gekommen. Es geht darum das jeder spieler eine figur hat und versuchen muss seinen Gegner zu treffen. das schießen hab ich folgendermaßen gelöst:
Code: Alles auswählen
class Schuss:
def fire(self,Sx,Sy,mousex,mousey):
self.berechnekugelflug(Sx,Sy,mousex,mousey)
self.Kx=Sx+2*self.schrittx
self.Ky=Sy+2*self.schritty
print "da: ",Sx,Sy,self.Kx,self.Ky,feuerball
try:
self.it=c.create_image(self.Kx, self.Ky, image=feuerball)
print "Kein Fehler im c.creat! it: ",self.it
c.after(15,self.movekugel)
except ValueError:
print "kugelfehler im c.creat!",self.Kx,self.Ky,Sx,Sy
print feuerball
def movekugel(self):
self.Kx+=self.schrittx
self.Ky+=self.schritty
c.coords(self.it,self.Kx,self.Ky) --> MANCHMAL FEHLER!
if self.wall() and self.hitplayer() and self.inboard():
c.after(15,self.movekugel)
else:
c.delete(self.it)
def berechnekugelflug(self,Sx,Sy,mousex,mousey):
wa=self.getwinkel(Sx,Sy,mousex,mousey)-math.pi/2
self.schrittx=int(14*math.cos(wa))
self.schritty=int(14*math.sin(wa))
print "berechne KFlug: ",self.schrittx,self.schritty
mousex und mousey brauch ich um den schusswinkel zu berechnen
die funktion "movekugel" wird mit 15ms verzögerung immer wieder selber aufgerufen bis sie etweder auf eine mauer trifft oder auf einen spieler...
Jetzt zu meinem Problem: nach mittlerweile sehr langer fehlersuche wende ich mich euch und hoffe darauf dass mir hier wer weiterhelfen kann.
wenn ich das spiel teste und sehr viel schieße, so ca. nach dem 50ten- 150ten schuss bekomm ich eine fehlermeldung:
Code: Alles auswählen
Unhandled exception in thread started by <function clientthread at 0x014066B0>
Traceback (most recent call last):
File "C:\Users\Rene\Desktop\Python 2.5\Programme\2D-Abenteuer\DVI_Client1.py",
line 636, in clientthread
board.spieler2.schiessen(mousex,mousey)
File "C:\Users\Rene\Desktop\Python 2.5\Programme\2D-Abenteuer\DVI_Client1.py",
line 304, in schiessen
schuss.fire(self.sposx,self.sposy,mousex,mousey,self.spn)
File "C:\Users\Rene\Desktop\Python 2.5\Programme\2D-Abenteuer\DVI_Client1.py",
line 38, in fire
c.coords(board.feuerball21.it,self.Kx,self.Ky)
File "C:\Python25\lib\lib-tk\Tkinter.py", line 2134, in coords
self.tk.call((self._w, 'coords') + args)))
ValueError: invalid literal for float(): None
Anderes problem besteht wenn ich das programm mit F5 starte:
dann bekomm ich nach 3-5 bewegungen in eine Richtung folgenden Fehler:
File "C:\Pyton25\lib\lib-tk\Tkinter.py", line 1403,in __call__
return self.func(*args)
File "C:\Pyton25\lib\lib-tk\Tkinter.py", line 498, in callit func(*args)
File "C:\Pyton25\lib\idlelib\ColorDelegator.py", line 152, in recolorize
self.recolorize_main()
File "C:\Pyton25\lib\idlelib\PyShell.py", line 292, in recolorize_main
ColorDelegator.recolorize_main(self)
File "C:\Pyton25\lib\idlelib\ColorDelegator.py", line171, in recolorize_main
head, tail = item
ValueError:need more than 1 value to unpack
der code fürs bewegen schaut so aus:
Code: Alles auswählen
def MoveDown(self):
self.sposy+=self.tempo
if board.feld[self.getfeld(self.sposy+self.abstand)][self.getfeld(self.sposx)]=='M':
self.explode()
try:
c.coords(self.sp,self.sposx,self.sposy)
except ValueError:
print self.sposx
self. tempo ist die größe des schrittes
self.sp ist das bild von der spielfigur
Leider bringen mich beide Fehlermeldungen einfach überhaupt nicht weiter. Ich weiß auch nicht ob die beiden fehlermeldungen etwas miteinander zu tun haben oder nicht aber für mich macht es den anschein als würde das bewegen von bildern ( coords(item, x, y) ) nicht richtig funktionieren aber das bringt mich auch nicht weiter.
Also wenn wer hilfe hat dann bitte nicht zögern und nur her damit, bin nämlich schon kurz vorm Fluchen.....
Lg, Rene