raylu 12 жил өмнө
parent
commit
faf7bc0712
1 өөрчлөгдсөн 35 нэмэгдсэн , 6 устгасан
  1. 35 6
      troll

+ 35 - 6
troll

@@ -5,16 +5,40 @@ import sys
 
 class Tileset(object):
 	tilesize = 16
+	RIGHT = 0
+	DOWN = 1
+	LEFT = 2
+	UP = 3
 
 	def __init__(self, screen):
 		self.screen = screen
-		self.tileset = pygame.image.load('tileset.png').convert()
+		image = pygame.image.load('tileset.png').convert()
+		self.tileset = {
+			self.RIGHT: image,
+			self.UP: pygame.transform.rotate(image, 90),
+			self.LEFT: pygame.transform.rotate(image, 180),
+			self.DOWN: pygame.transform.rotate(image, 270),
+		}
+		self.tile_width, self.tile_height = image.get_size()
+		self.tile_width /= self.tilesize
+		self.tile_height /= self.tilesize
 
-	def _render(self, tile_x, tile_y, pos):
-		self.screen.blit(self.tileset, pos, (tile_x, tile_y*self.tilesize, self.tilesize, self.tilesize))
+	def _render(self, tile_x, tile_y, pos, direction=RIGHT):
+		tileset = self.tileset[direction]
+		if direction == self.RIGHT:
+			x, y = tile_x, tile_y
+		elif direction == self.UP:
+			x, y = tile_y, self.tile_width - tile_x - 1
+		elif direction == self.LEFT:
+			x, y = self.tile_width - tile_x - 1, self.tile_height - tile_y - 1
+		elif direction == self.DOWN:
+			x, y = self.tile_height -tile_y - 1, tile_x
+		x *= self.tilesize
+		y *= self.tilesize
+		self.screen.blit(tileset, pos, (x, y, self.tilesize, self.tilesize))
 
-	def render_person(self, pos):
-		self._render(0, 13, pos)
+	def render_person(self, pos, direction):
+		self._render(0, 13, pos, direction)
 
 size = width, height = 640, 480
 black = (0, 0, 0)
@@ -42,6 +66,7 @@ def handle_event(event):
 	elif event.type == pygame.QUIT:
 		sys.exit()
 
+direction = Tileset.RIGHT
 while True:
 	clock.tick(60)
 	for event in pygame.event.get():
@@ -50,13 +75,17 @@ while True:
 	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
 
 	screen.fill(black)
-	tileset.render_person((render_x, render_y))
+	tileset.render_person((render_x, render_y), direction)
 	pygame.display.flip()