Seite 2 von 3
Verfasst: Sonntag 20. Januar 2008, 21:28
von schlangenbeschwörer
Hi!
Wenn du in den Weiten des Webs nichts findest, gib doch einfach mal folgendes in die Pythonshell ein:
@PS: Mit Python oder allgemein? Allgemein mit einem einfachen Graphikprogramm als .gif, .png oä. abspeichern. Mit Python ähnlich mit der PIL.
Verfasst: Sonntag 20. Januar 2008, 21:40
von Saob
mit Python, und wenn ich den Code in Python Shell eingebe komm nen error
Code: Alles auswählen
IDLE 1.2.1
>>> help(tk.Tk().after)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
help(tk.Tk().after)
NameError: name 'tk' is not defined
>>>
Verfasst: Sonntag 20. Januar 2008, 21:42
von Leonidas
Du musst Tkinter schon importieren, sonst wird das natürlich nix:
Bist du sicher, dass du nicht erstmal ein Tutorial durchlesen willst?
Verfasst: Sonntag 20. Januar 2008, 21:48
von Saob
also da kommt raus "after(self, ms, func=None, *args)"
sieht das ganze nun so aus?
Code: Alles auswählen
MainWindow.after(20000, func=new_watch)
MainWindow.after(30000, func=new_specialdonut)
weil so passiert nichts
Verfasst: Montag 21. Januar 2008, 06:27
von arris
Saob hat geschrieben:
Code: Alles auswählen
MainWindow.after(20000, func=new_watch)
MainWindow.after(30000, func=new_specialdonut)
Fast richtig. Das "func=" ist zuviel. Die Signatur der Funktion (...ms, func = None...) sagt Dir nur, dass, wenn keine Funktion angegeben wird, der Parameter mit None belegt wird. Hast Du eine Funktion, gib sie einfach an, ohne das "func = "
Verfasst: Montag 21. Januar 2008, 20:22
von Saob
ok funktioniert nun, danke

letzte sache, dann wären alle threads raus und somit der Single Player fertig (denke gerade über 2-Spieler modus):
habe einen Countdown, damit das spiel nicht unendlich lang geht, dieser beträgt zum anfang 90 Sekunden. wenn man aber uhren einsammelt kriegt man 10 sekunden drauf. momentan läuft das so in einem thread, wegen dem time.sleep(1)... :
Code: Alles auswählen
def countdown(count):
global Secondsremaining, GameStarted, Speed
while GameStarted == 1 and Secondsremaining > 0:
time.sleep(1)
Secondsremaining=Secondsremaining - 1
TimeLabel["text"]="Time remaining: \n" + str(Secondsremaining) + " Seconds"
if Secondsremaining == 0:
game_over()
und die addierung der 10 sekunden:
Code: Alles auswählen
elif MarioY == WatchY and MarioX == WatchX:
Score=Score + 500
Secondsremaining=Secondsremaining + 10
TotalTime=TotalTime + 10
WatchCount=WatchCount + 1
WatchesCountLabel["text"]="x " + str(WatchCount)
MainWindow.after(20000, new_watch)
ist sehr primitiv mit ner while schleife gelöst, habe aber ja auch erst seit nem halben jahr informatik unterricht. ich nehme aber an, dafür giebt es sowas wie Timer-Objekte, oder?
wenn nicht, wie könnt ich das lösen mit time.sleep(1) weg und thread raus
Verfasst: Montag 21. Januar 2008, 21:00
von Saob
Ok, hab es geschafft dies zu lösen, nur krieg ich noch so nen error, den ich öfters habe wenn ich objekte rumschieben per move:
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 387, in move_ghost
move_ghost()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 408, in move_ghost
way6_forwards()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 330, in way6_forwards
move_left(), move_left(), move_up(), move_left(), move_left(), move_left(), move_up(), move_up(), move_up(), move_up()
File "O:\GameCanvasAlt(FastFertig)\Kopie von DunkinDonutsFreak.py", line 269, in move_left
Field.move(Ghost, -1, 0)
File "D:\Python\lib\lib-tk\Tkinter.py", line 2256, in move
self.tk.call((self._w, 'move') + args)
TclError: invalid command name ".23710016.23710456"
verstehe da den fehler net?
Edit: passiert auch nur wenn ich das spiel während die runde läuft beende
Verfasst: Montag 21. Januar 2008, 22:40
von Leonidas
arris hat geschrieben:Saob hat geschrieben:
Code: Alles auswählen
MainWindow.after(20000, func=new_watch)
MainWindow.after(30000, func=new_specialdonut)
Fast richtig. Das "func=" ist zuviel. Die Signatur der Funktion (...ms, func = None...) sagt Dir nur, dass, wenn keine Funktion angegeben wird, der Parameter mit None belegt wird. Hast Du eine Funktion, gib sie einfach an, ohne das "func = "
Sollte keinen Unterschied machen, da man Funktionen so immer mit Keywort-Argumenten aufrufen kann.
Verfasst: Dienstag 22. Januar 2008, 14:17
von Saob
also gestern ging alles, habs heute in der schule nochmal zocken wollen und sah das der countdown nicht mehr runtertickte, garkeine special donuts und watches mehr spawnen. also das mit dem .after funzt irgendwie nichtmehr?
sieht so aus:
Code: Alles auswählen
elif event.keysym == "g":
Field.delete(Info1, Info2, Info3, Info4, Info5, Info6, Info7, Info8, Info9, Info10, Info11, Info12, Info13, Info14, Info15)
if GameStarted == 0:
GameStarted=1
new_donut()
ghost()
MainWindow.after(1000, countdown)
MainWindow.after(20000, new_watch)
MainWindow.after(30000, new_specialdonut)
Verfasst: Samstag 2. Februar 2008, 00:54
von Saob
keiner ne idee?
naja ansonsten hät ich da noch ne frage. wie kann man mit Python (oder ist es überhaupt möglich, ich denke aber mal schon) klicks etc durch ein netztwerk zu schicken? z.B. das man von einem anderen rechner im netztwerk auf die mainloop() zugreifen kann, und z.B. eine 2te figur steuern kann oder ähnliches. würde mich sehr interessieren

Verfasst: Samstag 2. Februar 2008, 09:06
von Leonidas
Du suchst glaube ich so etwas wie Remote Procedure Calls - RPC. Guck dir mal XML-RPC an.
Verfasst: Samstag 2. Februar 2008, 14:15
von Saob
hab ma bissl gegoogelt, sehe aber das XML-RPC dings bezieht sich wohl sehr stark fürs arbeiten übers Internet?
was ich halt machen will, ist ein Server, auf dem die variablen gespeichert sind, und sich vom client verändern lassen übers LAN
z.B.:
Server:
PlayerAGold=1000
Client:
PlayerAGold=PlayerAGold + 100
das also auf die variablen zugegriffen werden kann, welche sich auf dem anderen PC befinden
Verfasst: Samstag 2. Februar 2008, 14:31
von Leonidas
Ob Internet oder LAN, beide nutzten TCP, von daher lässt sich auch XML-RPC dort einsetzen.
Verfasst: Samstag 2. Februar 2008, 14:43
von Saob
na wenn das so ist, dann immer her damit

finde nur leider keine nützlichen Tutorials, nur seiten wo erklärt wird was man damit erreichen kann und ähnliches. so in der art Snkale Wrangling for Kids wäre perfekt wenn sowas existiert

Verfasst: Samstag 2. Februar 2008, 14:57
von Leonidas
Schon mal die Suchfunktion ausprobiert?
Verfasst: Samstag 2. Februar 2008, 16:27
von Saob
habe ich, finde ja nur leider nichts wie oben schon gesagt

Verfasst: Samstag 2. Februar 2008, 16:58
von Leonidas
Verfasst: Samstag 2. Februar 2008, 17:47
von Saob
also hab mal nach dem example den server gemacht, geht aber bei mir nicht
Code: Alles auswählen
Traceback (most recent call last):
File "O:/PyOGame(todo)/Client.py", line 4, in <module>
print s.pow(2,3) # Returns 2**3 = 8
File "D:\Python25\lib\xmlrpclib.py", line 1147, in __call__
return self.__send(self.__name, args)
File "D:\Python25\lib\xmlrpclib.py", line 1437, in __request
verbose=self.__verbose
File "D:\Python25\lib\xmlrpclib.py", line 1185, in request
errcode, errmsg, headers = h.getreply()
File "D:\Python25\lib\httplib.py", line 1195, in getreply
response = self._conn.getresponse()
File "D:\Python25\lib\httplib.py", line 924, in getresponse
response.begin()
File "D:\Python25\lib\httplib.py", line 385, in begin
version, status, reason = self._read_status()
File "D:\Python25\lib\httplib.py", line 343, in _read_status
line = self.fp.readline()
File "D:\Python25\lib\socket.py", line 331, in readline
data = recv(1)
error: (10054, 'Connection reset by peer')
Verfasst: Samstag 2. Februar 2008, 18:49
von BlackJack
Firewall!?
Verfasst: Samstag 2. Februar 2008, 19:56
von Saob
ist aus
