WMICraft/models/knight.py
2022-04-12 20:21:29 +02:00

63 lines
2.3 KiB
Python

import random
import pygame.image
from common.constants import GRID_CELL_SIZE, Direction
from common.helpers import parse_cord
def load_knight_textures():
random_index = random.randint(1, 4)
states = [
pygame.image.load(f'resources/textures/knight_{random_index}_up.png').convert_alpha(), # up = 0
pygame.image.load(f'resources/textures/knight_{random_index}_right.png').convert_alpha(), # right = 1
pygame.image.load(f'resources/textures/knight_{random_index}_down.png').convert_alpha(), # down = 2
pygame.image.load(f'resources/textures/knight_{random_index}_left.png').convert_alpha(), # left = 3
]
return states
class Knight(pygame.sprite.Sprite):
def __init__(self, position, group, team):
super().__init__(group)
self.direction = Direction.DOWN
self.states = load_knight_textures()
self.image = self.states[self.direction.value]
self.position = position
position_in_px = (parse_cord(position[0]), parse_cord(position[1]))
self.rect = self.image.get_rect(topleft=position_in_px)
self.team = team
self.health = random.randint(7, 12)
self.attack = random.randint(4, 7)
self.defense = random.randint(1, 4)
self.points = 1
def rotate_left(self):
self.direction = self.direction.left()
self.image = self.states[self.direction.value]
def rotate_right(self):
self.direction = self.direction.right()
self.image = self.states[self.direction.value]
def step_forward(self):
if self.direction.name == 'UP':
self.position = (self.position[0], self.position[1] - 1)
self.rect.y = self.rect.y - GRID_CELL_SIZE - 5
elif self.direction.name == 'RIGHT':
self.position = (self.position[0] + 1, self.position[1])
self.rect.x = self.rect.x + GRID_CELL_SIZE + 5
elif self.direction.name == 'DOWN':
self.position = (self.position[0], self.position[1] + 1)
self.rect.y = self.rect.y + GRID_CELL_SIZE + 5
elif self.direction.name == 'LEFT':
self.position = (self.position[0] - 1, self.position[1])
self.rect.x = self.rect.x - GRID_CELL_SIZE - 5
def team_alias(self) -> str:
return "k_b" if self.team == "blue" else "k_r"