124 lines
4.6 KiB
Python
124 lines
4.6 KiB
Python
import pygame
|
|
from config import *
|
|
|
|
class Agent(pygame.sprite.Sprite):
|
|
|
|
|
|
def __init__(self, game, x, y):
|
|
self.game = game
|
|
self.groups = self.game.all_sprites
|
|
pygame.sprite.Sprite.__init__(self, self.groups)
|
|
|
|
self.x = x * TILE_SIZE
|
|
self.y = y * TILE_SIZE
|
|
self.width = TILE_SIZE
|
|
self.height = TILE_SIZE
|
|
|
|
self.x_change = 0
|
|
self.y_change = 0
|
|
|
|
self.AGENT_IMG = pygame.image.load("./zdjecia/gandalf.png")
|
|
self.AGENT = pygame.transform.scale(self.AGENT_IMG,(64,64))
|
|
|
|
self.image = pygame.Surface([self.width, self.height])
|
|
self.image.blit(self.AGENT, (0,0))
|
|
self.image.set_colorkey((0, 0, 0))
|
|
|
|
self.rect = self.image.get_rect()
|
|
self.rect.x = self.x
|
|
self.rect.y = self.y
|
|
|
|
self.level = 1
|
|
self.health = 10000*self.level
|
|
|
|
def update(self):
|
|
self.movement()
|
|
self.collide_mob()
|
|
|
|
self.rect.x += self.x_change
|
|
self.collide_blocks('x')
|
|
self.rect.y += self.y_change
|
|
self.collide_blocks('y')
|
|
|
|
self.x_change = 0
|
|
self.y_change = 0
|
|
|
|
def movement(self):
|
|
keys = pygame.key.get_pressed()
|
|
if keys[pygame.K_LEFT] and self.rect.x > 0:
|
|
self.x_change -= TILE_SIZE/2
|
|
if keys[pygame.K_RIGHT] and self.rect.x < 832 - 64:
|
|
self.x_change += TILE_SIZE/2
|
|
if keys[pygame.K_UP] and self.rect.y > 0:
|
|
self.y_change -= TILE_SIZE/2
|
|
if keys[pygame.K_DOWN] and self.rect.y < 832 - 64:
|
|
self.y_change += TILE_SIZE/2
|
|
|
|
def collide_blocks(self, direction):
|
|
if direction == "x":
|
|
hits = pygame.sprite.spritecollide(self,self.game.rock_sprites, False)
|
|
if hits:
|
|
if self.x_change > 0:
|
|
self.rect.x = hits[0].rect.left - self.rect.width
|
|
if self.x_change < 0:
|
|
self.rect.x = hits[0].rect.right
|
|
|
|
if direction == "y":
|
|
hits = pygame.sprite.spritecollide(self,self.game.rock_sprites, False)
|
|
if hits:
|
|
if self.y_change > 0:
|
|
self.rect.y = hits[0].rect.top - self.rect.height
|
|
if self.y_change < 0:
|
|
self.rect.y = hits[0].rect.bottom
|
|
|
|
def collide_mob(self):
|
|
|
|
hits_archer_ork = pygame.sprite.spritecollide(self, self.game.archer_orks, False)
|
|
hits_infantry_ork = pygame.sprite.spritecollide(self, self.game.infantry_orks, False)
|
|
hits_infantry_ork2 = pygame.sprite.spritecollide(self, self.game.infantry_orks2, False)
|
|
hits_sauron = pygame.sprite.spritecollide(self, self.game.sauronL, False)
|
|
if hits_archer_ork:
|
|
if self.game.archer_ork.level > self.level or self.game.archer_ork.damage > self.health:
|
|
self.kill()
|
|
self.game.new()
|
|
else:
|
|
self.game.archer_ork.kill()
|
|
self.health=self.health-self.game.archer_ork.damage
|
|
self.level+=self.level
|
|
#zmniejszenie życia o damage moba
|
|
#level up
|
|
if hits_infantry_ork:
|
|
if self.game.infantry_ork.level > self.level or self.game.infantry_ork.damage > self.health:
|
|
self.kill()
|
|
self.game.new()
|
|
else:
|
|
self.game.infantry_ork.kill()
|
|
self.health=self.health-self.game.infantry_ork.damage
|
|
self.level+=self.level
|
|
#zmniejszenie życia o damage moba
|
|
#level up
|
|
if hits_infantry_ork2:
|
|
if self.game.infantry_ork2.level > self.level or self.game.infantry_ork2.damage > self.health:
|
|
self.kill()
|
|
self.game.new()
|
|
else:
|
|
self.game.infantry_ork2.kill()
|
|
self.health=self.health-self.game.infantry_ork2.damage
|
|
self.level+=self.level
|
|
#zmniejszenie życia o damage moba
|
|
#level up
|
|
if hits_sauron:
|
|
if self.game.sauron.level > self.level or self.game.sauron.damage > self.health:
|
|
self.kill()
|
|
self.game.new()
|
|
else:
|
|
self.game.sauron.kill()
|
|
self.level+=self.level
|
|
pygame.quit()
|
|
#zmniejszenie życia o damage moba
|
|
#level up
|
|
|
|
# brakuje levelowania postaci gdy zabije moba, jest zrobione tylko, że jeśli za wysoki poziom, lub brak życia to ginie i od nowa zaczyna
|
|
# brakuje dodania miejsca w którym agent się leczy
|
|
|