Skip to content
Snippets Groups Projects
Commit fe201cf3 authored by Nicholas Danh's avatar Nicholas Danh
Browse files

fixed monster spawning. need to figure out how to

make the agent work better
parent 6b0cb84e
No related branches found
No related tags found
No related merge requests found
......@@ -191,8 +191,8 @@ class Level(Singleton):
self.__base_monster = Monster(
config.HALF_XWIN - self.platform_size[0] // 2, # X POS
config.YWIN + config.YWIN / 3, # Y POS
*self.platform_size) # SIZE
config.HALF_YWIN, # Y POS
*self.monster_size) # SIZE
@property
......@@ -245,7 +245,7 @@ class Level(Singleton):
randint(0, config.XWIN - self.monster_size[0]),
self.__monsters[-1].rect.y - offset,
*self.monster_size,
speed=randint(2, 4),
speed=randint(1, 3),
direction=randint(0, 1) * 2 - 1)
else:
new_monster = Monster(
......
......@@ -27,6 +27,8 @@ from pygame.event import Event
from singleton import Singleton
from sprite import Sprite
from level import Level
from level import Monster
import random
import settings as config
......@@ -150,28 +152,53 @@ class Player(Sprite, Singleton):
if not len(lvl.platforms): return
player_x = self.rect.centerx
player_y = self.rect.bottom
player_y = self.rect.centery
dist = []
for platform in lvl.platforms:
weight = 20 if platform.rect.top > player_y else 40
dist.append((sqrt((platform.rect.centerx - player_x)**2 + (weight * (platform.rect.top - player_y))**2), platform))
weight = 20 if platform.rect.centery > player_y else 40
if not collide_rect(self, platform):
dist.append((sqrt((min(abs(platform.rect.left - player_x), abs(platform.rect.right - player_x)))**2 + (weight * (platform.rect.bottom - player_y))**2), platform))
for monster in lvl.monsters:
weight = 20
if monster.rect.centery < player_y + self.rect.height:
dist.append((sqrt((min(abs(monster.rect.left - player_x), abs(monster.rect.right - player_x)))**2 + (weight * (min(abs(monster.rect.bottom - player_y), abs(monster.rect.top - player_y))))**2), monster))
if len(dist) > 0:
closest = min(dist)
closest_platform = closest[1]
platform_x = closest_platform.rect.centerx
game_window_width = config.XWIN-self.rect.width
if ((player_x > platform_x and abs(player_x - platform_x < game_window_width / 2)) or
(player_x < platform_x and abs(player_x - platform_x) > game_window_width / 2)):
self._velocity.x=-self.__startspeed * closest[0] / 30
self._input = -1
elif ((player_x < platform_x and abs(player_x - platform_x < game_window_width / 2)) or
(player_x > platform_x and abs(player_x - platform_x) > game_window_width / 2)):
self._velocity.x=self.__startspeed * closest[0] / 30
self._input = 1
closest_object = closest[1]
speed_reduction = 25
if not isinstance(closest_object, Monster):
platform_x = closest_object.rect.centerx
game_window_width = config.XWIN-self.rect.width
if ((player_x > platform_x and abs(player_x - platform_x) < game_window_width / 2) or
(player_x < platform_x and abs(player_x - platform_x) > game_window_width / 2)):
self._velocity.x=-self.__startspeed * closest[0] / speed_reduction
self._input = -1
elif ((player_x < platform_x and abs(player_x - platform_x) < game_window_width / 2) or
(player_x > platform_x and abs(player_x - platform_x) > game_window_width / 2)):
self._velocity.x=self.__startspeed * closest[0] / speed_reduction
self._input = 1
else:
self._input = 0
else:
self._input = 0
monster_x = closest_object.rect.centerx
monster_y = closest_object.rect.centery
danger_zone_x = self.rect.width / 2
danger_zone_y = self.rect.height / 2
if ((player_x >= monster_x and abs(closest_object.rect.right - player_x) < danger_zone_x) and abs(monster_y - player_y) < danger_zone_y):
self._velocity.x=self.__startspeed * closest[0] * speed_reduction
self._input = 1
elif ((player_x <= monster_x and abs(closest_object.rect.left - player_x) < danger_zone_x) and abs(monster_y - player_y) < danger_zone_y):
self._velocity.x=-self.__startspeed * closest[0] * speed_reduction
self._input = -1
else:
self._input = 0
#Velocity update (apply gravity, input acceleration)
self._velocity.y += self.gravity
......
......@@ -38,13 +38,13 @@ MOVING_MOB_COLOR = RED
PLATFORM_SIZE = (100,10)
MONSTER_SIZE = (20,20)
PLATFORM_DISTANCE_GAP = (50,210)
MONSTER_DISTANCE_GAP = (100,500)
MONSTER_DISTANCE_GAP = (350,500)
MAX_PLATFORM_NUMBER = 10
MAX_MONSTER_NUMBER = 3
MAX_MONSTER_NUMBER = 2
BONUS_SPAWN_CHANCE = 10
BREAKABLE_PLATFORM_CHANCE = 12
STATIONARY_MONSTER_CHANCE = 10
MOVING_MONSTER_CHANCE = 10
MOVING_MONSTER_CHANCE = 12
# Fonts
LARGE_FONT = SysFont("",128)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment