forked from InfoProjekt/game
		
	Development #2
					 1 changed files with 52 additions and 10 deletions
				
			
		
							
								
								
									
										62
									
								
								classes.py
									
										
									
									
									
								
							
							
						
						
									
										62
									
								
								classes.py
									
										
									
									
									
								
							|  | @ -1,4 +1,5 @@ | |||
| import pygame | ||||
| import random | ||||
| 
 | ||||
| pygame.font.init() | ||||
| fonts = { | ||||
|  | @ -201,9 +202,9 @@ class Scene(GameObjects): | |||
|                 obj.update()""" | ||||
|          | ||||
|     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]: | ||||
|                 obj.draw(screen) | ||||
|                 obj.draw(screen)""" | ||||
|         self.level[self.current_level].draw(screen) | ||||
| 
 | ||||
|     def getObjects(self): | ||||
|  | @ -216,6 +217,7 @@ class Stage(GameObjects): | |||
|         self.stage = stage | ||||
|         self.rooms = rooms | ||||
|         self.current = 0 | ||||
|         self.sortRooms(WIDTH) | ||||
|      | ||||
|     def update(self, objects): | ||||
|         for room in self.rooms: | ||||
|  | @ -237,12 +239,41 @@ class Stage(GameObjects): | |||
|         for room in self.rooms: | ||||
|             if room.id == self.current: | ||||
|                 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): | ||||
|     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) | ||||
|         self.exits = exits | ||||
|         self.exits = [] | ||||
|         self.id = id | ||||
|         self.doors = [] | ||||
|         if self.type == 'normal' or self.type == 'boss': | ||||
|             self.locked = True | ||||
|         else: | ||||
|  | @ -257,6 +288,17 @@ class Room(GameObjects): | |||
|         walls.append(Obstacle('wall_b', 'wall', None, True, 32, HEIGHT + 28, True, WIDTH=WIDTH, HEIGHT=4)) | ||||
|         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): | ||||
|         if objects is not None: | ||||
|             self.objects = objects | ||||
|  | @ -265,10 +307,12 @@ class Room(GameObjects): | |||
|         return | ||||
|      | ||||
|     def draw(self, screen): | ||||
|         screen.blit(self.background, (32, 32)) | ||||
|         """screen.blit(self.background, (32, 32)) | ||||
|         if isinstance(self.objects, list): | ||||
|             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): | ||||
|         return self.objects | ||||
|  | @ -288,12 +332,10 @@ class Obstacle(GameObjects): | |||
|     def draw(self, screen): | ||||
|         if not self.hidden: | ||||
|             screen.blit(self.background, self.rect) | ||||
|         else: | ||||
|             pygame.draw.rect(screen, '#e7f8e0', self.rect, 2) | ||||
| 
 | ||||
| class Door(GameObjects): | ||||
|     def __init__(self, name: str, _type: str, bg, objects: list, WIDTH, HEIGHT, x: int, y: int, islocked=True) -> None: | ||||
|         super().__init__(name, _type, bg, objects, WIDTH, HEIGHT) | ||||
|     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, f'art/images/background/door_{_type}.png', objects, WIDTH, HEIGHT) | ||||
|         self.rect = pygame.Rect((x, y), self.background.get_size()) | ||||
|         self.locked = islocked | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue