ef:gameprojekt:gruppenseiten:gruppe5:start

Dies ist eine alte Version des Dokuments!


Bomb It mit Python

Wir wollen ein Spiel programmieren, in welchem man mit dem Spieler auf einem Feld herumlaufen kann. Es gibt fixe Hindernisse und auch zerstörbare. Der Spieler kann Bomben platzieren. Bomben zerstören Hindernisse, welche dann Item droppen. Wenn man die Items aufsammelt, bekommt der Spieler ein Upgrade. Das Spiel spielt man zu zweit. Der Spieler der am längsten überlebt gewinnt. Andere Spieler werden durch Bomben getötet. Spieler 1 spielt mit W,A,S,D und Leertaste und Spieler 2 spielt mit dem Pfeiltasten und Enter.

import arcade

# Größe des Fensters festlegen
WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480

# Klasse für den Spieler definieren
class Player(arcade.Sprite):
    def __init__(self, x, y):
        super().__init__(":resources:images/animated_characters/male_person/malePerson_idle.png", 0.5)
        self.center_x = x
        self.center_y = y

#Klasse für die explodierten Bomben
class Exploded(arcade.Sprite):
    def __init__(self,x ,y):
        super().__init__(":resources:images/pinball/bumper.png", 0.4)
        self.center_x = x
        self.center_y = y
    
    def explode(self, exploded):
        pass
    
    def remove_exploded(self, exploded):
        self.remove_from_sprite_lists()
        arcade.unschedule(self.explode_bomb)
        arcade.unschedule(self.remove_exploded)

# Klasse für die Bombe definieren
class Bomb(arcade.Sprite): 
    def __init__(self, x, y):
        super().__init__(":resources:images/tiles/bomb.png", 0.4)
        self.center_x = x
        self.center_y = y
        # Timer für die Explosion starten
        arcade.schedule(self.remove_bomb, 3)
    
    #Bombe aus der Sprite-Liste entfernen        
    def remove_bomb(self, bomb):
        self.remove_from_sprite_lists()
        arcade.unschedule(self.remove_bomb)

# Klasse für das Spiel definieren
class BombItGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        arcade.set_background_color(arcade.color.BLACK)

        # Sprite-Listen erstellen
        self.player_list = arcade.SpriteList()
        self.bomb_list = arcade.SpriteList()
        self.exploded_list = arcade.SpriteList()

        # Spieler-Sprite erstellen und zur Sprite-Liste hinzufügen
        self.player = Player(50, 50)
        self.player_list.append(self.player)

    def on_draw(self):
        # Zeichenbereich löschen und neu zeichnen
        arcade.start_render()

        # Sprites zeichnen
        self.player_list.draw()
        self.bomb_list.draw()
        self.exploded_list.draw()

    def on_key_press(self, key, modifiers):
        # Bewegung des Spielers mit den Pfeiltasten
        if key == arcade.key.UP:
            self.player.center_y += 50
        elif key == arcade.key.DOWN:
            self.player.center_y -= 50
        elif key == arcade.key.LEFT:
            self.player.center_x -= 50
        elif key == arcade.key.RIGHT:
            self.player.center_x += 50

        # Bombe legen mit der Leertaste
        elif key == arcade.key.SPACE:
            bomb = Bomb(self.player.center_x, self.player.center_y)
            self.bomb_list.append(bomb)
            #Explodierte Bombe hinzufügen
            arcade.schedule(self.create_explodedbomb, 3)

    def create_explodedbomb(self):
        exploded = Exploded(self.player.center_x, self.player.center_y)
        self.exploded_list.append(self.exploded)

    
    def on_update(self, delta_time):
        self.player_list.update()
        self.bomb_list.update()
        self.exploded_list.update()

        # Generate a list of all sprites that collided with the player.
        hit_list = arcade.check_for_collision_with_list(self.player, self.exploded_list)
        for self.player in hit_list:
            self.remove_from_sprite_lists()

        

# Hauptfunktion
def main():
    game = BombItGame(WINDOW_WIDTH, WINDOW_HEIGHT)
    arcade.run()

if __name__ == "__main__":
    main()

  • ef/gameprojekt/gruppenseiten/gruppe5/start.1675171367.txt.gz
  • Zuletzt geändert: 2023/01/31 14:22
  • von amackert