0.1 Merge #85

Merged
Spafi merged 133 commits from Development into main 2024-03-12 22:02:51 +01:00
Showing only changes of commit 229435f682 - Show all commits

View file

@ -1,4 +1,5 @@
import pygame import pygame
import random
pygame.font.init() pygame.font.init()
fonts = { fonts = {
@ -201,9 +202,9 @@ class Scene(GameObjects):
obj.update()""" obj.update()"""
def draw(self, screen): def draw(self, screen):
if isinstance(self.objects, list): """if isinstance(self.objects, list):
for obj in self.objects[0] + self.objects[1] + self.objects[2] + self.objects[3]: for obj in self.objects[0] + self.objects[1] + self.objects[2] + self.objects[3]:
obj.draw(screen) obj.draw(screen)"""
self.level[self.current_level].draw(screen) self.level[self.current_level].draw(screen)
def getObjects(self): def getObjects(self):
@ -216,6 +217,7 @@ class Stage(GameObjects):
self.stage = stage self.stage = stage
self.rooms = rooms self.rooms = rooms
self.current = 0 self.current = 0
self.sortRooms(WIDTH)
def update(self, objects): def update(self, objects):
for room in self.rooms: for room in self.rooms:
@ -237,12 +239,41 @@ class Stage(GameObjects):
for room in self.rooms: for room in self.rooms:
if room.id == self.current: if room.id == self.current:
return room.getObjects() return room.getObjects()
def sortRooms(self, WIDTH):
rooms = self.rooms
for i, room in enumerate(rooms):
if room.type != 'boss':
i += 1
rand = random.randint(0, 25)
if rand < 7.5:
if rooms[i].id <= room.id: i += 1
room.exits.append([rooms[i].id, rooms[i].type])
elif rand < 20:
if rooms[i].id <= room.id: i += 1
room.exits.append([rooms[i].id, rooms[i].type])
if rand % 2 == 0: i += 1
if not i >= len(self.rooms) - 2:
room.exits.append([rooms[i + 1].id, rooms[i + 1].type])
else:
if rooms[i].id <= room.id: i += 1
room.exits.append([rooms[i].id, rooms[i].type])
if rand % 2 == 0: i += 1
if not i >= len(self.rooms) - 2:
room.exits.append([rooms[i + 1].id, rooms[i + 1].type])
if not i >= len(self.rooms) - 3:
room.exits.append([rooms[i + 2].id, rooms[i + 2].type])
for room in self.rooms:
print(str(room.id) + str(room.exits))
room.createDoors(WIDTH)
class Room(GameObjects): class Room(GameObjects):
def __init__(self, name:str, _type:str, bg, objects:list, WIDTH, HEIGHT, exits:list, id:int) -> None: def __init__(self, name:str, _type:str, bg, objects:list, WIDTH, HEIGHT, id:int) -> None:
super().__init__(name, _type, bg, objects, WIDTH, HEIGHT) super().__init__(name, _type, bg, objects, WIDTH, HEIGHT)
self.exits = exits self.exits = []
self.id = id self.id = id
self.doors = []
if self.type == 'normal' or self.type == 'boss': if self.type == 'normal' or self.type == 'boss':
self.locked = True self.locked = True
else: else:
@ -257,6 +288,17 @@ class Room(GameObjects):
walls.append(Obstacle('wall_b', 'wall', None, True, 32, HEIGHT + 28, True, WIDTH=WIDTH, HEIGHT=4)) walls.append(Obstacle('wall_b', 'wall', None, True, 32, HEIGHT + 28, True, WIDTH=WIDTH, HEIGHT=4))
return walls return walls
def createDoors(self, WIDTH):
if len(self.exits) == 1:
self.doors.append(Door(f'door{self.id}', self.exits[0][1], random.randint(64, round(WIDTH * 0.75)), 4, self.exits[0][0]))
elif len(self.exits) == 2:
self.doors.append(Door(f'door{self.id}', self.exits[0][1], random.randint(64, round(WIDTH * 0.45)), self.exits[0][0]))
self.doors.append(Door(f'door{self.id}', self.exits[1][1], random.randint(round(WIDTH * 0.5), round(WIDTH * 0.9)), self.exits[1][0]))
else:
self.doors.append(Door(f'door{self.id}', self.exits[0][1], random.randint(64, round(WIDTH * 0.3)), self.exits[0][0]))
self.doors.append(Door(f'door{self.id}', self.exits[1][1], random.randint(round(WIDTH * 0.33), round(WIDTH * 0.6)), self.exits[1][0]))
self.doors.append(Door(f'door{self.id}', self.exits[2][1], random.randint(round(WIDTH * 0.63), round(WIDTH * 0.95)), self.exits[2][0]))
def update(self, objects): def update(self, objects):
if objects is not None: if objects is not None:
self.objects = objects self.objects = objects
@ -265,10 +307,12 @@ class Room(GameObjects):
return return
def draw(self, screen): def draw(self, screen):
screen.blit(self.background, (32, 32)) """screen.blit(self.background, (32, 32))
if isinstance(self.objects, list): if isinstance(self.objects, list):
for obj in self.objects[3] + self.objects[0] + self.objects[1] + self.objects[2]: for obj in self.objects[3] + self.objects[0] + self.objects[1] + self.objects[2]:
obj.draw(screen) obj.draw(screen)"""
for door in self.doors:
door.draw(screen)
def getObjects(self): def getObjects(self):
return self.objects return self.objects
@ -288,12 +332,10 @@ class Obstacle(GameObjects):
def draw(self, screen): def draw(self, screen):
if not self.hidden: if not self.hidden:
screen.blit(self.background, self.rect) screen.blit(self.background, self.rect)
else:
pygame.draw.rect(screen, '#e7f8e0', self.rect, 2)
class Door(GameObjects): class Door(GameObjects):
def __init__(self, name: str, _type: str, bg, objects: list, WIDTH, HEIGHT, x: int, y: int, islocked=True) -> None: def __init__(self, name: str, _type: str, x: int, target:int, y: int=8, objects: list=None, WIDTH=None, HEIGHT=None, islocked=True) -> None:
super().__init__(name, _type, bg, objects, WIDTH, HEIGHT) super().__init__(name, _type, f'art/images/background/door_{_type}.png', objects, WIDTH, HEIGHT)
self.rect = pygame.Rect((x, y), self.background.get_size()) self.rect = pygame.Rect((x, y), self.background.get_size())
self.locked = islocked self.locked = islocked