add rotation to tractor
This commit is contained in:
parent
d92c015daa
commit
42a04d00c5
@ -46,6 +46,10 @@ class App:
|
|||||||
self.__tractor.move_right()
|
self.__tractor.move_right()
|
||||||
print(self.__tractor)
|
print(self.__tractor)
|
||||||
|
|
||||||
|
if keys[pygame.K_w]:
|
||||||
|
self.__tractor.move()
|
||||||
|
print(self.__tractor)
|
||||||
|
|
||||||
if keys[pygame.K_h]:
|
if keys[pygame.K_h]:
|
||||||
self.__tractor.harvest()
|
self.__tractor.harvest()
|
||||||
|
|
||||||
@ -58,6 +62,12 @@ class App:
|
|||||||
if keys[pygame.K_f]:
|
if keys[pygame.K_f]:
|
||||||
self.__tractor.fertilize()
|
self.__tractor.fertilize()
|
||||||
|
|
||||||
|
if keys[pygame.K_l]:
|
||||||
|
self.__tractor.rotate_left()
|
||||||
|
|
||||||
|
if keys[pygame.K_r]:
|
||||||
|
self.__tractor.rotate_right()
|
||||||
|
|
||||||
|
|
||||||
def update_screen(self):
|
def update_screen(self):
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
@ -7,14 +7,20 @@ class BaseField:
|
|||||||
def __init__(self, img_path: str):
|
def __init__(self, img_path: str):
|
||||||
self._img_path = img_path
|
self._img_path = img_path
|
||||||
|
|
||||||
def draw_field(self, screen: pygame.Surface, pos_x: int, pos_y: int, is_centered: bool = False, size: tuple = None):
|
def draw_field(self, screen: pygame.Surface, pos_x: int, pos_y: int,
|
||||||
|
is_centered: bool = False, size: tuple = None, angle: float = 0.0):
|
||||||
img = pygame.image.load(self._img_path)
|
img = pygame.image.load(self._img_path)
|
||||||
|
img = pygame.transform.rotate(img, angle)
|
||||||
|
|
||||||
scale = pygame.transform.scale(img, (FIELD_SIZE, FIELD_SIZE))
|
scale = pygame.transform.scale(img, (FIELD_SIZE, FIELD_SIZE))
|
||||||
rect = img.get_rect()
|
rect = img.get_rect()
|
||||||
|
|
||||||
if is_centered:
|
if is_centered:
|
||||||
rect.center = (pos_x, pos_y)
|
rect.center = (pos_x, pos_y)
|
||||||
else:
|
else:
|
||||||
rect.topleft = (pos_x, pos_y)
|
rect.topleft = (pos_x, pos_y)
|
||||||
|
|
||||||
if size is not None:
|
if size is not None:
|
||||||
rect.size = (FIELD_SIZE, FIELD_SIZE)
|
rect.size = (FIELD_SIZE, FIELD_SIZE)
|
||||||
|
|
||||||
screen.blit(scale, rect)
|
screen.blit(scale, rect)
|
||||||
|
@ -21,15 +21,26 @@ class Tractor(BaseField):
|
|||||||
super().__init__(os.path.join(RESOURCE_DIR, f"{TRACTOR}.{PNG}"))
|
super().__init__(os.path.join(RESOURCE_DIR, f"{TRACTOR}.{PNG}"))
|
||||||
self.__pos_x = (int(HORIZONTAL_NUM_OF_FIELDS / 2) - 1) * FIELD_SIZE
|
self.__pos_x = (int(HORIZONTAL_NUM_OF_FIELDS / 2) - 1) * FIELD_SIZE
|
||||||
self.__pos_y = (int(VERTICAL_NUM_OF_FIELDS / 2) - 1) * FIELD_SIZE
|
self.__pos_y = (int(VERTICAL_NUM_OF_FIELDS / 2) - 1) * FIELD_SIZE
|
||||||
|
self.__angle = 0.0
|
||||||
self.__move = FIELD_SIZE
|
self.__move = FIELD_SIZE
|
||||||
self.__board = board
|
self.__board = board
|
||||||
self.__harvested_corps = []
|
self.__harvested_corps = []
|
||||||
|
|
||||||
def draw(self, screen: pygame.Surface):
|
def draw(self, screen: pygame.Surface):
|
||||||
self.draw_field(screen, self.__pos_x + FIELD_SIZE / 2, self.__pos_y + FIELD_SIZE / 2,
|
self.draw_field(screen, self.__pos_x + FIELD_SIZE / 2, self.__pos_y + FIELD_SIZE / 2,
|
||||||
is_centered=True, size=(FIELD_SIZE, FIELD_SIZE))
|
is_centered=True, size=(FIELD_SIZE, FIELD_SIZE), angle=self.__angle)
|
||||||
|
|
||||||
# Key methods handlers
|
# Key methods handlers
|
||||||
|
def move(self):
|
||||||
|
if self.__angle == 0.0:
|
||||||
|
self.move_right()
|
||||||
|
elif self.__angle == 90.0:
|
||||||
|
self.move_up()
|
||||||
|
elif self.__angle == 180.0:
|
||||||
|
self.move_left()
|
||||||
|
else:
|
||||||
|
self.move_down()
|
||||||
|
|
||||||
def move_up(self):
|
def move_up(self):
|
||||||
if self.__pos_y - self.__move >= 0:
|
if self.__pos_y - self.__move >= 0:
|
||||||
self.__pos_y -= self.__move
|
self.__pos_y -= self.__move
|
||||||
@ -46,6 +57,12 @@ class Tractor(BaseField):
|
|||||||
if self.__pos_x + self.__move + FIELD_SIZE <= WIDTH:
|
if self.__pos_x + self.__move + FIELD_SIZE <= WIDTH:
|
||||||
self.__pos_x += self.__move
|
self.__pos_x += self.__move
|
||||||
|
|
||||||
|
def rotate_left(self):
|
||||||
|
self.__angle = (self.__angle - 90.0) % 360.0
|
||||||
|
|
||||||
|
def rotate_right(self):
|
||||||
|
self.__angle = (self.__angle + 90.0) % 360.0
|
||||||
|
|
||||||
def hydrate(self):
|
def hydrate(self):
|
||||||
if self.check_field(Sand):
|
if self.check_field(Sand):
|
||||||
field = self.get_field_from_board()
|
field = self.get_field_from_board()
|
||||||
|
Loading…
Reference in New Issue
Block a user