From: Skullheadx <704277@pdsb.net> Date: Sat, 9 Jul 2022 19:19:22 +0000 (-0400) Subject: ability to import levels into game X-Git-Url: http://git.skullheadx.com/nixos/static/projects/suckless.html?a=commitdiff_plain;h=09698ea3e9c79ab0dd01d77a7155cb79d14428da;p=Pygame-Jam.git ability to import levels into game --- diff --git a/LevelCreator.py b/LevelCreator.py index decbb4f..61b9904 100644 --- a/LevelCreator.py +++ b/LevelCreator.py @@ -1,9 +1,10 @@ +import os + +import numpy as np import pygame.mouse -from Setup import * from Function.createText import createText -import numpy as np -import os +from Setup import * class LevelCreator: @@ -42,21 +43,41 @@ class LevelCreator: Button((0, 0), f"{self.collision_layer=}", self.toggle_collidable), Button((0, 0), "Toggle Hitboxes", self.toggle_show_hitboxes), Button((0, 0), "Export", self.export)] - + self.level = -2 def export(self): + # for layer in out: + # for i,block in enumerate(layer): + # layer[i] = Block(block.position,block.collision_layer,block.texture_name) + counter = 1 + + def get_key(mask): + for key, value in self.blocks.items(): + if mask == value: + return key + while True: try: - with open(os.path.join("Levels",f'Level{counter}.txt'), 'x') as f: - f.write(str(self.get_canvas_layers())) + with open(os.path.join("Levels", f'Level{counter}.txt'), 'x') as f: + out = "" + for layer in self.get_canvas_layers(): + t = "" + pos = "" + texture = "" + for block in layer: + t += f"{get_key(block.collision_layer)}|" + pos += f"{block.position.x},{block.position.y}|" + texture += f"{block.texture_name}|" + out += f"{t[:-1]}\n{pos[:-1]}\n{texture[:-1]}\n" + f.write(out) + print(f"File saved as Level{counter} in folder Levels") break except FileExistsError: counter += 1 - def toggle_collidable(self): if self.collision_layer == "none": self.collision_layer = "world" @@ -199,6 +220,13 @@ class LevelCreator: if self.show_hitboxes: block.show_hitbox(surf, self.blocks["world"]) + pg.draw.line(surf, (255, 0, 0), self.apply_transformations((self.reverse_transformations((0, 0)).x, 0)), + self.apply_transformations((self.reverse_transformations((SCREEN_WIDTH, 0)).x, 0)), + math.ceil(self.zoom * 5)) + pg.draw.line(surf, (255, 0, 0), self.apply_transformations((0, self.reverse_transformations((0, 0)).y)), + self.apply_transformations((0, self.reverse_transformations((0, SCREEN_HEIGHT)).y)), + math.ceil(self.zoom * 5)) + display_img = EditorBlock.textures[self.textures[self.current_texture]].copy() display_img.set_alpha(100) surf.blit(pg.transform.scale(display_img, self.apply_rect_transformations(display_img.get_rect()).size), @@ -273,6 +301,7 @@ class EditorBlock: def __init__(self, pos, collision_layer, texture="PLACEHOLDER"): self.position = pg.Vector2(pos) self.texture = self.textures[texture] + self.texture_name = texture self.collision_layer = collision_layer diff --git a/Levels/Level1.txt b/Levels/Level1.txt index 934467b..401a5e4 100644 --- a/Levels/Level1.txt +++ b/Levels/Level1.txt @@ -1 +1,15 @@ -[[, , , , , , , , , , , , , , , , , ], [], [], [], []] \ No newline at end of file +none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|none|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world +1400.0,750.0|1300.0,800.0|1350.0,750.0|1300.0,750.0|1250.0,750.0|1250.0,800.0|1200.0,750.0|1050.0,750.0|1000.0,750.0|950.0,750.0|900.0,750.0|850.0,750.0|800.0,750.0|750.0,750.0|700.0,750.0|650.0,750.0|600.0,750.0|550.0,750.0|500.0,750.0|450.0,750.0|400.0,750.0|350.0,750.0|300.0,750.0|250.0,750.0|200.0,750.0|150.0,750.0|100.0,750.0|50.0,750.0|0.0,750.0|0.0,800.0|50.0,800.0|100.0,800.0|1100.0,750.0|1150.0,750.0|1200.0,800.0|1150.0,800.0|1100.0,800.0|1050.0,800.0|1000.0,800.0|800.0,800.0|750.0,800.0|700.0,800.0|650.0,800.0|600.0,800.0|250.0,800.0|200.0,800.0|150.0,800.0|1450.0,700.0|1500.0,700.0|1750.0,700.0|1800.0,700.0|1850.0,700.0|1900.0,700.0|1950.0,700.0|2000.0,700.0|2050.0,700.0|2050.0,750.0|2000.0,750.0|1950.0,750.0|1900.0,750.0|1850.0,750.0|1800.0,750.0|1700.0,700.0|1650.0,700.0|1600.0,700.0|1550.0,700.0|1750.0,750.0|1700.0,750.0|1650.0,750.0|1600.0,750.0|1550.0,750.0|1500.0,750.0|1450.0,750.0|2100.0,750.0|2450.0,700.0|2450.0,650.0|2450.0,750.0|2500.0,750.0|2500.0,700.0|2500.0,650.0|2500.0,600.0|2550.0,600.0|2550.0,650.0|2550.0,700.0|2550.0,750.0|2600.0,750.0|2600.0,700.0|2600.0,650.0|2600.0,600.0|2400.0,800.0|2450.0,800.0|2650.0,800.0|2600.0,800.0|2550.0,800.0|2500.0,800.0|2300.0,850.0|2350.0,850.0|2400.0,850.0|2450.0,850.0|2500.0,850.0|2550.0,850.0|2600.0,850.0|2650.0,850.0|2650.0,900.0|2600.0,900.0|2250.0,850.0|2250.0,900.0|2300.0,900.0|2350.0,900.0|2400.0,900.0|2450.0,900.0|2500.0,900.0|2550.0,900.0|2650.0,950.0|2600.0,950.0|2550.0,950.0|2500.0,950.0|2450.0,950.0|2400.0,950.0|2350.0,950.0|2300.0,950.0|2250.0,950.0|2200.0,950.0|2150.0,950.0|2100.0,950.0|2050.0,950.0|2000.0,950.0|1950.0,950.0|1900.0,950.0|1850.0,950.0|1800.0,950.0|1750.0,950.0|1700.0,950.0|1650.0,950.0|1600.0,950.0|1550.0,950.0|1500.0,950.0|1450.0,950.0|1400.0,950.0|1350.0,950.0|1300.0,950.0|1250.0,950.0|1200.0,950.0|1150.0,950.0|1100.0,950.0|1050.0,950.0|1000.0,950.0|950.0,950.0|900.0,950.0|850.0,950.0|800.0,950.0|750.0,950.0|700.0,950.0|650.0,950.0|600.0,950.0|550.0,950.0|450.0,900.0|400.0,900.0|350.0,900.0|300.0,900.0|250.0,900.0|200.0,900.0|150.0,900.0|100.0,900.0|50.0,900.0|0.0,900.0|0.0,950.0|50.0,950.0|100.0,950.0|150.0,950.0|200.0,950.0|250.0,950.0|300.0,950.0|350.0,950.0|400.0,950.0|450.0,950.0|500.0,950.0|500.0,900.0|550.0,900.0|600.0,900.0|650.0,900.0|700.0,900.0|750.0,900.0|800.0,900.0|850.0,900.0|900.0,900.0|1000.0,900.0|1050.0,900.0|1100.0,900.0|1150.0,900.0|1200.0,900.0|1250.0,900.0|1300.0,900.0|1350.0,900.0|1400.0,900.0|1450.0,900.0|1500.0,900.0|1400.0,850.0|1450.0,850.0|1500.0,850.0|1550.0,850.0|950.0,900.0|1600.0,850.0|1650.0,850.0|1700.0,850.0|1750.0,850.0|1800.0,850.0|1850.0,850.0|1900.0,850.0|1950.0,850.0|2000.0,850.0|2050.0,850.0|2100.0,850.0|2150.0,850.0|2200.0,850.0|2200.0,900.0|2150.0,900.0|2100.0,900.0|2050.0,900.0|2000.0,900.0|1950.0,900.0|1900.0,900.0|1850.0,900.0|1800.0,900.0|1750.0,900.0|1700.0,900.0|1650.0,900.0|1600.0,900.0|1550.0,900.0|1300.0,850.0|1250.0,850.0|1200.0,850.0|1150.0,850.0|1100.0,850.0|1050.0,850.0|1000.0,850.0|750.0,850.0|700.0,850.0|650.0,850.0|600.0,850.0|250.0,850.0|200.0,850.0|150.0,850.0|100.0,850.0|50.0,850.0|0.0,850.0|300.0,800.0|350.0,800.0|400.0,800.0|450.0,800.0|500.0,800.0|550.0,800.0|850.0,800.0|900.0,800.0|950.0,800.0|1350.0,800.0|1400.0,800.0|1450.0,800.0|1500.0,800.0|1550.0,800.0|1600.0,800.0|1650.0,800.0|1700.0,800.0|1750.0,800.0|1800.0,800.0|1850.0,800.0|1900.0,800.0|1950.0,800.0|2000.0,800.0|2050.0,800.0|2100.0,800.0|2150.0,800.0|1350.0,850.0|2100.0,700.0|950.0,850.0|900.0,850.0|850.0,850.0|800.0,850.0|550.0,850.0|500.0,850.0|450.0,850.0|400.0,850.0|350.0,850.0|300.0,850.0|800.0,550.0|800.0,600.0|750.0,600.0|750.0,650.0|800.0,650.0|850.0,650.0|0.0,700.0|50.0,700.0|100.0,700.0|150.0,700.0|200.0,700.0|250.0,700.0|300.0,700.0|350.0,700.0|400.0,700.0|450.0,700.0|500.0,700.0|550.0,700.0|600.0,700.0|650.0,700.0|700.0,700.0|750.0,700.0|800.0,700.0|850.0,700.0|900.0,700.0|950.0,700.0|1000.0,700.0|1050.0,700.0|1100.0,700.0|1150.0,700.0|1200.0,700.0|1250.0,700.0|1300.0,700.0|1350.0,700.0|1400.0,700.0|1450.0,650.0|1500.0,650.0|1550.0,650.0|1600.0,650.0|1650.0,650.0|1700.0,650.0|1750.0,650.0|1800.0,650.0|1850.0,650.0|1900.0,650.0|1950.0,650.0|2000.0,650.0|2050.0,650.0|2100.0,650.0|2150.0,700.0|2150.0,750.0|2200.0,800.0|2250.0,800.0|2300.0,800.0|2350.0,800.0|2500.0,550.0|2550.0,550.0|2600.0,550.0|2650.0,600.0|2450.0,600.0|2400.0,650.0|2400.0,700.0|2400.0,750.0|2650.0,650.0|2650.0,700.0|2650.0,750.0 +DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|DIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|DIRT|STONE|STONE|STONE|STONEDIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|STONE|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|GRASS|DIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONEDIRT|STONE|STONE|STONE|STONE|STONE|STONE|STONE + + + + + + + + + + + + diff --git a/Levels/Level2.txt b/Levels/Level2.txt deleted file mode 100644 index d022992..0000000 --- a/Levels/Level2.txt +++ /dev/null @@ -1 +0,0 @@ -[[, , , , , , , , , , , , , , , , , , , ], [], [], [], []] \ No newline at end of file diff --git a/World.py b/World.py index c7ddb92..5b2b69c 100644 --- a/World.py +++ b/World.py @@ -1,56 +1,31 @@ from Setup import * from Block import Block +from os import path + class World: def __init__(self, collision_layer): self.collision_layer = collision_layer self.blocks = [] - self.add_world() - - def add_world(self): - for i in range(25): - self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4),self.collision_layer["world"],"GRASS")) - self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height),self.collision_layer["world"],"DIRT")) - if random.random() < 0.5: - self.blocks.append( - Block((i * Block.width, SCREEN_HEIGHT * 3 / 4 + Block.height * 2), self.collision_layer["world"], - "STONE")) - else: - self.blocks.append( - Block((i * Block.width, SCREEN_HEIGHT * 3 / 4 + Block.height * 2), self.collision_layer["world"], - "DIRT")) - self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height * 3),self.collision_layer["world"],"STONE")) - self.blocks.append(Block((i * Block.width,SCREEN_HEIGHT*3/4 + Block.height * 4),self.collision_layer["world"],"STONE")) - - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -1),self.collision_layer["none"],"TREEBARK")) - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -2),self.collision_layer["none"],"TREEBARK")) - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"TREEBARK")) - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"TREEBARK")) - - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS")) - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS")) - self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 10,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS")) - - self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS")) - self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS")) - self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 9,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS")) - - self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS")) - self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAF")) - self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 11,SCREEN_HEIGHT*3/4 + Block.height * -6),self.collision_layer["none"],"LEAFS")) - - - # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 12,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -3),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -4),self.collision_layer["none"],"LEAFS")) - # self.blocks.append(Block((Block.width * 8,SCREEN_HEIGHT*3/4 + Block.height * -5),self.collision_layer["none"],"LEAFS")) + self.level = 1 + self.add_world(self.level) + + def add_world(self, level): + with open(path.join("Levels", f'Level{level}.txt'), 'r') as f: + file_contents = f.read().split("\n") + + + for i in range(0,len(file_contents)-1,3): + layer = file_contents[i].split("|") + pos = file_contents[i+1].split("|") + texture = file_contents[i+2].split("|") + for l,p,t in zip(layer,pos,texture): + if p == "": + break + x,y = p.split(',') + self.blocks.append(Block((float(x),float(y)),self.collision_layer[l],t)) def update(self, delta): for block in self.blocks: