Thomas Grops via Python-list wrote: > Also I am struggling to understand: > > def move_tank(self, dx, dy): > self.x += dx > self.y += dy > self.canvas.move(self.id, dx, dy) > > Where does the dx and dy values get input?
To find the place where the move_tank() method is invoked hit the search button or key of your text editor. In this case you'll find def move(self): self.move_tank(*self.moves[self.direction]) ... so move_tank() is invoked by the move() method. But what the heck is *self.moves[self.direction] ? From the fact that the script runs without error you can conclude that it resolves to two integer values. Let's try in the interactive interpreter (the script is called tanks2, so that's what I import): $ python3 Python 3.4.3 (default, Nov 17 2016, 01:08:31) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tkinter >>> import tanks2 >>> root = tkinter.Tk() >>> canvas = tkinter.Canvas(root, width=100, height=100) >>> canvas.pack() >>> tank = tanks2.Tank(root, canvas, "example", 10, 10, 10, 10, "red") >>> tank.direction 0 That's the value determining the direction into which the tank is supposed to move (what you called "count" in your script). >>> tank.moves [(5, 0), (-5, 0), (0, -2), (0, 2), (-1, -1), (1, -1), (1, 1), (-1, 1)] That's the list of speed vectors I set up in the initialiser (the Tank.__init__() method) >>> tank.moves[tank.direction] (5, 0) So move_tank() is supposed to move the tank 5 pixels to the right and 0 pixels down. For this invocation self.move_tank(*self.moves[self.direction]) is equivalent to self.move_tank(*(5, 0)) The leading star tells python to treat the elements of the tuple as if they were passed individually to the function or method. The actual dx and dy are then 5 and 0: self.move_tank(5, 0) Now let's move our little red tank: >>> tank.x, tank.y (10, 10) >>> tank.move_tank(3, 7) >>> tank.x, tank.y (13, 17) >>> tank.move_tank(tank.moves[tanks2.MRIGHTDOWN]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: move_tank() missing 1 required positional argument: 'dy' Oops, I forgot the leading *. Second attempt: >>> tank.move_tank(*tank.moves[tanks2.MRIGHTDOWN]) >>> tank.x, tank.y (14, 18) -- https://mail.python.org/mailman/listinfo/python-list