Explorar o código

move only onto tiles

raylu %!s(int64=12) %!d(string=hai) anos
pai
achega
421129459f
Modificáronse 1 ficheiros con 31 adicións e 13 borrados
  1. 31 13
      troll

+ 31 - 13
troll

@@ -77,31 +77,49 @@ def load_level(): # https://bitbucket.org/r1chardj0n3s/pygame-tutorial/src/a383d
 level_array = load_level()
 
 direction = Tileset.RIGHT
+movement = [0, 0]
 while True:
 	clock.tick(60)
 	for event in pygame.event.get():
 		handle_event(event)
 
-	SPEED = 4
-	if keys[pygame.K_RIGHT]:
-		render_x += SPEED
-		direction = Tileset.RIGHT
-	if keys[pygame.K_LEFT]:
-		render_x -= SPEED
-		direction = Tileset.LEFT
-	if keys[pygame.K_DOWN]:
-		render_y += SPEED
-		direction = Tileset.DOWN
-	if keys[pygame.K_UP]:
-		render_y -= SPEED
-		direction = Tileset.UP
+	# are we done moving?
+	if render_x % tileset.tilesize == 0:
+		movement[0] = 0
+	if render_y % tileset.tilesize == 0:
+		movement[1] = 0
+
+	SPEED = 2
+	# can we start moving?
+	if movement[1] == 0:
+		if keys[pygame.K_DOWN]:
+			movement[1] = SPEED
+			direction = Tileset.DOWN
+		elif keys[pygame.K_UP]:
+			movement[1] = -SPEED
+			direction = Tileset.UP
+	if movement[0] == 0:
+		if keys[pygame.K_RIGHT]:
+			movement[0] = SPEED
+			if not movement[1]: # prefer up/down when moving diagonally
+				direction = Tileset.RIGHT
+		elif keys[pygame.K_LEFT]:
+			movement[0] = -SPEED
+			if not movement[1]:
+				direction = Tileset.LEFT
+
+	# move!
+	render_x += movement[0]
+	render_y += movement[1]
 
 	screen.fill(black)
+	# draw the map
 	for i, tile in enumerate(level_array):
 		x, y = divmod(i, 50)
 		x *= tileset.tilesize
 		y *= tileset.tilesize
 		tile_y, tile_x = divmod(tile - 1, tileset.tilesize) # those 1-indexing fuckers
 		tileset.render(tile_x, tile_y, (y, x))
+	# draw the player
 	tileset.render_person((render_x, render_y), direction)
 	pygame.display.flip()