Ejemplo n.º 1
0
def Game(screen):
    continuer = True
    w = world.World((5, 6, 10))
    p = player.Player([0, 0, 1], w)
    asteroids = [Asteroid.Asteroid(w)]
    while continuer:
        for event in pygame.event.get():
            if event.type == QUIT:
                return "Quit"
            if event.type == KEYDOWN:
                if event.key == K_UP:
                    p.move((1, 0, 0), w)
                elif event.key == K_DOWN:
                    p.move((-1, 0, 0), w)
                elif event.key == K_LEFT:
                    p.move((0, -1, 0), w)
                elif event.key == K_RIGHT:
                    p.move((0, 1, 0), w)
                elif event.key == K_SPACE:
                    p.shoot(w)
        for a in asteroids:
            a.update(w)
            if a.getZ() < 0:
                asteroids.remove(a)
                asteroids.append(Asteroid.Asteroid(w))
                if random.randint(0, 10) == 4:
                    asteroids.append(Asteroid.Asteroid(w))
        continuer = not p.update(w, asteroids)
        Engine.drawScreen(screen, p, w)
        pygame.display.update()
        pygame.time.wait(20)
    return ["EndScreen", p.getScore()]
Ejemplo n.º 2
0
def Title(screen):
    continuer = True
    w = world.World((4, 4, 8))
    p = player.Player([0, -1, 0], w)
    asteroids = [Asteroid.Asteroid(w) for i in range(7)]
    selection = 0
    while continuer:
        for e in pygame.event.get():
            if e.type == QUIT:
                return ["Quit"]
            elif e.type == KEYDOWN:
                if e.key == K_UP and selection == 1:
                    selection = 0
                elif e.key == K_DOWN and selection == 0:
                    selection = 1
                elif e.key == K_RETURN:
                    if selection == 0:
                        return ["GameScreen"]
                    else:
                        return ["Quit"]

        for a in asteroids:
            a.update(w)
            if a.getZ() < 0:
                asteroids.remove(a)
                asteroids.append(Asteroid.Asteroid(w))
        drawScreen(screen, selection, p, w)
        pygame.display.update()
Ejemplo n.º 3
0
    def __init__(self, root):
        super(Space, self).__init__()
        self.root = root
        self.widscore = Label(text="0")
        self.widscore.pack(side=TOP)
        self.canvas = Canvas(self.root, bg='#000015', height=500, width=500)
        self.canvas.pack()
        self.life = Label(text="Vie : ♥ ♥ ♥")
        self.life.pack()
        self.widscore.pack(side=TOP)
        quitter = Button(self.root, text="Quitter", command=quit)
        quitter.pack()
        self.score = 0
        self.spaceship = SpaceShip(self)
        self.lastposShip = []
        self.lastposShip.append(self.spaceship.getX())
        self.lastposShip.append(self.spaceship.getY())
        self.asteroids = []
        self.asteroids.append(Asteroid(self))
        self.asteroids.append(Asteroid(self))
        self.asteroids.append(Asteroid(self))
        self.asteroids.append(Asteroid(self))
        for aster in self.asteroids:
            aster.setDaemon(True)
            aster.start()
        self.objects = {}
        self.semaphore = threading.BoundedSemaphore()
        self.objects["ship"] = self.canvas.create_image(
            self.spaceship.getX(),
            self.spaceship.getY(),
            image=self.spaceship.getSprite())
        self.objects["asteroid0"] = self.canvas.create_oval(
            self.asteroids[0].getX(),
            self.asteroids[0].getY(),
            self.asteroids[0].getX() + self.asteroids[0].getWidth(),
            self.asteroids[0].getY() + self.asteroids[0].getWidth(),
            fill="#805650")
        self.objects["asteroid1"] = self.canvas.create_oval(
            self.asteroids[1].getX(),
            self.asteroids[1].getY(),
            self.asteroids[1].getX() + self.asteroids[1].getWidth(),
            self.asteroids[1].getY() + self.asteroids[1].getWidth(),
            fill="#805650")
        self.objects["asteroid2"] = self.canvas.create_oval(
            self.asteroids[2].getX(),
            self.asteroids[2].getY(),
            self.asteroids[2].getX() + self.asteroids[2].getWidth(),
            self.asteroids[2].getY() + self.asteroids[2].getWidth(),
            fill="#805650")
        self.objects["asteroid3"] = self.canvas.create_oval(
            self.asteroids[3].getX(),
            self.asteroids[3].getY(),
            self.asteroids[3].getX() + self.asteroids[3].getWidth(),
            self.asteroids[3].getY() + self.asteroids[3].getWidth(),
            fill="#805650")

        self.root.bind('<q>', self.spaceship.moveLeft)
        self.root.bind('<d>', self.spaceship.moveRight)
        self.root.bind('<z>', self.spaceship.moveUp)
        self.root.bind('<s>', self.spaceship.moveDown)
Ejemplo n.º 4
0
 def createSmallAsteroids(self):
     o = 0
     for o in range(2):
         self.asteroid_0 = Asteroid(self.width, self.height, self, Server.asteroid_id.__str__(), True, 1)
         self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
         self.asteroid_0.setStyleSheet("background:transparent")
         self.asteroid_0.resize(60, 50)
         self.addWidget(self.asteroid_0)
         Server.activeBigAsteroids.append(self.asteroid_0)
         Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
         Server.asteroid_id = Server.asteroid_id.__int__() + 1
Ejemplo n.º 5
0
def createAsteroids:
    asteroids = [];

    # Parameters for the search, feel free to edit <3
    startDate = "2015-09-07"
    endDate = "2015-09-08"
    apiKey = "jWyOLoAzhBbJ82DBDMFLS47BL5juRll6uUrVeUic"
    parameters = {"start_date": startDate, "end_date": endDate, "api_key": apiKey}

    # Gets response in a string <3
    response = requests.get("https://api.nasa.gov/neo/rest/v1/feed", params=parameters)
    print(response.status_code)

    # Puts response in data object that is of type JSON <3
    data = json.loads(response.content);

    # Obtains all the asteroids in a JSON array
    asteroidData = data['near_earth_objects']


    # Loops through every date, and for every date gets each asteroid and prints data
    asteroidNum = 0;
    for date in asteroidData:
            print(date);
            dateArray = asteroidData[date]
            for asteroid in dateArray:
                asteroidNum += 1
                minDistance = asteroid['estimated_diameter']['kilometers']['estimated_diameter_min']
                maxDistance = asteroid['estimated_diameter']['kilometers']['estimated_diameter_max']
                closeApproachData = asteroid['close_approach_data'][0] #Don't mind this...
                relativeVelocity = closeApproachData['relative_velocity']['kilometers_per_second']
                missDistance = closeApproachData['miss_distance']['kilometers']
                a = Asteroid(minDistance, maxDistance, relativeVelocity, missDistance)
                asteroids.append(a)
    return asteroids
Ejemplo n.º 6
0
    def fill(self, cam):
        env = Environment.Environment
        dis = random.randint(150, 200)

        self.lat = random.uniform(-1, 1)
        self.lon = (cam.rot[1] + math.pi) + random.uniform(-1, 1)
        lonS = math.sin(self.lon)
        lonC = math.cos(self.lon)
        self.pos = Vex(lonS * dis, lonC * dis, random.randint(
            -10, 10)) + cam.pos.copy().setZ(0)
        ast = Asteroid.Asteroid(random.Random(), self, 0,
                                self.pos.copy().setZ(0))
        #ast.speed = 0
        Asteroid.Asteroid.add_temp_asteroid(ast)
        self.lat = random.uniform(-Stars.pi, Stars.pi)
        self.lon = random.uniform(-Stars.pi, Stars.pi)
        v = (self.pos - cam.pos).rotate2dXY(cam.rot[1])
        v.setY(v.Y() + cam.mov[2])
        v.setZ(v.Z() + -cam.pos.Z())

        v = v.rotate2dYZ(0, cam.rot[0])

        f = env.fov / (v.z() + .00000001)
        if (f < env.lim):
            f = 1000
        v = v * f
        v = v + env.center
        self.lp = v.p2D()
Ejemplo n.º 7
0
def init():
    global AsteroidCount
    Player.reset((20, 200))
    Asteroids.empty()
    AsteroidCount += 3
    for i in range(AsteroidCount):
        Asteroids.add(Asteroid((400, 300)))
Ejemplo n.º 8
0
 def create_meteors(self, time):
     if time / 5000 > self.asteroid_spawn_counter:
         self.asteroid_spawn_counter += 1
         spawn = time / 10000
         x = 0
         while x != spawn:
             Asteroid.AsteroidObject(self)
             x += 1
Ejemplo n.º 9
0
    def init_objects(self, level):
        """Initializes a playfield, by adding stars and creating some asteroids.
        
        Arguments:
            level {int} -- Level to initialize (changes the number of asteroids in the playfield)
        """
        Scene.main.add(Starfield("Starfield", 400))

        n_asteroids = 3 + level

        for i in range(0,n_asteroids):
            asteroid = Asteroid("Asteroid" + str(i))
            dir = Vector2(random.uniform(-1, 1), random.uniform(-1, 1)).normalize()
            asteroid.position = Vector2(640, 360)
            asteroid.position.x = asteroid.position.x + dir.x * random.uniform(200, 640)
            asteroid.position.y = asteroid.position.y + dir.y * random.uniform(100, 360)
            Scene.main.add(asteroid)
Ejemplo n.º 10
0
 def create_meteors(self, time):
     local_time = time - self.start_time
     if local_time / 5000 > self.asteroid_spawn_counter:
         self.asteroid_spawn_counter += 1
         spawn = local_time / 10000
         x = 0
         while x != spawn:
             Asteroid.AsteroidObject(self)
             x += 1
Ejemplo n.º 11
0
def init():
    global current_level, asteroid_count
    level_data = df.iloc[current_level]
    player.reset((level_data['PlayerX'], level_data['PlayerY']))
    asteroid_count = level_data['AsteroidCount']
    asteroids.empty()
    for i in range(asteroid_count):
        asteroids.add(
            Asteroid((random.randint(0, 800), random.randint(0, 600))))
Ejemplo n.º 12
0
    def setup(self):
        """ Game Setup and Variable Initialization 
        TODO: Create more enemies and Make the title screen nicer"""

        # Create the initial object lists
        self.player_list = arcade.SpriteList()
        self.wall_list = arcade.SpriteList()
        self.asteroid_list = arcade.SpriteList()
        self.bolt_list = arcade.SpriteList()
        self.laser_list = arcade.SpriteList()
        self.alien_list = arcade.SpriteList()
        self.powerup_list = arcade.SpriteList()
        self.boss_list = arcade.SpriteList()
        self.beam_list = arcade.SpriteList()

        # Initial lives, Score and More
        self.lives = 5
        self.score = 0
        self.numOfAsteroids = 0
        self.numOfAliens = 0
        self.numOfPow = 0
        self.numOfBoss = 0
        self.laser = False
        self.bb = 0
        self.pow = False

        # Sets up the player in the center
        self.player_sprite = arcade.Sprite("Resources/spaceship.png",
                                           SPRITE_SCALING_PLAYER)
        self.player_sprite.timer = 0
        self.player_sprite.invul = PLAYER_INVULNERABILITY
        self.player_sprite.append_texture(
            arcade.load_texture("Resources/explosion.png"))
        self.player_sprite.append_texture(
            arcade.load_texture("Resources/spaceship-laser.png"))
        self.player_sprite.append_texture(
            arcade.load_texture("Resources/spaceship-bb.png"))
        self.player_sprite.append_texture(
            arcade.load_texture("Resources/spaceship-invul.png"))
        self.player_sprite.center_x = SCREEN_WIDTH / 2
        self.player_sprite.center_y = SCREEN_HEIGHT / 2
        self.player_sprite.movable = True
        self.player_list.append(self.player_sprite)

        for i in range(START_ASTEROID):
            self.asteroid_list, self.numOfAsteroids = Asteroid.createAsteroid(
                MyGame, False, self.asteroid_list, self.numOfAsteroids,
                SCREEN_HEIGHT, SCREEN_WIDTH, SPRITE_MAX_SCALING_ASTEROID,
                MAX_ASTEROID_SPEED)

        # Physics
        self.physics_engine = arcade.PhysicsEngineSimple(
            self.player_sprite, self.wall_list)

        # Gets rid of mouse cursor
        self.set_mouse_visible(False)
Ejemplo n.º 13
0
def setup():
    screen_info = pygame.display.Info()

    asteroids.empty()

    for i in range(int(num_asteroids)):
        x = random.randint(50, screen_info.current_w - 50)
        y = random.randint(50, screen_info.current_h - 50)
        size = random.randint(15, 50)
        a = Asteroid((x, y), size, "WorkingAsteroid.png")
        asteroids.add(a)
Ejemplo n.º 14
0
def End(screen, score):
    continuer = True
    w = world.World((4, 4, 8))
    p = player.Player([0, -1, 0], w)
    colorContinue = 252
    minus = True
    if not os.path.isfile("score.txt"):
        f = open("score.txt", "w")
        f.close()
    f = open("score.txt", "r")
    bestScore = score
    test = f.readline()
    f.close()
    print("Test : " + test + "TEST")
    if test != "" and score < int(test):
        bestScore = int(test)
    else:
        f = open("score.txt", "w")
        f.write(str(score))
        f.close()
    asteroids = [Asteroid.Asteroid(w) for i in range(7)]
    while continuer:
        for e in pygame.event.get():
            if e.type == QUIT:
                return ["Quit"]
            elif e.type == KEYDOWN:
                return ["TitleScreen"]
        for a in asteroids:
            a.update(w)
            if a.getZ() < 0:
                asteroids.remove(a)
                asteroids.append(Asteroid.Asteroid(w))
        drawScreen(screen, score, bestScore, colorContinue, p, w)
        if colorContinue > 0 and minus:
            colorContinue -= 4
        else:
            minus = False
            colorContinue += 4
            if colorContinue == 252:
                minus = True
        pygame.display.update()
Ejemplo n.º 15
0
def init():
    global asteroidCount, asteroids, levelData
    levelData = df.iloc[level]
    player.reset((levelData['PlayerX'], levelData['PlayerY']))
    asteroids.empty()
    asteroidCount = levelData['AsteroidCount']
    for i in range(asteroidCount):
        asteroids.add(
            Asteroid(
                (
                    random.randint(50, width - 50),  #X-Axis
                    random.randint(50, height - 50)),  #Y-Axis
                random.randint(15, 60)))  #Size
Ejemplo n.º 16
0
    def generateAsteroid(info,
                         radius=-1,
                         x=-1,
                         asteroidType=-1,
                         speed=-1,
                         speedFactor=1):  #generates and asteroid
        info.astGen = False  #clear flag
        factor = 1
        astRadius = 0

        if (asteroidType < 0):  #random asteroid type
            asteroidType = random.randrange(0, 3)

        if (asteroidType == 0):  #largest to smallest aseroid size
            factor = 0.25
            speed = 50
            astRadius = (10, 30)
        elif (asteroidType == 1):
            factor = 0.5
            speed = 35
            astRadius = (30, 40)
        else:
            factor = 1
            speed = 20
            astRadius = (40, 50)
        if (speed < 0):  #default speed
            speed *= speedFactor
            speed = (speed * random.random()) + (speed / 2.0)
        speed = (0, speed)

        radius = int(factor * random.random() *
                     (astRadius[1] - astRadius[0])) + astRadius[0]  #rotation
        radius = random.randrange(astRadius[0], astRadius[1]) * factor
        if (x < 0):  #random position
            x = (random.random() *
                 (info.pfSize[0] - radius)) + radius  #x coordinate
        position = (x, -radius)

        health = 100 * (radius / (50.0 * factor))

        pts = Polygon.generatePolygon(radius, random.randrange(4, 9), 0,
                                      (0, 0))  #Asteroid with random radius
        a = Asteroid.asteroid(
            position, pts, 0.5 * math.pi * random.random() - (0.25 * math.pi),
            speed, info.randColor(127, 256), 2, info.info.fps)

        a.setHealth(health)

        info.astList.append(a)
        info.astEvents.append((a.update, ()))
        info.nOfAst += 1
Ejemplo n.º 17
0
def MakeScreenObject(game, vals, id=None):
    if vals["is_alive"] == False:
        return None

    #print "make object"
    #return
    obj = None
    type = vals["type"]
    if type == "AsteroidObject":
        obj = Asteroid.AsteroidObject(game, id)
    if type == "ShipObject":
        obj = Ship.ShipObject(game, id)
    if type == "BulletObject":
        obj = Bullet.BulletObject(None, game)

    LoadScreenObject(obj, vals)
    return obj
Ejemplo n.º 18
0
 def update(self, world, asteroids):
     self.incScore(1)
     for s in self.shoots:
         s.update(world)
         for a in asteroids:
             if s.getPos() == a.getPos():
                 self.incScore(50)
                 asteroids.remove(a)
                 asteroids.append(Asteroid.Asteroid(world))
                 s.delete(world)
                 self.shoots.remove(s)
                 break
         if s.getZ() >= world.getSize()[2]:
             self.shoots.remove(s)
     for a in asteroids:
         if a.getPos() == self.getPos():
             return True
     return False
            False)  #Boolean checks if object should be killed upon collision
        playerHitAbilities = pygame.sprite.spritecollide(
            player1, abilities, True)
        playerHitLimits = pygame.sprite.spritecollide(player1, limits, True,
                                                      False)

        asteroidsHitAsteroids = pygame.sprite.groupcollide(
            asteroids, asteroids, False, False)

        missilesHitAsteroids = pygame.sprite.groupcollide(
            missiles, asteroids, True, False)

        while len(asteroids.sprites()) < 5:
            #  print len(asteroids.sprites())
            print len(asteroids.sprites())
            Asteroid(width, asteroids)
            # for asteroid in asteroidsHitAsteroids :
            # for otherasteroid in asteroidsHitAsteroids[asteroid]:
            # if asteroid.collideAsteroid(otherasteroid):
            # otherasteroid.kill()

        if len(asteroids.sprites()) < 2:
            if random.randint(
                    0, 10) == 0:  #controls how close asteroids spawn together
                Asteroid(width, asteroids)
                #asteroidsHitAsteroids = pygame.sprite.groupcollide(asteroids, asteroids, True, False)

        for ability in playerHitAbilities:
            if ability.kind == "repair":
                player1.colliderepair()
                player1.lives = 4
Ejemplo n.º 20
0
 def create_meteors(self, time):
     local_time = time - self.start_time
     if local_time / 1000 > self.asteroid_spawn_counter:
         self.asteroid_spawn_counter += 1
         if self.count_living_objects() < 30:
             Asteroid.AsteroidObject(self)
def setup():
    global starAmount
    global starsVao
    global quadProg
    global StarProgram
    global ShipProg
    global beep
    global enemyProg
    global enemy1Prog
    global backgroundProg
    global main_program
    global monster_program
    global ship
    global fire
    global enemy
    global enemy1
    global nebula
    global powerup
    global powerup1
    global cam
    global monster
    global starList
    global bullet1
    global myShip
    global skyboxProg
    global skybox
    global skyboxTexture

    beep = Mix_LoadWAV(os.path.join("assets", "Beep-09.ogg").encode())

    glEnable(GL_MULTISAMPLE)
    glClearColor(0.0, 0.0, 0.0, 1.0)

    starAmount = 50
    starList = []
    star_points = []
    for i in range(starAmount):
        starList.append(Star())

    for i in range(len(starList)):
        star_points.append(starList[i].x)
        star_points.append(starList[i].y)

    A = array.array("f", star_points)
    b = Buffer(A)
    tmp = array.array("I", [0])
    glGenVertexArrays(1, tmp)
    starsVao = tmp[0]
    glBindVertexArray(starsVao)
    b.bind(GL_ARRAY_BUFFER)
    glEnableVertexAttribArray(0)
    glVertexAttribPointer(0, 2, GL_FLOAT, False, 2 * 4, 0)
    glBindVertexArray(0)

    myShip = Ship()

    cam = Camera(myShip.pos, myShip.up, myShip.facing)

    for i in range(3):
        asteroid_list.append(Asteroid(vec4(0, 0, 0, 0)))

    skyboxTexture = ImageTextureCube("nebula-%04d.jpg")
    skybox = Mesh("cube.obj.mesh")
    skybox.materials[0].tex = skyboxTexture

    skyboxProg = Program("skyboxVertexShader.txt", "skyboxFragmentShader.txt")
    StarProgram = Program("StarsVertexShader.txt", "StarsFragmentShader.txt")
    main_program = Program("MainVS.txt", "MainFS.txt")

    glEnable(GL_BLEND)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
    glEnable(GL_DEPTH_TEST)
    glDepthFunc(GL_LEQUAL)

    Program.setUniform("lightPos",
                       vec3(0, 1, -1) + myShip.pos.xyz)  #vec3(0,1,-1)
    Program.updateUniforms()

    print("Setup Done")
Ejemplo n.º 22
0
# Defineerime asteroidid spraitide grupina.
asteroidid = pg.sprite.Group()

# Defineerime kuulid spraitide grupina.
kuulid = pg.sprite.Group()

# Ütleme, et laev on klass "Laev".
laev = Laev()
# Lisame spraitide gruppi koik_sparidi muutuja "laev".
koik_spraidid.add(laev)

# Tekitame asteroidi Asteroid klassi järgi ja paneme selle
# spraidi gruppidesse koik_sparidid ja asteroid. Kordame 8 korda.
for i in range(8):
    a = Asteroid()
    koik_spraidid.add(a)
    asteroidid.add(a)

# Mängime alguse heli.
algus_SND.play()
# Ootme alguse heli pikkuse.
time.sleep(2)
# Paneme mängima laulu lõpmatult.
pg.mixer.music.play(loops=-1)

## Põhi tsükkel
# Ütleme, et mäng jookseb.
jookseb = True
# Tsükel kestab, kuni mäng jookseb
while jookseb:
Ejemplo n.º 23
0
 def MainLoop(self):  
     # converted our images and set them to mouse and background
    
     character = Goku()
     
     sprites = [character]
     
     ki = []
     
     asteroids = []
     
     # Screen is the display we built
     screen = pygame.display.set_mode((1000, 400), 0, 32)
     space = "space3.jpg"
      
     background = pygame.image.load(space).convert()
     
     # this will be the real score later
     timer = 0 
    
     while True:  
         # the timer is incremented by 1       
         timer += 1  
         # draw background
         screen.blit(background, (0, 0))
         
         # drawing sprites  
         for sprite in sprites:
            
             screen.blit(sprite.image, (sprite.x, sprite.y))
             
         
         # handle character input 
         for event in pygame.event.get():
             if event.type == QUIT: 
                 pygame.quit()
                 sys.exit()
             if event.type == KEYDOWN or event.type == KEYUP:
                 character.fly(event.key, event.type)    
         character.move()    
         
         # Handling the shooting of the ki blast
         #Use of datastructures here, appending the kiblasts
         if character.shoot == True:
            pygame.mixer.Sound('kisound.wav').play()
            kiShot = Kiblast()
            # adds kiShot to ki array using append
            ki.append(kiShot)  
            # adds kiShot(kiblast) to sprites array using append
            sprites.append(kiShot)  
            kiShot.x, kiShot.y = character.x, character.y
            character.shoot = False
         
         for kiShot in ki:
             kiShot.move()
         
         # Handling the asteroids
         #Use of datastructures here, appending the asteroids
         if timer > 1000:
             asteroid = Asteroid()
             asteroids.append(asteroid)
         # appending the asteroid VARIABLE
             sprites.append(asteroid)  
             asteroid.x = 1000
             asteroid.y = random.randint(0, 400)
             timer = 0
         
         
         for asteroid in asteroids:
             asteroid.move()
    
         #Collision check 
         for kishot in ki:
             for asteroid in asteroids:
                 if kishot.collides(asteroid):
                     asteroids.remove(asteroid)
                     sprites.remove(asteroid)
                     ki.remove(kishot)
                     sprites.remove(kishot)
                     
                     
                     
             
    
         # update screen
         pygame.display.update()
Ejemplo n.º 24
0
class GameScene(QGraphicsScene):
    def __init__(self, parent, width, height, num_of_players):
        super().__init__(parent)
        global activeBigAsteroids
        global activeMediumAsteroids
        global activeSmallAsteroids
        self.width = width
        self.height = height
        self.setSceneRect(0, 0, self.width - 2, self.height - 2)
        self.sceneParent = parent  #
        self.players_number = num_of_players
        self.queue = mp.Queue()
        self.firstrelease = False
        self.keyList = []
        self.timer = QBasicTimer()
        self.timer.start(2000, self)

        self.key_notifier = KeyNotifier()
        self.key_notifier.key_signal.connect(self.__update_position__)
        self.key_notifier.start()

        self.label = QLabel()
        self.pixmap = QPixmap('Images/img2.png')
        self.label.setPixmap(self.pixmap)
        self.label.resize(600, 500)
        self.addWidget(self.label)

        # self.bonus = None

        self.rocketnumber1 = SpaceShuttle(self.width, self.height, self, 1)
        self.rocketnumber1.resize(
            60, 50
        )  #slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
        self.rocketnumber1.setStyleSheet("background:transparent")
        self.addWidget(self.rocketnumber1)

        if self.players_number == 2:
            self.rocketnumber2 = SpaceShuttle(self.width, self.height, self, 2)
            self.rocketnumber2.resize(
                60, 50
            )  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
            self.rocketnumber2.setStyleSheet("background:transparent")
            self.addWidget(self.rocketnumber2)

        self.queue.put('go')
        self.createAsteroids()

        print("DONE")

        self.label2 = QLabel("Player1 lives--->[" +
                             Server.player1Lives.__str__() + "] score--->[" +
                             Server.player1Score.__str__() + "]")
        self.label2.resize(400, 30)
        self.label2.move(5, 440)
        self.label2.setStyleSheet(
            "font: 9pt; color: #f03a54; font:bold; background-color: transparent; "
        )
        self.addWidget(self.label2)

        self.label3 = QLabel("Player2 lives--->[" +
                             Server.player2Lives.__str__() + "] score--->[" +
                             Server.player2Score.__str__() + "]")
        self.label3.resize(400, 30)
        self.label3.move(5, 470)
        self.label3.setStyleSheet(
            "font: 9pt; color: yellow; font:bold; background-color: transparent; "
        )

        if self.players_number == 1:
            self.label3.hide()
        elif self.players_number == 2:
            self.addWidget(self.label3)

        self.label4 = QLabel("Level : " + Server.level.__str__())
        self.label4.resize(400, 30)
        self.label4.move(500, 10)
        self.label4.setStyleSheet(
            "font: 12pt; color: white; font: bold; background-color: transparent;"
        )
        self.addWidget(self.label4)

    def createAsteroids(self):
        o = 0
        for o in range(Server.level):
            self.asteroid_0 = Asteroid(self.width, self.height, self,
                                       Server.asteroid_id.__str__(), False, 3)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def createMediumAsteroids(self):
        o = 0
        for o in range(2):
            self.asteroid_0 = Asteroid(self.width, self.height, self,
                                       Server.asteroid_id.__str__(), False, 2)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def createSmallAsteroids(self):
        o = 0
        for o in range(2):
            self.asteroid_0 = Asteroid(self.width, self.height, self,
                                       Server.asteroid_id.__str__(), False, 1)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def game_is_over(
        self, playerId
    ):  #ako je game over proveri za kog igraca je game over ako je multiplayer, onog drugog pusti da jos igra
        if self.players_number == 1:  #ako je singleplyaer cim ima 0 lives znaci mrtav je znaci game_over je
            self.gameOverScene = GameOver(self, self.width, self.height)
            self.gameOverScene.returnBtn.clicked.connect(self.menus)
            self.gameOverScene.label4.hide()  #hide that player2 is winner
            self.gameOverScene.label6.hide()  #hide that player2 is winner
            self.gameOverScene.label3.hide(
            )  #hide player2 score bcs this is singleplayer
            self.sceneParent.setScene(self.gameOverScene)

        elif self.players_number == 2:
            if playerId == 1:
                Server.coordinatesOfRocket1X.clear()
                Server.coordinatesOfRocket1Y.clear()
                self.rocketnumber1.hide()
                self.rocketnumber1.move(1000, 1000)
            elif playerId == 2:
                Server.coordinatesOfRocket2X.clear()
                Server.coordinatesOfRocket2Y.clear()
                self.rocketnumber2.hide()
                self.rocketnumber2.move(1000, 1000)

            if Server.player1Lives == 0 and Server.player2Lives == 0:  #ako su dva playera, tek kada su oba mrtva prebaci na game_over_scene
                self.gameOverScene = GameOver(self, self.width, self.height)
                self.gameOverScene.returnBtn.clicked.connect(self.menus)
                self.gameOverScene.label6.hide()
                if Server.player1Score > Server.player2Score:
                    self.gameOverScene.label4.hide()
                elif Server.player2Score > Server.player1Score:
                    self.gameOverScene.label5.hide()
                elif Server.player1Score == Server.player2Score:
                    self.gameOverScene.label4.hide()
                    self.gameOverScene.label5.hide()
                self.sceneParent.setScene(self.gameOverScene)

    def menus(self):
        self.sceneParent.ExitGame()

    def keyPressEvent(self, event):
        self.key_notifier.add_key(event.key())

    def keyReleaseEvent(self, event):
        self.key_notifier.rem_key(event.key())

    def __update_position__(self, key):
        # time.sleep(1)
        if key == Qt.Key_W and self.players_number == 2 and Server.player2Lives > 0:  #dodata logika da moze da se pomera samo ako je idalje ziva ta raketa
            self.rocketnumber2.upRocket2.emit()
        elif key == Qt.Key_A and self.players_number == 2 and Server.player2Lives > 0:
            self.rocketnumber2.leftRocket2.emit()
        elif key == Qt.Key_D and self.players_number == 2 and Server.player2Lives > 0:
            self.rocketnumber2.rightRocket2.emit()
        elif key == Qt.Key_S and self.players_number == 2 and Server.player2Lives > 0:
            self.rocketnumber2.fireRocket2.emit()
        elif key == Qt.Key_Up and Server.player1Lives > 0:
            self.rocketnumber1.upRocket1.emit()
        elif key == Qt.Key_Right and Server.player1Lives > 0:
            self.rocketnumber1.rightRocket1.emit()
        elif key == Qt.Key_Left and Server.player1Lives > 0:
            self.rocketnumber1.leftRocket1.emit()
        elif key == Qt.Key_Space and Server.player1Lives > 0:
            self.rocketnumber1.fireRocket1.emit()

    def timerEvent(
        self, a0: 'QTimerEvent'
    ):  #timer je na 2 sekunde gore, zato su ove provere, tako da se na svakih 30 sekundi stvori bonus i da igrac ima 2 sekunde da stane na njega pa se vrsi provera i resetuje se
        if Server.bonus_time < 15:
            Server.bonus_time = Server.bonus_time + 1
        elif Server.bonus_time == 15:
            Server.bonus_x_coordinate = random.randrange(0, 500)
            Server.bonus_y_coordinate = random.randrange(0, 450)
            Server.bonus_x_expanded.clear()
            Server.bonus_y_expanded.clear()
            tmpXX = 0
            for tmpXX in range(50):
                Server.bonus_x_expanded.append(
                    tmpXX +
                    Server.bonus_x_coordinate)  #prosirivanje koordinata bonusa
            tmpYY = 0
            for tmpYY in range(50):
                Server.bonus_y_expanded.append(
                    tmpYY +
                    Server.bonus_y_coordinate)  #prosirivanje koordinata bonusa
            self.bonus = Bonus(self.width, self.height,
                               Server.bonus_x_coordinate,
                               Server.bonus_y_coordinate, self)
            self.bonus.setStyleSheet("background:transparent")
            self.addWidget(self.bonus)
            Server.bonus_time = Server.bonus_time + 1
        elif Server.bonus_time == 16:
            if (any(checkXCords in Server.bonus_x_expanded
                    for checkXCords in Server.coordinatesOfRocket1X)
                    and any(checkYCords in Server.bonus_y_expanded
                            for checkYCords in Server.coordinatesOfRocket1Y)):
                Server.player1Lives = Server.player1Lives + 1
                self.label2.setText("Player1 lives--->[" +
                                    Server.player1Lives.__str__() +
                                    "] score--->[" +
                                    Server.player1Score.__str__() + "]")
            if (any(checkXCords in Server.bonus_x_expanded
                    for checkXCords in Server.coordinatesOfRocket2X)
                    and any(checkYCords in Server.bonus_y_expanded
                            for checkYCords in Server.coordinatesOfRocket2Y)):
                Server.player2Lives = Server.player2Lives + 1
                self.label3.setText("Player2 lives--->[" +
                                    Server.player2Lives.__str__() +
                                    "] score--->[" +
                                    Server.player2Score.__str__() + "]")
            self.bonus.hide()
            self.bonus.move(1234, 1234)
            Server.bonus_time = 0
Ejemplo n.º 25
0
from Asteroid import *
pygame.init()

screen_info = pygame.display.Info()
print(screen_info)

w = pygame.display.set_mode((800, 600))
c = pygame.time.Clock()
color = (30, 0, 30)

NumLevels = 4
Level = 1
AsteroidCount = 3
Player = Ship((20, 200))
#Asteroids = pygame.sprite.Group()
Asteroids = Asteroid(400, 300)
  #random.randint(50, 500), random.randint(50, 700)), (random.randint(10, 100), random.randint(10, 100))

def main():
  while Level <= NumLevels:
    c.tick(60)
    for event in pygame.event.get():
      if event.type == pygame.KEYDOWN:
        if event.key== pygame.K_RIGHT:
          Player.speed[0] = 10
        if event.key== pygame.K_DOWN:
          Player.speed[1] = 10
        if event.key== pygame.K_UP:
          Player.speed[1] = -10
        if event.key== pygame.K_LEFT:
          Player.speed[0] = -10
Ejemplo n.º 26
0
def init():
    Player.reset((35, 300))
    for i in range(AsteroidCount):
        Asteroids.add(Asteroid())
Ejemplo n.º 27
0
def rungame():
    #initialize variables and display of the pygame
    screen = pygame.display.set_mode((800, 600))
    display.set_caption("Meteor Shooter")

    scores = 0
    gameClock = pygame.time.Clock()
    bg_Image = starBg("star.gif")

    #initialize the coordinate of the background
    x = 0
    y = 0
    x1 = bg_Image.width
    y1 = 0

    pygame.init()

    #create object jet, asteroid sprite group, and bullets sprite group
    jet = Jet(screen)
    jetSprites = sprite.Group(jet)
    asteroid_group = sprite.Group()
    bullets = sprite.Group()

    tickRate = 40
    asteroid_timer = pygame.time.get_ticks()
    while True:
        #game phase goes faster after every frame
        gameClock.tick(tickRate)
        tickRate += 0.01

        #change the coordinate of the bg_Image, and draws the background
        x -= 5
        x1 -= 5
        bg_Image.draw(screen, x, y)
        bg_Image.draw(screen, x1, y1)
        if x < -bg_Image.width:
            x = 0
        if x1 < 0:
            x1 = bg_Image.width

        #show score on the screen
        font = pygame.font.SysFont("Times New Roman", 36)
        score = font.render("score:" + str(scores), True, (255, 255, 255))
        screen.blit(score, (10, 550))

        #draw the sprites
        jetSprites.draw(screen)
        bullets.draw(screen)
        asteroid_group.draw(screen)
        display.update()  # update jet and screen view

        #gets user events, and do the movement depending on the event
        event.get()
        key = pygame.key.get_pressed()
        if key[K_LEFT] and jet.rect.x > 0:
            jet.moveLeft()

        if key[K_RIGHT] and jet.rect.x <= 700:
            jet.moveRight()

        if key[K_DOWN] and jet.rect.y <= 500:
            jet.moveDown()

        if key[K_UP] and jet.rect.y > 0:
            jet.moveUp()

        if key[K_SPACE] and len(bullets) <= jet.bulletRate + (scores / 4000):
            bullet = Bullet(screen, jet.rect.x + 50, jet.rect.y + 42)
            bullets.add(bullet)
            pygame.mixer.music.load("LaserBlast.wav")
            pygame.mixer.music.play()

        if key[K_ESCAPE]:
            menu.screenMenu(button, rungame)

        if key[K_p]:
            menu.pauseMenu(button, rungame)

        #release asteroids on the screen in random location speed and starting points
        if pygame.time.get_ticks() - asteroid_timer >= 200:
            asteroid = Asteroid(screen, 50, 50,
                                random.randint(1, 4) * 6, 800,
                                (random.randint(1, 28) * 20))
            asteroid_group.add(asteroid)
            asteroid_timer = pygame.time.get_ticks()

        #movement of the asteroid
        for asteroid in asteroid_group:
            asteroid.movement()
            #remove the asteroid if it has left the screen
            if asteroid.rect.right <= 0:
                asteroid_group.remove(asteroid)
            #check if the jet collides with the asteroid
            if sprite.groupcollide(jetSprites,
                                   asteroid_group,
                                   dokilla=True,
                                   dokillb=True):
                menu.gameOverScreen(button, rungame, scores)

        #movement of the bullets
        for bullet in bullets:
            bullet.movement()
            #remove the bullet if it has left the screen
            if bullet.rect.left > 800:
                bullets.remove(bullet)
            #check if the bullet collides with the asteroid
            if sprite.groupcollide(bullets,
                                   asteroid_group,
                                   dokilla=True,
                                   dokillb=True):
                scores += 100
Ejemplo n.º 28
0
class Tournament(QGraphicsScene):
    def __init__(self, parent, width, height):
        super().__init__(parent)
        Server.tournamentActivated = True
        global activeMediumAsteroids
        global activeSmallAsteroids
        self.width = width
        self.height = height
        self.setSceneRect(0, 0, self.width - 2, self.height - 2)
        self.sceneParent = parent
        self.queue = mp.Queue()
        self.firstrelease = False
        self.gameOverScene = None
        self.keyList = []
        self.timer = QBasicTimer()
        self.timer.start(2000, self)


        self.key_notifier = KeyNotifier()
        self.key_notifier.key_signal.connect(self.__update_position__)
        self.key_notifier.start()

        self.label = QLabel()
        self.pixmap = QPixmap('Images/img2.png')
        self.label.setPixmap(self.pixmap)
        self.label.resize(600, 500)
        self.addWidget(self.label)

        # self.bonus = None

        self.rocketnumber1 = SpaceShuttle(self.width, self.height, self, 1)
        self.rocketnumber1.resize(60,
                                  50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
        self.rocketnumber1.setStyleSheet("background:transparent")


        self.rocketnumber2 = SpaceShuttle(self.width, self.height, self, 2)
        self.rocketnumber2.resize(60,
                                  50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
        self.rocketnumber2.setStyleSheet("background:transparent")





        self.queue.put('go')
        self.createAsteroids()


        print("DONE")

        self.label2 = QLabel(
            "Player1 lives--->[" + Server.player1Lives.__str__() + "] score--->[" + Server.player1Score.__str__() + "]")
        self.label2.resize(400, 30)
        self.label2.move(5, 440)
        self.label2.setStyleSheet("font: 9pt; color: #f03a54; font:bold; background-color: transparent; ")
        self.addWidget(self.label2)

        self.label3 = QLabel(
            "Player2 lives--->[" + Server.player2Lives.__str__() + "] score--->[" + Server.player2Score.__str__() + "]")
        self.label3.resize(400, 30)
        self.label3.move(5, 470)
        self.label3.setStyleSheet("font: 9pt; color: yellow; font:bold; background-color: transparent; ")
        self.addWidget(self.label3)

        self.label6 = QLabel(
            "Player3 lives--->[" + Server.player3Lives.__str__() + "] score--->[" + Server.player3Score.__str__() + "]")
        self.label6.resize(400, 30)
        self.label6.move(320, 440)
        self.label6.setStyleSheet("font: 9pt; color: blue; font:bold; background-color: transparent; ")
        self.addWidget(self.label6)

        self.label7 = QLabel(
            "Player4 lives--->[" + Server.player4Lives.__str__() + "] score--->[" + Server.player4Score.__str__() + "]")
        self.label7.resize(400, 30)
        self.label7.move(320, 470)
        self.label7.setStyleSheet("font: 9pt; color: green; font:bold; background-color: transparent; ")
        self.addWidget(self.label7)

        self.setPlayers(self.label6, self.label7)

        self.label4 = QLabel("Level : " + Server.level.__str__())
        self.label4.resize(400, 30)
        self.label4.move(500, 10)
        self.label4.setStyleSheet("font: 9pt; color: white; font: bold; background-color: transparent;")
        self.addWidget(self.label4)

    def setPlayers(self, label1Hide, label2Hide):
        if Server.currentRound == 0:
            self.addWidget(self.rocketnumber1)
            self.addWidget(self.rocketnumber2)
            label1Hide.hide()
            label2Hide.hide()

        elif Server.currentRound == 1:
            self.rocketnumber1.hide()
            self.rocketnumber2.hide()
            Server.level = 0
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            Server.bulletsCollection1X.clear()
            Server.bulletsCollection1Y.clear()
            Server.bulletsCollection2X.clear()
            Server.bulletsCollection2Y.clear()
            Server.i = 1
            Server.i2 = 1
            Server.i3 = 1
            Server.i4 = 1
            self.rocketnumber3 = SpaceShuttle(self.width, self.height, self, 1)
            self.rocketnumber3.resize(60,
                                      50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
            self.rocketnumber3.setStyleSheet("background:transparent")

            self.rocketnumber4 = SpaceShuttle(self.width, self.height, self, 2)
            self.rocketnumber4.resize(60,
                                      50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
            self.rocketnumber4.setStyleSheet("background:transparent")

            self.addWidget(self.rocketnumber3)
            self.addWidget(self.rocketnumber4)
            label1Hide.hide()
            label2Hide.hide()

        elif Server.currentRound == 2:#napraviti nove rakete samo im zapamtiti id zbog player naziva
            self.rocketnumber3.hide()
            self.rocketnumber4.hide()
            Server.level = 0
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            Server.bulletsCollection1X.clear()
            Server.bulletsCollection1Y.clear()
            Server.bulletsCollection2X.clear()
            Server.bulletsCollection2Y.clear()
            Server.i = 1
            Server.i2 = 1
            Server.i3 = 1
            Server.i4 = 1
            if Server.player1Score > Server.player2Score:
                Server.Win0 = 1
            elif Server.player1Score < Server.player2Score:
                Server.Win0 = 2
            elif Server.player1Score == Server.player2Score:
                if Server.Died == 1: # ako je p1 prvi poginuo
                    Server.Win0 = 1
                else:
                    Server.Win0 = 2

            if Server.player3Score > Server.player4Score:
                Server.Win1 = 3
            elif Server.player3Score < Server.player4Score:
                Server.Win1 = 4
            elif Server.player3Score == Server.player4Score:
                if Server.Died2 == 3:
                    Server.Win1 = 3
                else:
                    Server.Win1 = 4
            print("Server.Died -> " + Server.Died.__str__())
            print("Win0 -> " + Server.Win0.__str__())
            print("Win1 -> " + Server.Win1.__str__())
            Server.player1Lives = 3
            Server.player2Lives = 3
            Server.player3Lives = 3
            Server.player4Lives = 3
            Server.player1Score = 0
            Server.player2Score = 0
            Server.player3Score = 0
            Server.player4Score = 0
            self.rocketnumber5 = SpaceShuttle(self.width, self.height, self, 1)
            self.rocketnumber5.resize(60,
                                      50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
            self.rocketnumber5.setStyleSheet("background:transparent")

            self.rocketnumber6 = SpaceShuttle(self.width, self.height, self, 2)
            self.rocketnumber6.resize(60,
                                      50)  # slika je 50x50 ali se glupo okrece tako da je bolje ovako da bi se uvek videla cela
            self.rocketnumber6.setStyleSheet("background:transparent")

            self.addWidget(self.rocketnumber5)
            self.addWidget(self.rocketnumber6)
            label1Hide.hide()
            label2Hide.hide()

            # postavlja pobednika iz prvog meca
            if Server.Win0 == 1:
                #self.addWidget(self.rocketnumber1)
                self.label2.setText("Player1 lives--->[" + Server.player5Lives.__str__() + "] score--->[" + Server.player5Score.__str__() + "]")
                self.label2.setStyleSheet("font: 9pt; color: #f03a54; font:bold; background-color: transparent; ")
                self.label2.show()
            elif Server.Win0 == 2:
                #self.addWidget(self.rocketnumber2)
                self.label2.setText("Player2 lives--->[" + Server.player5Lives.__str__() + "] score--->[" + Server.player5Score.__str__() + "]")
                self.label2.setStyleSheet("font: 9pt; color: yellow; font:bold; background-color: transparent; ")
                self.label2.show()
            # postavlja pobednika iz drugog meca
            if Server.Win1 == 3:
                #self.addWidget(self.rocketnumber3)
                self.label6.setText(
                    "Player3 lives--->[" + Server.player6Lives.__str__() + "] score--->[" + Server.player6Score.__str__() + "]")
                self.label6.setStyleSheet("font: 9pt; color: blue; font:bold; background-color: transparent; ")
                self.label6.show()
            elif Server.Win1 == 4:
                #self.addWidget(self.rocketnumber4)
                self.label6.setText(
                    "Player4 lives--->[" + Server.player6Lives.__str__() + "] score--->[" + Server.player6Score.__str__() + "]")
                self.label6.setStyleSheet("font: 9pt; color: green; font:bold; background-color: transparent; ")
                self.label6.show()

    def createAsteroids(self):
        o = 0
        print("Create big for second rounds")
        print(Server.level)
        for o in range(Server.level):
            self.asteroid_0 = Asteroid(self.width, self.height, self, Server.asteroid_id.__str__(), True, 3)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            Server.activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def createMediumAsteroids(self):
        o = 0
        for o in range(2):
            self.asteroid_0 = Asteroid(self.width, self.height, self, Server.asteroid_id.__str__(), True, 2)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            Server.activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def createSmallAsteroids(self):
        o = 0
        for o in range(2):
            self.asteroid_0 = Asteroid(self.width, self.height, self, Server.asteroid_id.__str__(), True, 1)
            self.asteroid_0.setFocus()  # mozda i ne mora posto je timer tamo
            self.asteroid_0.setStyleSheet("background:transparent")
            self.asteroid_0.resize(60, 50)
            self.addWidget(self.asteroid_0)
            Server.activeBigAsteroids.append(self.asteroid_0)
            Server.activeAsteroids[Server.asteroid_id.__str__()] = 0
            Server.asteroid_id = Server.asteroid_id.__int__() + 1

    def game_is_over(self,
                     playerId):  # ako je game over proveri za kog igraca je game over ako je multiplayer, onog drugog pusti da jos igra
        """if self.players_number == 1:  # ako je singleplyaer cim ima 0 lives znaci mrtav je znaci game_over je
            self.gameOverScene = GameOver(self, self.width, self.height)
            self.gameOverScene.returnBtn.clicked.connect(self.menus)
            self.gameOverScene.label4.hide()  # hide that player2 is winner
            self.gameOverScene.label3.hide()  # hide player2 score bcs this is singleplayer
            self.sceneParent.setScene(self.gameOverScene)"""

        if playerId == 10:
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            #if Server.currentRound == 0:
            self.rocketnumber1.hide()
            self.rocketnumber1.move(1000, 1000)
        elif playerId == 20:
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            self.rocketnumber2.hide()
            self.rocketnumber2.move(1000, 1000)
        elif playerId == 12:
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            self.rocketnumber5.hide()
            self.rocketnumber5.move(1000, 1000)
        elif playerId == 31:
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            self.rocketnumber3.hide()
            self.rocketnumber3.move(1000, 1000)
        elif playerId == 32:
            Server.coordinatesOfRocket1X.clear()
            Server.coordinatesOfRocket1Y.clear()
            self.rocketnumber5.hide()
            self.rocketnumber5.move(1000, 1000)
        elif playerId == 41:
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            self.rocketnumber4.hide()
            self.rocketnumber4.move(1000, 1000)
        elif playerId == 22:
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            self.rocketnumber6.hide()
            self.rocketnumber6.move(1000, 1000)
        elif playerId == 42:
            Server.coordinatesOfRocket2X.clear()
            Server.coordinatesOfRocket2Y.clear()
            self.rocketnumber6.hide()
            self.rocketnumber6.move(1000, 1000)

        if Server.currentRound == 2 and Server.player5Lives == 0 and Server.player6Lives == 0:
            self.gameOverScene = GameOver(self, self.width, self.height)
            self.gameOverScene.returnBtn.clicked.connect(self.menus)
            if Server.player5Score > Server.player6Score:
                self.gameOverScene.label4.hide()
                self.gameOverScene.label3.hide()
                self.gameOverScene.label2.hide()
                self.gameOverScene.label5.hide()
                if Server.Win0 == 1:
                    self.gameOverScene.label6.setText("Player1 Win")
                    self.gameOverScene.label6.setStyleSheet("font: 9pt; color: #f03a54; font:bold; background-color: transparent; ")
                else:
                    self.gameOverScene.label6.setText("Player2 Win")
                    self.gameOverScene.label6.setStyleSheet("font: 9pt; color: yellow; font:bold; background-color: transparent; ")
            elif Server.player5Score < Server.player6Score:
                self.gameOverScene.label4.hide()
                self.gameOverScene.label3.hide()
                self.gameOverScene.label2.hide()
                self.gameOverScene.label5.hide()
                if Server.Win1 == 3:
                    self.gameOverScene.label6.setText("Player3 Win")
                    self.gameOverScene.label6.setStyleSheet("font: 9pt; color: blue; font:bold; background-color: transparent; ")
                else:
                    self.gameOverScene.label6.setText("Player4 Win")
                    self.gameOverScene.label6.setStyleSheet("font: 9pt; color: green; font:bold; background-color: transparent; ")
            else:
                self.gameOverScene.label4.hide()
                self.gameOverScene.label3.hide()
                self.gameOverScene.label2.hide()
                self.gameOverScene.label5.hide()
                self.gameOverScene.label6.setText("Tied")
            self.sceneParent.setScene(self.gameOverScene)

    def menus(self):
        self.sceneParent.ExitGame()

    def keyPressEvent(self, event):
        self.key_notifier.add_key(event.key())

    def keyReleaseEvent(self, event):
        self.key_notifier.rem_key(event.key())

    def __update_position__(self, key):
        # time.sleep(1)
        if key == Qt.Key_W:  # dodata logika da moze da se pomera samo ako je idalje ziva ta raketa
            if Server.currentRound == 0 and Server.player2Lives > 0:
                self.rocketnumber2.upRocket2.emit()
            elif Server.currentRound == 1 and Server.player4Lives > 0:
                self.rocketnumber4.upRocket2.emit()
            elif Server.currentRound == 2 and Server.player6Lives > 0:
                self.rocketnumber6.upRocket2.emit()
        elif key == Qt.Key_A:
            if Server.currentRound == 0 and Server.player2Lives > 0:
                self.rocketnumber2.leftRocket2.emit()
            elif Server.currentRound == 1 and Server.player4Lives > 0:
                self.rocketnumber4.leftRocket2.emit()
            elif Server.currentRound == 2 and Server.player6Lives > 0:
                self.rocketnumber6.leftRocket2.emit()
        elif key == Qt.Key_D:
            if Server.currentRound == 0 and Server.player2Lives > 0:
                self.rocketnumber2.rightRocket2.emit()
            elif Server.currentRound == 1 and Server.player4Lives > 0:
                self.rocketnumber4.rightRocket2.emit()
            elif Server.currentRound == 2 and Server.player6Lives > 0:
                self.rocketnumber6.rightRocket2.emit()
        elif key == Qt.Key_S:
            if Server.currentRound == 0 and Server.player2Lives > 0:
                self.rocketnumber2.fireRocket2.emit()
            elif Server.currentRound == 1 and Server.player4Lives > 0:
                self.rocketnumber4.fireRocket2.emit()
            elif Server.currentRound == 2 and Server.player6Lives > 0:
                self.rocketnumber6.fireRocket2.emit()
        elif key == Qt.Key_Up:
            if Server.currentRound == 0 and Server.player1Lives > 0:
                self.rocketnumber1.upRocket1.emit()
            elif Server.currentRound == 1  and Server.player3Lives > 0:
                self.rocketnumber3.upRocket1.emit()
            elif Server.currentRound == 2  and Server.player5Lives > 0:
                self.rocketnumber5.upRocket1.emit()
        elif key == Qt.Key_Right:
            if Server.currentRound == 0 and Server.player1Lives > 0:
                self.rocketnumber1.rightRocket1.emit()
            elif Server.currentRound == 1 and Server.player3Lives > 0:
                self.rocketnumber3.rightRocket1.emit()
            elif Server.currentRound == 2 and Server.player5Lives > 0:
                self.rocketnumber5.rightRocket1.emit()
        elif key == Qt.Key_Left:
            if Server.currentRound == 0 and Server.player1Lives > 0:
                self.rocketnumber1.leftRocket1.emit()
            elif Server.currentRound == 1 and Server.player3Lives > 0:
                self.rocketnumber3.leftRocket1.emit()
            elif Server.currentRound == 2 and Server.player5Lives > 0:
                self.rocketnumber5.leftRocket1.emit()
        elif key == Qt.Key_Space:
            if Server.currentRound == 0 and Server.player1Lives > 0:
                self.rocketnumber1.fireRocket1.emit()
            elif Server.currentRound == 1 and Server.player3Lives > 0:
                self.rocketnumber3.fireRocket1.emit()
            elif Server.currentRound == 2 and Server.player5Lives > 0:
                self.rocketnumber5.fireRocket1.emit()

    def timerEvent(self, a0: 'QTimerEvent'):
        if Server.bonus_time < 15:
            Server.bonus_time = Server.bonus_time + 1
        elif Server.bonus_time == 15:
            Server.bonus_x_coordinate = random.randrange(0, 500)
            Server.bonus_y_coordinate = random.randrange(0, 450)
            Server.bonus_x_expanded.clear()
            Server.bonus_y_expanded.clear()
            tmpXX = 0
            for tmpXX in range(50):
                Server.bonus_x_expanded.append(tmpXX + Server.bonus_x_coordinate)  # prosirivanje koordinata bonusa
            tmpYY = 0
            for tmpYY in range(50):
                Server.bonus_y_expanded.append(tmpYY + Server.bonus_y_coordinate)  # prosirivanje koordinata bonusa
            self.bonus = Bonus(self.width, self.height, Server.bonus_x_coordinate, Server.bonus_y_coordinate, self)
            self.bonus.setStyleSheet("background:transparent")
            self.addWidget(self.bonus)
            Server.bonus_time = Server.bonus_time + 1
        elif Server.bonus_time == 16 and Server.currentRound == 0: # ako igraju P1 i P2
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket1X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket1Y)):
                Server.player1Lives = Server.player1Lives + 1
                self.label2.setText(
                    "Player1 lives--->[" + Server.player1Lives.__str__() + "] score--->[" + Server.player1Score.__str__() + "]")
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket2X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket2Y)):
                Server.player2Lives = Server.player2Lives + 1
                self.label3.setText(
                    "Player2 lives--->[" + Server.player2Lives.__str__() + "] score--->[" + Server.player2Score.__str__() + "]")
            self.bonus.hide()
            self.bonus.move(1234, 1234)
            Server.bonus_time = 0
        elif Server.bonus_time == 16 and Server.currentRound == 1: # ako igraju P3 i P4
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket1X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket1Y)):
                Server.player3Lives = Server.player3Lives + 1
                self.label6.setText(
                    "Player3 lives--->[" + Server.player3Lives.__str__() + "] score--->[" + Server.player3Score.__str__() + "]")
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket2X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket2Y)):
                Server.player4Lives = Server.player4Lives + 1
                self.label7.setText(
                    "Player4 lives--->[" + Server.player4Lives.__str__() + "] score--->[" + Server.player4Score.__str__() + "]")
            self.bonus.hide()
            self.bonus.move(1234, 1234)
            Server.bonus_time = 0
        elif Server.bonus_time == 16 and Server.currentRound == 2: # pobednici
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket1X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket1Y)):
                if Server.Win0 == 1: # ako je bio pobedio P1
                    Server.player5Lives = Server.player5Lives + 1
                    self.label2.setText(
                        "Player1 lives--->[" + Server.player5Lives.__str__() + "] score--->[" + Server.player5Score.__str__() + "]")
                elif Server.Win0 == 2: # ako je bio pobedio P2
                    Server.player5Lives = Server.player5Lives + 1
                    self.label2.setText(
                        "Player2 lives--->[" + Server.player5Lives.__str__() + "] score--->[" + Server.player5Score.__str__() + "]")
            if (any(checkXCords in Server.bonus_x_expanded for checkXCords in Server.coordinatesOfRocket2X) and any(
                    checkYCords in Server.bonus_y_expanded for checkYCords in Server.coordinatesOfRocket2Y)):
                if Server.Win1 == 3:  # ako je bio pobedio P3
                    Server.player6Lives = Server.player6Lives + 1
                    self.label6.setText(
                        "Player3 lives--->[" + Server.player6Lives.__str__() + "] score--->[" + Server.player6Score.__str__() + "]")
                elif Server.Win1 == 4:  # ako je bio pobedio P4
                    Server.player6Lives = Server.player6Lives + 1
                    self.label6.setText(
                        "Player4 lives--->[" + Server.player6Lives.__str__() + "] score--->[" + Server.player6Score.__str__() + "]")
            self.bonus.hide()
            self.bonus.move(1234, 1234)
            Server.bonus_time = 0
Ejemplo n.º 29
0
def drawAsteroid(planets):
    position = rotate2(vec2(ASTEROID_RADIUS, 0), random() * 2 * pi)
    velocity = rotate2(
        (-position).normal(),
        random() * 2.0 - 1.0) * ASTEROID_VELOCITY * (random() + 1)
    return Asteroid(position, velocity)
Ejemplo n.º 30
0
    def update(self, delta_time):
        """ All the logic to move, and the game logic goes here. 
        TODO: have ship explode each life, balance level design 
        player invulnerability on respawn"""

        if self.current_state == GAME_RUNNING:
            # Collision Checking for Asteroid and Player, and bolt and player, and alien and player
            hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.asteroid_list)
            bolt_hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.bolt_list)
            alien_hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.alien_list)
            boss_hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.boss_list)
            beam_hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.beam_list)

            # Player timers
            self.player_sprite.timer = self.player_sprite.timer - 1
            self.player_sprite.invul = self.player_sprite.invul - 1

            # Player invulnerability coating
            if self.player_sprite.invul == 0:
                self.player_sprite.set_texture(0)
            elif self.player_sprite.invul == PLAYER_INVULNERABILITY - 1:
                self.player_sprite.set_texture(4)

            # Player Bounds Checking
            if self.player_sprite.center_x > SCREEN_WIDTH:
                self.player_sprite.center_x = 0
            elif self.player_sprite.center_x < 0:
                self.player_sprite.center_x = SCREEN_WIDTH
            elif self.player_sprite.center_y > SCREEN_HEIGHT:
                self.player_sprite.center_y = 0
            elif self.player_sprite.center_y < 0:
                self.player_sprite.center_y = SCREEN_HEIGHT

            # Checking player collisions
            if (hit_list or bolt_hit_list or alien_hit_list or boss_hit_list or beam_hit_list) \
                and self.player_sprite.invul < 0:
                if self.lives > 1:
                    self.player_sprite.center_x = SCREEN_WIDTH / 2
                    self.player_sprite.center_y = SCREEN_HEIGHT / 2
                    self.player_sprite.invul = PLAYER_INVULNERABILITY
                    self.lives = self.lives - 1
                    self.score = self.score - 10
                else:
                    self.lives = 0
                    self.player_sprite.set_texture(1)
                    self.player_sprite.movable = False
                    self.player_sprite.stop()
                    self.current_state = GAME_OVER

            # Creation of Powerups
            if self.numOfPow < 1 and random.randint(1, 10000) < 50:
                powType = 1
                self.numOfPow = self.numOfPow + 1
                self.powerup_list = Powerup.createPowerUp\
                                    (self,self.powerup_list, powType, SCREEN_HEIGHT, SCREEN_WIDTH)

            pow_hit_list = arcade.check_for_collision_with_list(
                self.player_sprite, self.powerup_list)

            for pow in pow_hit_list:
                # Dealing with collision with player
                if self.pow == False:
                    pow.kill()
                    self.numOfPow = 0
                    if pow.type == 1:
                        self.player_sprite.set_texture(2)
                        self.laser = True
                        self.pow = True
                    elif pow.type == 2:
                        self.player_sprite.set_texture(3)
                        self.bb = 4
                        self.pow = True

            # Boss summoning
            if self.score > 1000 and self.numOfBoss < 1:
                self.boss_list = Alien.createBoss(MyGame, self.boss_list,
                                                  SCREEN_HEIGHT, SCREEN_WIDTH)
                self.numOfBoss = 1
                if self.numOfAliens > 0:
                    for alien_left in self.alien_list:
                        alien_left.kill()
                        self.numOfAliens = 0

            for boss in self.boss_list:
                boss.center_x = boss.center_x + boss.change_x
                boss.center_y = boss.center_y + boss.change_y
                boss.beamTimer = boss.beamTimer - 1

                if self.player_sprite.center_x > boss.center_x:
                    boss.change_x = 0.2
                elif self.player_sprite.center_x < boss.center_x:
                    boss.change_x = -0.2

                # Boss Beaming
                if boss.beamTimer < 500 and not boss.beamActive:
                    beam = arcade.Sprite("Resources/alienlaser.png",
                                         SPRITE_SCALING_BEAM)  # Change to beam
                    beam.height = SCREEN_HEIGHT / 1.2
                    beam.center_x = boss.center_x
                    beam.center_y = boss.center_y - 350
                    boss.beamActive = True
                    self.beam_list.append(beam)
                elif boss.beamTimer < 500 and boss.beamTimer > 0:
                    for beam in self.beam_list:
                        beam.center_x = boss.center_x
                        beam.center_y = boss.center_y - 350
                        boss.beamTimer = boss.beamTimer - 1
                elif boss.beamTimer <= 0:
                    for beam in self.beam_list:
                        beam.kill()
                    boss.beamActive = False
                    boss.beamTimer = 1000

                # Boss Shooting
                if boss.shootTimer <= 0:
                    for i in range(1, 6):
                        bolt = arcade.Sprite("Resources/alienbolt.png",
                                             SPRITE_SCALING_BOLT)
                        bolt.type = 0
                        bolt.center_x = boss.center_x - 100 + (30 * i)
                        bolt.center_y = boss.center_y - 60
                        if i == 1:
                            bolt.change_x = -2
                        elif i == 2:
                            bolt.change_x = -1
                        elif i == 3:
                            bolt.change_x = 0
                        elif i == 4:
                            bolt.change_x = 1
                        elif i == 5:
                            bolt.change_x = 2

                        bolt.change_y = -BOLT_SPEED * .35
                        self.bolt_list.append(bolt)
                        boss.shootTimer = 50
                else:
                    boss.shootTimer = boss.shootTimer - 1

            if self.numOfBoss < 1 or self.score > 5000:
                # Creation of Aliens (ultimately want to put on a timer)
                if self.score < 250:
                    spawn = random.randint(1, 200)
                elif self.score < 500:
                    spawn = random.randint(1, 100)
                else:
                    spawn = random.randint(1, 50)

                if spawn == 1:
                    alienType = random.randint(1, 4)
                    self.alien_list, self.numOfAliens = Alien.createAlien\
                                        (MyGame, self.alien_list, self.numOfAliens, alienType, SCREEN_HEIGHT, SCREEN_WIDTH)

                # Alien Movement
                for alien in self.alien_list:
                    alien.center_x = alien.center_x + alien.change_x
                    alien.center_y = alien.center_y + alien.change_y

                    #Alien 3 follow pattern
                    if alien.type == 3:
                        if self.player_sprite.center_x > alien.center_x:
                            alien.change_x = 2
                        elif self.player_sprite.center_x < alien.center_x:
                            alien.change_x = -2

    #                 # Aliens collide with asteroid
    #                 alien_hit_list = arcade.check_for_collision_with_list(alien, self.asteroid_list)
    #                 if alien_hit_list:
    #                     #TODO: Add result of alien death
    #                     alien.kill()

    # Alien shooting
                    degreeOfSpace = 3
                    alien.timer = alien.timer - 1
                    if alien.center_x < self.player_sprite.center_x + degreeOfSpace \
                    and alien.center_x > self.player_sprite.center_x - degreeOfSpace \
                    and alien.center_y > self.player_sprite.center_y:
                        if alien.type <= 3 and alien.timer < 0:
                            alien.timer = 10
                            bolt = arcade.Sprite("Resources/alienbolt.png",
                                                 SPRITE_SCALING_BOLT)
                            bolt.type = 0
                            bolt.center_x = alien.center_x
                            bolt.center_y = alien.center_y - 20
                            bolt.change_x = 0
                            bolt.change_y = -BOLT_SPEED * .65
                            self.bolt_list.append(bolt)
                        if alien.type == 4 and alien.timer < 0:
                            alien.timer = 10
                            bolt = arcade.Sprite("Resources/alienbolt.png",
                                                 5 * SPRITE_SCALING_BOLT)
                            bolt.type = 1
                            bolt.center_x = alien.center_x
                            bolt.center_y = alien.center_y - 60
                            bolt.change_x = 0
                            bolt.change_y = -BOLT_SPEED * .35
                            self.bolt_list.append(bolt)

                    # Off Screen
                    if alien.center_x > SCREEN_WIDTH:
                        alien.center_x = 1

                    if alien.center_x < 0:
                        alien.center_x = SCREEN_WIDTH - 1

                    if alien.center_y > SCREEN_HEIGHT:
                        alien.kill()

                    if alien.center_y < 0:
                        alien.kill()

            # Asteroid Movement
            for asteroid in self.asteroid_list:
                asteroid.center_x = asteroid.center_x + asteroid.change_x
                asteroid.center_y = asteroid.center_y + asteroid.change_y
                asteroid_hit_list = arcade.check_for_collision_with_list(
                    asteroid, self.asteroid_list)

                # Collision between asteroid physics
                for asteroid2 in asteroid_hit_list:
                    if asteroid2 != asteroid:
                        Asteroid.physics(asteroid, asteroid2)

                # Off Screen
                if asteroid.center_x - asteroid.collision_radius > SCREEN_WIDTH:
                    asteroid.center_x = 10 - asteroid.collision_radius

                if asteroid.center_x + asteroid.collision_radius < 0:
                    asteroid.center_x = SCREEN_WIDTH + asteroid.collision_radius

                if asteroid.center_y - asteroid.collision_radius > SCREEN_HEIGHT:
                    asteroid.center_y = 10 - asteroid.collision_radius

                if asteroid.center_y + asteroid.collision_radius < 0:
                    asteroid.center_y = SCREEN_HEIGHT + asteroid.collision_radius

            # Bolt Movement
            for bolt in self.bolt_list:
                bolt.center_x = bolt.center_x + bolt.change_x
                bolt.center_y = bolt.center_y + bolt.change_y

                # Collision with alien
                bolt_hit_list = arcade.check_for_collision_with_list(
                    bolt, self.alien_list)
                for alien_hit in bolt_hit_list:
                    alien_hit.kill()
                    bolt.kill()
                    self.numOfAliens = self.numOfAliens - 1
                    self.score = self.score + 50

                # Collision with boss
                bolt_hit_list = arcade.check_for_collision_with_list(
                    bolt, self.boss_list)
                for boss_hit in bolt_hit_list:
                    if boss_hit.health > 0:
                        if bolt.type == 0:
                            boss_hit.health = boss_hit.health - 1
                        elif bolt.type == 1:
                            boss_hit.health = boss_hit.health - 75
                    elif boss_hit.health <= 0:
                        boss_hit.kill()
                        self.numOfBoss = self.numOfBoss - 1
                        self.score = self.score + BOSSPOINTS
                    bolt.kill()

                # Collision with asteroid
                bolt_hit_list = arcade.check_for_collision_with_list(
                    bolt, self.asteroid_list)
                for asteroid_hit in bolt_hit_list:

                    if asteroid_hit.health > 1:
                        if bolt.type == 0:
                            asteroid_hit.health = asteroid_hit.health - 1
                        elif bolt.type == 1:
                            asteroid_hit.health = asteroid_hit.health - 75

                        bolt.kill()
                        self.score = self.score + 1
                        if asteroid_hit.health <= .25 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(3)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .5 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(2)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .75 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(1)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                    else:
                        # Splits asteroid into two unless it is of smallest size
                        if asteroid_hit.scale > SPRITE_MAX_SCALING_ASTEROID / 2:
                            x1 = asteroid_hit.center_x + asteroid_hit.collision_radius / 2
                            y1 = asteroid_hit.center_y + asteroid_hit.collision_radius / 2
                            x2 = asteroid_hit.center_x - asteroid_hit.collision_radius / 2
                            y2 = asteroid_hit.center_y - asteroid_hit.collision_radius / 2

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x1, y1,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x2, y2,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)
                            self.numOfAsteroids = self.numOfAsteroids + 2

                        asteroid_hit.kill()
                        bolt.kill()
                        self.numOfAsteroids = self.numOfAsteroids - 1
                        self.score = self.score + 10

                # Off Screen Deletion of Bolts
                if bolt.center_x > SCREEN_WIDTH or bolt.center_x < 0 \
                or bolt.center_y > SCREEN_HEIGHT or bolt.center_y < 0:
                    bolt.kill()

            for beam in self.beam_list:
                # Collision with asteroid
                laser_hit_list = arcade.check_for_collision_with_list(
                    beam, self.asteroid_list)
                for asteroid_hit in laser_hit_list:

                    if asteroid_hit.health > 1:
                        asteroid_hit.health = asteroid_hit.health - 1
                        self.score = self.score + 1
                        if asteroid_hit.health <= .25 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(3)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .5 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(2)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .75 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(1)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                    else:
                        # Splits asteroid into two unless it is of smallest size
                        if asteroid_hit.scale > SPRITE_MAX_SCALING_ASTEROID / 2:
                            x1 = asteroid_hit.center_x + asteroid_hit.collision_radius / 2
                            y1 = asteroid_hit.center_y + asteroid_hit.collision_radius / 2
                            x2 = asteroid_hit.center_x - asteroid_hit.collision_radius / 2
                            y2 = asteroid_hit.center_y - asteroid_hit.collision_radius / 2

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x1, y1,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x2, y2,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)
                            self.numOfAsteroids = self.numOfAsteroids + 2

                        asteroid_hit.kill()

            for laser in self.laser_list:
                # Movement
                laserDistFromPlayer = laser.height / 2 + 25
                if self.player_sprite.angle == 0:
                    laser.center_x = self.player_sprite.center_x
                    laser.center_y = self.player_sprite.center_y + laserDistFromPlayer
                    laser.angle = 0

                elif self.player_sprite.angle == 180:
                    laser.center_x = self.player_sprite.center_x
                    laser.center_y = self.player_sprite.center_y - laserDistFromPlayer
                    laser.angle = 180

                elif self.player_sprite.angle == 90:
                    laser.center_x = self.player_sprite.center_x - laserDistFromPlayer
                    laser.center_y = self.player_sprite.center_y
                    laser.angle = 90

                elif self.player_sprite.angle == 270:
                    laser.center_x = self.player_sprite.center_x + laserDistFromPlayer
                    laser.center_y = self.player_sprite.center_y
                    laser.angle = 270

                # Collision with alien
                laser_hit_list = arcade.check_for_collision_with_list(
                    laser, self.alien_list)
                for alien_hit in laser_hit_list:
                    alien_hit.kill()
                    laser.health = laser.health - 1
                    self.numOfAliens = self.numOfAliens - 1
                    self.score = self.score + 50
                    if laser.health <= 0:
                        laser.kill()

                # Collision with boss
                laser_hit_list = arcade.check_for_collision_with_list(
                    laser, self.alien_list)
                for boss_hit in laser_hit_list:
                    if boss_hit.health > 1:
                        boss_hit.health = boss_hit.health - 1
                        laser.health = laser.health - 1
                        if laser.health <= 0:
                            laser.kill()
                    else:
                        boss_hit.kill()
                        self.score = self.score + BOSSPOINTS
                        laser.health = laser.health - 1
                        if laser.health <= 0:
                            laser.kill()
                        self.numOfBoss = self.numOfBoss - 1

                # Collision with asteroid
                laser_hit_list = arcade.check_for_collision_with_list(
                    laser, self.asteroid_list)
                for asteroid_hit in laser_hit_list:

                    if asteroid_hit.health > 1:
                        asteroid_hit.health = asteroid_hit.health - 1
                        laser.health = laser.health - 1
                        if laser.health <= 0:
                            laser.kill()
                        self.score = self.score + 1
                        if asteroid_hit.health <= .25 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(3)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .5 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(2)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                        elif asteroid_hit.health <= .75 * (
                                5 * SPRITE_MAX_SCALING_ASTEROID):
                            asteroid_hit.set_texture(1)
                            asteroid_hit._set_scale(asteroid_hit.scale)
                    else:
                        # Splits asteroid into two unless it is of smallest size
                        if asteroid_hit.scale > SPRITE_MAX_SCALING_ASTEROID / 2:
                            x1 = asteroid_hit.center_x + asteroid_hit.collision_radius / 2
                            y1 = asteroid_hit.center_y + asteroid_hit.collision_radius / 2
                            x2 = asteroid_hit.center_x - asteroid_hit.collision_radius / 2
                            y2 = asteroid_hit.center_y - asteroid_hit.collision_radius / 2

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x1, y1,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)

                            self.asteroid_list = Asteroid.createMiniAsteroid(
                                MyGame, self.asteroid_list, x2, y2,
                                SPRITE_MAX_SCALING_ASTEROID,
                                MAX_ASTEROID_SPEED)
                            self.numOfAsteroids = self.numOfAsteroids + 2

                        asteroid_hit.kill()
                        laser.health = laser.health - 1
                        if laser.health <= 0:
                            laser.kill()
                        self.numOfAsteroids = self.numOfAsteroids - 1
                        self.score = self.score + 10
                # Laser Decay
                laser.health = laser.health - 1
                if laser.health <= 0:
                    laser.kill()
                    self.laser = False
                    self.pow = False

            # Creation of More Asteroids When One Is Destroyed
            extraAsteroid = round(self.score / 400)

            if self.numOfAsteroids < START_ASTEROID + extraAsteroid:
                self.asteroid_list, self.numOfAsteroids = Asteroid.createAsteroid(
                    MyGame, True, self.asteroid_list, self.numOfAsteroids,
                    SCREEN_HEIGHT, SCREEN_WIDTH, SPRITE_MAX_SCALING_ASTEROID,
                    MAX_ASTEROID_SPEED)

            # End of Game when score > 1,000,000
            if self.score >= 10000:
                self.current_state = GAME_WON

            self.physics_engine.update()
Ejemplo n.º 31
0
import pygame
from Ship import *
from Asteroid import *

pygame.init()
screen_info = pygame.display.Info()
print(screen_info)
size = (width, height) = (screen_info.current_w, screen_info.current_h)
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
color = (30, 0, 30)

Player = Ship()
obstacle = Asteroid()


def main():
    while True:
        clock.tick(60)
        Player.update()
        screen.fill(color)
        screen.blit(Player.image, Player.rect)
        screen.blit(obstacle.image, obstacle.rect)
        pygame.display.flip()


if __name__ == '__main__':
    main()