def load_level(self): for i in self.blocks: self.esys.remove_entity(i) self.blocks = [] with open("Levels/"+str(self.level)+".json", "r") as f: datas = json.load(f) pos = Vec2() pos.coords = datas["player"] for k, v in datas["blocks"].items(): if k == "grass": sprite = "Assets/Tiles/Grass.png" elif k == "treasure": sprite = "Assets/Tiles/Chest.png" elif k == "saw": sprite = "Assets/Obstacles/Saw.png" else: print("Unknown block : "+k) break for i in v: p = Vec2() p.coords = i self.blocks.append(Block(sprite, p)) for i in self.blocks: self.esys.add_entity(i) self.player.set_pos(pos)
def test_size(self): self.assertEqual( self.widget.size, Vec2(self.widget.image.get_rect().width, self.widget.image.get_rect().height)) self.widget.size = Vec2(10, 10) self.assertEqual( Vec2(self.widget.image.get_rect().width, self.widget.image.get_rect().height), Vec2(10, 10))
def __init__(self): super(Anim, self).__init__( Vec2(100, 200), ['Images/sprite0.png', 'Images/sprite1.png', 'Images/test.gif'], 20, Vec2(50, 50)) try: self.init() except AttributeError: pass
def create_image(obj): image = obj.properties["Image"] posx = obj.properties["Position X"] posy = obj.properties["Position Y"] sizex = obj.properties["Taille X"] sizey = obj.properties["Taille Y"] if sizex != 0 and sizey != 0: return Image(Vec2(posx, posy), image, Vec2(sizex, sizey)) else: return Image(Vec2(posx, posy), image)
def setUp(self): self.e = Entity() self.components = [ PositionComponent(Vec2(10, 10)), SpriteComponent("files/sprite0.png"), PhysicsComponent(), LifeComponent(100), MoveComponent(Vec2(1, 1)), ControlComponent(ControlType.FOURDIRECTION) ]
def create_button(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] sizex = obj.properties["Taille X"] sizey = obj.properties["Taille Y"] text = obj.properties["Texte"] image = obj.properties["Image"] return Button(Vec2(posx, posy), text, size=Vec2(sizex, sizey), sprite=image)
def create_anim(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] images = obj.properties["Images"] timer = obj.properties["Timer"] sizex = obj.properties["Taille X"] sizey = obj.properties["Taille Y"] if sizex == 0 or sizey == 0: return AnimatedImage(Vec2(posx, posy), images, timer) else: return AnimatedImage(Vec2(posx, posy), images, timer, Vec2(sizex, sizey))
def create_progress(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] sizex = obj.properties["Taille X"] sizey = obj.properties["Taille Y"] imf = obj.properties["Image Fond"] imb = obj.properties["Image Barre"] if imf is None or imb is None: return ProgressBar(Vec2(posx, posy), Vec2(sizex, sizey)) else: return ProgressBar(Vec2(posx, posy), Vec2(sizex, sizey), (imf, imb))
def __init__(self): super(Tile, self).__init__(Vec2(400, 300), "Tilemaps/Tile/level.json", 1) try: self.init() except AttributeError: pass
def create_checkbox(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] text = obj.properties["Texte"] check = obj.properties["Coché"] scale = obj.properties["Scale"] return Checkbox(Vec2(posx, posy), text, check, scale)
def outofwindow(self, e, pos): if e == self.player: with open("Levels/" + str(self.level) + ".json", "r") as f: datas = json.load(f) pos = Vec2() pos.coords = datas["player"] self.player.set_pos(pos)
def __init__(self): super(Multiline, self).__init__( Vec2(500, 300), "Ceci est un test\nnan ?\nMoi je suis d'accord !", Color(70, 169, 255), Font("arial", 20, False, False, False)) try: self.init() except AttributeError: pass
def __init__(self): super(Label, self).__init__(Vec2(525, 525), "Mamadou", Color(255, 0, 4), Font("arial", 26, True, True, True)) try: self.init() except AttributeError: pass
def outofwindow(self, obj, pos): # Si notre objet est le joueur 1 if obj == self.j1: # On récupère le PositionComponent du J1 pour le "bloquer" dans l'écran position = self.j1.get_component(PositionComponent) if pos.y <= 0: position.position = Vec2(10, 0) else: position.position = Vec2(10, 350) # Si notre objet est le joueur 2 elif obj == self.j2: # On récupère le PositionComponent du J2 pour le "bloquer" dans l'écran position = self.j2.get_component(PositionComponent) if pos.y <= 0: position.position = Vec2(770, 0) else: position.position = Vec2(770, 350) # Si notre objet est la balle else: # Si la balle sort de l'écran sur les cotés if pos.x < 10 or pos.x > 790: # On replace la balle au centre position = self.ball.get_component(PositionComponent) position.position = Vec2(390, 190) self.ball.get_component(MoveComponent).direction = Vec2(randint(1, 5), randint(1, 5)) # Si la balle sort de l'écran par le haut else: # On inverse la direction y du movement de la base move = self.ball.get_component(MoveComponent) move.direction = Vec2(move.direction.x, -move.direction.y)
def __init__(self): super(Entry, self).__init__(Vec2(10, 500), 200, color=Color(255, 255, 255), font=Font("arial", 15, False, False, False)) try: self.init() except AttributeError: pass
def __init__(self): # Création de la fenêtre de jeu de taille 800x400, de fond blanc et titre "Pong" self.window = Window(800, 400, Colors.WHITE.value) self.window.title = "Pong" # Définition du callback OUTOFWINDOW self.window.set_callback(WindowCallbacks.OUTOFWINDOW, self.outofwindow) # Création de l'entité pour la barre du joueur à gauche avec : # - Un PositionComponent avec les positions 10, 175 # - Un SpriteComponent avec le sprite texture.png que l'on redimensionne en 20, 50 # - Un ControlComponent avec un ControlType UPDOWN auquel on définit les touches à Z et S (azerty) # - Un PhysicsComponent sans l'affection par la gravité self.j1 = Entity() self.j1.add_component(PositionComponent(Vec2(10, 175))) spritej1 = self.j1.add_component(SpriteComponent("images/texture.png")) spritej1.size = Vec2(20, 50) controlj1 = self.j1.add_component(ControlComponent(ControlType.UPDOWN)) controlj1.set_control(Controls.UPJUMP, const.K_w) controlj1.set_control(Controls.DOWN, const.K_s) self.j1.add_component(PhysicsComponent(False)) # Création de l'entité pour la barre du joueur à droite avec : # - Un PositionComponent avec les positions 770, 175 # - Un SpriteComponent avec le sprite texture.png que l'on redimensionne en 20, 50 # - Un ControlComponent avec un ControlType UPDOWN auquel on définit les touches aux flèches haut et bas # - Un PhysicsComponent sans l'affection par la gravité self.j2 = Entity() self.j2.add_component(PositionComponent(Vec2(770, 175))) spritej2 = self.j2.add_component(SpriteComponent("images/texture.png")) spritej2.size = Vec2(20, 50) controlj2 = self.j2.add_component(ControlComponent(ControlType.UPDOWN)) controlj2.set_control(Controls.UPJUMP, const.K_UP) controlj2.set_control(Controls.DOWN, const.K_DOWN) self.j2.add_component(PhysicsComponent(False)) # Création de l'entité pour la balle avec : # - Un PositionComponent avec les positions 390, 190 # - Un SpriteComponent avec le sprite texture.png que l'on redimensionne en 20, 20 # - Un PhysicsComponent sans l'affection par la gravité dont on définit le callback de collision # - Un MoveComponent avec comme direction random self.ball = Entity() self.ball.add_component(PositionComponent(Vec2(390, 190))) spriteballe = self.ball.add_component(SpriteComponent("images/texture.png")) spriteballe.size = Vec2(20, 20) physball = self.ball.add_component(PhysicsComponent(False)) physball.callback = self.collision self.ball.add_component(MoveComponent(Vec2(randint(20, 60), randint(20, 60)))) # Ajout des entités au monde via l'EntitySystem entitysystem = self.window.world.get_system(EntitySystem) entitysystem.add_entity(self.j1) entitysystem.add_entity(self.j2) entitysystem.add_entity(self.ball) # Lancement du jeu self.window.run()
def create_label(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] texte = obj.properties["Texte"] color = obj.properties["Couleur"] font = obj.properties["Font"] npolice = obj.properties["Nom Police"] tpolice = obj.properties["Taille Police"] ipolice = obj.properties["Italique"] gpolice = obj.properties["Gras"] spolice = obj.properties["Souligné"] if font is None: return Label(Vec2(posx, posy), texte, Color(color[0], color[1], color[2]), Font(npolice, tpolice, gpolice, ipolice, spolice)) else: return Label(Vec2(posx, posy), texte, Color(color[0], color[1], color[2]), Font(npolice, tpolice, gpolice, ipolice, spolice), Color(font[0], font[1], font[2]))
def test_management_entity(self): with self.assertRaises(NoObjectError): self.system.add_entity(self.e) self.e.add_component(PositionComponent(Vec2())) with self.assertRaises(NoObjectError): self.system.add_entity(self.e) self.e.add_component(SpriteComponent("files/sprite0.png")) self.system.add_entity(self.e) self.assertIn(self.e, self.system.entities.sprites()) self.assertEqual(self.system.get_entity(0), self.e) self.assertEqual(self.system.has_entity(self.e), True) self.system.remove_entity(self.e) self.assertEqual(self.system.has_entity(self.e), False)
def __init__(self, window): super(Game, self).__init__(window) self.level = 1 self.maxlevel = 2 self.esys = self.get_system(EntitySystem) self.player = Player(self, Vec2(10, 10)) self.esys.add_entity(self.player) self.blocks = [] self.load_level()
def create_entry(obj): posx = obj.properties["Position X"] posy = obj.properties["Position Y"] wid = obj.properties["Largeur"] image = obj.properties["Image"] color = obj.properties["Couleur"] npolice = obj.properties["Nom Police"] tpolice = obj.properties["Taille Police"] ipolice = obj.properties["Italique"] gpolice = obj.properties["Gras"] spolice = obj.properties["Souligné"] return Entry(Vec2(posx, posy), wid, image, Color(color[0], color[1], color[2]), Font(npolice, tpolice, gpolice, ipolice, spolice))
def create_tilemap(obj): pos_x = obj.properties["Position X"] pos_y = obj.properties["Position Y"] file = obj.properties["Fichier JSON"] scale = obj.properties["Scale"] tilemap = Tilemap(Vec2(pos_x, pos_y), file, scale) tiles = [] for i in tilemap.tiles: entity = Entity() entity.pos = i.get_component(PositionComponent).position.coords entity.image = i.image tiles.append(entity) return tiles
def __init__(self): self.window = Window(800, 400, Colors.WHITE.value) self.window.title = "Pong" self.window.set_callback(WindowCallbacks.OUTOFWINDOW, self.outofwindow) self.j1 = Entity() self.j1.add_component(PositionComponent(Vec2(10, 175))) spritej1 = self.j1.add_component(SpriteComponent("images/sprite0.png")) spritej1.size = Vec2(20, 50) controlj1 = self.j1.add_component( ControlComponent(ControlType.UPDOWN, 3)) controlj1.set_control(Controls.UPJUMP, const.K_w) controlj1.set_control(Controls.DOWN, const.K_s) self.j1.add_component(PhysicsComponent(False)) self.j2 = Entity() self.j2.add_component(PositionComponent(Vec2(770, 175))) spritej2 = self.j2.add_component(SpriteComponent("images/sprite0.png")) spritej2.size = Vec2(20, 50) controlj2 = self.j2.add_component( ControlComponent(ControlType.UPDOWN, 3)) controlj2.set_control(Controls.UPJUMP, const.K_UP) controlj2.set_control(Controls.DOWN, const.K_DOWN) self.j2.add_component(PhysicsComponent(False)) self.ball = Entity() self.ball.add_component(PositionComponent(Vec2(390, 190))) spriteballe = self.ball.add_component( SpriteComponent("images/sprite0.png")) spriteballe.size = Vec2(20, 20) physball = self.ball.add_component(PhysicsComponent(False)) physball.callback = self.collision self.ball.add_component( MoveComponent(Vec2(randint(50, 100), randint(50, 100)))) entitysystem = self.window.world.get_system(EntitySystem) entitysystem.add_entity(self.j1) entitysystem.add_entity(self.j2) entitysystem.add_entity(self.ball) self.window.run()
def __init__(self, window): super(Win, self).__init__(window) self.window = window self.uisys = self.get_system(UISystem) self.ltitle = Label(Vec2(), "BRAVO", font=Font(size=45)) self.ltitle.position = Vec2( self.window.width / 2 - self.ltitle.rect.width / 2, 50) self.bplay = Button(Vec2(self.window.width / 2 - 100, 170), "Rejouer", self.replay, Vec2(200, 70)) self.bplay.label.font = Font(size=25) self.bstop = Button(Vec2(self.window.width / 2 - 100, 320), "Quitter", self.stop, Vec2(200, 70)) self.bstop.label.font = Font(size=25) self.uisys.add_widget(self.ltitle) self.uisys.add_widget(self.bplay) self.uisys.add_widget(self.bstop)
def __init__(self): # Création de la fenêtre. Taille : 300x200. Fond : Blanc. Title : "Menu". self.window = Window(300, 200, Colors.WHITE.value) self.window.title = "Menu" # Création de deux World : un pour le menu, l'autre pour le jeu self.gworld = World(self.window) self.mworld = World(self.window) # Création du jeu : # - Un label "JEU" en 10, 10 de couleur noire et écrit en arial 18 # - Un bouton "Retour" en 10, 100 qui retourne au menu # - Un bouton "Quitter" en 150, 100 qui quitte le jeu self.labeljeu = Label(Vec2(10, 10), "JEU", Colors.BLACK.value, Font("arial", 18)) self.button1jeu = Button(Vec2(10, 50), "Retour", self.menu) self.button2jeu = Button(Vec2(150, 50), "Quitter", self.quitter) # Récupération de l'UISystem du monde du jeu et ajout des widgets self.uisystemjeu = self.gworld.get_system(UISystem) self.uisystemjeu.add_widget(self.labeljeu) self.uisystemjeu.add_widget(self.button1jeu) self.uisystemjeu.add_widget(self.button2jeu) # Création du menu : # - Un label "Menu" en 10, 10 de couleur noire et écrit en arial 18 gras # - Un bouton "Jouer" en 10, 100 qui va au jeu # - Un bouton "Quitter" en 150, 100 qui quitte le jeu self.labelmenu = Label(Vec2(10, 10), "MENU", Colors.BLACK.value, Font("arial", 18, True)) self.button1menu = Button(Vec2(10, 50), "Jouer", self.jouer) self.button2menu = Button(Vec2(150, 50), "Quitter", self.quitter) # Récupération de l'UISystem du monde du menu et ajout des widgets self.uisystemmenu = self.mworld.get_system(UISystem) self.uisystemmenu.add_widget(self.labelmenu) self.uisystemmenu.add_widget(self.button1menu) self.uisystemmenu.add_widget(self.button2menu) # Définition du World actuel à celui du menu et lancement de la fenêtre self.window.world = self.mworld self.window.run()
def outofwindow(self, obj, pos): if obj == self.j1: position = self.j1.get_component(PositionComponent) if pos.y <= obj.rect.height / 2: position.position = Vec2(10, obj.rect.height / 2) else: position.position = Vec2(10, 400 - obj.rect.height / 2) elif obj == self.j2: position = self.j2.get_component(PositionComponent) if pos.y <= obj.rect.height / 2: position.position = Vec2(770, obj.rect.height / 2) else: position.position = Vec2(770, 400 - obj.rect.height / 2) else: if pos.x < 10 or pos.x > 790: position = self.ball.get_component(PositionComponent) position.position = Vec2(390, 190) self.ball.get_component(MoveComponent).direction = Vec2( randint(50, 100), randint(50, 100)) else: move = self.ball.get_component(MoveComponent) move.direction = Vec2(move.direction.x, -move.direction.y)
def collision(self, entity, others, space, data): move = entity.get_component(MoveComponent) move.direction = Vec2(-move.direction.x, move.direction.y)
def __init__(self, window): super(Console, self).__init__(window, Vec2(200, 700), 500) try: self.init() except AttributeError: pass
def __init__(self): super(Progress, self).__init__(Vec2(400, 100), Vec2(200, 20)) try: self.init() except AttributeError: pass
def setUp(self): self.tilemap = Tilemap(Vec2(), "files/tilemap/TESTMAP.json")
def setUp(self): super(ImageTests, self).setUp() self.widget = Image(Vec2(10, 10), "files/sprite0.png")