Ejemplo n.º 1
0
 def shoot(self):
     now = pygame.time.get_ticks()
     if now - self.last_shot > self.shoot_delay:
         self.last_shot = now
         #单火力
         if self.power == 1:
             bullet = Bullet(self.rect.centerx, self.rect.top)
             all_sprites.add(bullet)
             bullets.add(bullet)
             shooting_sound.play()
         #双火力
         if self.power == 2:
             bullet1 = Bullet(self.rect.left, self.rect.centery)
             bullet2 = Bullet(self.rect.right, self.rect.centery)
             all_sprites.add(bullet1)
             all_sprites.add(bullet2)
             bullets.add(bullet1)
             bullets.add(bullet2)
             shooting_sound.play()
         #三火力
         if self.power >= 3:
             bullet1 = Bullet(self.rect.left, self.rect.centery)
             bullet2 = Bullet(self.rect.right, self.rect.centery)
             missile1 = Missile(self.rect.centerx, self.rect.top)  # 导弹
             all_sprites.add(bullet1)
             all_sprites.add(bullet2)
             all_sprites.add(missile1)
             bullets.add(bullet1)
             bullets.add(bullet2)
             bullets.add(missile1)
             shooting_sound.play()
             missile_sound.play()
Ejemplo n.º 2
0
    def init_objects(self):
        self.player1 = Player.Player(self._display_surf)
        self.playerSprites = pg.sprite.RenderPlain(self.player1)

        self.missile = Missile.Missile(self._display_surf)
        self.missileSprites = pg.sprite.RenderPlain(self.missile)

        self.enemy= Enemy.Enemy(self._display_surf)
        self.enemySprites = pg.sprite.RenderPlain(self.enemy)
Ejemplo n.º 3
0
    def run(self):
        while not self.done_all:
            self.display.getEvents()
            self.done_all = self.display.closingWindow()
            leaderboard = readWrite.readCsv()
            self.display.drawleaderboard(leaderboard)
            if self.display.retry():
                if SERVER_ENABLED:
                    while True:
                        data = self.client.connect()
                        if data != "RESTART":
                            random.seed(int(data))
                            break
                self.__init__()
                self.done_game = False

            current_time = int(round(time.time() * 1000))
            while not self.done_game:
                last_time = current_time
                current_time = int(round(time.time() * 1000))
                self.display.getEvents()
                self.done_game = self.display.closingWindow()
                self.done_all = self.done_game
                self.display.updateInput()

                direction = self.display.getDirectionFromInput()
                self.square.updateDirection(direction)
                self.square.move((current_time - last_time) / 1000)
                if self.display.getDashEvent():
                    self.square.dash()

                if (current_time - self.time_last_missile >=
                        self.time_between_missiles):
                    self.missiles.append(
                        Missile(MISSILE_HEIGHT, MISSILE_WIDTH, MISSILE_SPEED))
                    self.time_between_missiles -= 0.5
                    self.score += 1
                    self.time_last_missile = current_time
                for missile in self.missiles:
                    missile.move((current_time - last_time) / 1000)
                    if (missile.toDelete()):
                        self.missiles.remove(missile)
                    if (missile.hit(self.square)):
                        self.square.decreaseLife()
                        self.missiles.remove(missile)
                if self.square.lives <= 0:
                    self.done_game = True
                    readWrite.writeInCsv(self.score)
                    if SERVER_ENABLED:
                        self.client.stop()

                self.display.draw(self.square, self.missiles, self.score)

                if SERVER_ENABLED:
                    self.client.sendData(self.square, self.missiles,
                                         self.score)
Ejemplo n.º 4
0
    def buttonUnpressed(self):
        if self.wasPressed == 1:

            timePressed = time.time() - self.initialPress

            #300 N per second pressed
            forceVector = self.cannon.getUnitVector() * (timePressed * 600)


            tMissile = Missile()
            tMissile.pos = (80, 360)

            self.missiles.append(tMissile)

            #2.5 kg Missiles
            self.missileAccelerations.append(forceVector/2.5)

            self.missileVelocities.append(Vec2d(0,0))

            self.wasPressed = 0
Ejemplo n.º 5
0
    def mouse_input(self):
        if pygame.mouse.get_pressed(
                num_buttons=3)[0] and 4 < self.bullet_timer:
            self.bullet_timer = 0
            mx, my = pygame.mouse.get_pos()
            dir = (mx - Display.WINDOW_SIZE[0] / 2,
                   my - Display.WINDOW_SIZE[1] / 2)
            length = math.hypot(*dir)

            if length == 0.0:
                print("lenght 0.0")
                dir = (0, 1)
            else:
                dir = (dir[0] / length, dir[1] / length)

            angle = math.degrees(math.atan2(-dir[1], dir[0]))
            x_y = [self.rect.x, self.rect.y]
            Mediator.ALL_GAMEOBJECTS.append(
                Bullet(copy.deepcopy(x_y), dir, "player_bullet"))

        if pygame.mouse.get_pressed(
                num_buttons=3
        )[2] and self.missile_cooldown < self.missile_timer:
            self.missile_timer = 0
            mx, my = pygame.mouse.get_pos()
            dir = (mx - Display.WINDOW_SIZE[0] / 2,
                   my - Display.WINDOW_SIZE[1] / 2)
            length = math.hypot(*dir)

            if length == 0.0:
                print("length 0.0")
                dir = (0, 1)
            else:
                dir = (dir[0] / length, dir[1] / length)

            angle = math.degrees(math.atan2(-dir[1], dir[0]))
            x_y = [self.rect.x, self.rect.y]
            Mediator.ALL_GAMEOBJECTS.append(Missile(copy.deepcopy(x_y), dir))
Ejemplo n.º 6
0
    def on_event(self, event):
        if event.type == pg.QUIT:
            return
        # 키입력 감지
        if event.type == pg.KEYDOWN:
            if event.key == pg.K_UP:
                self.player1.moveup()
            if event.key == pg.K_DOWN:
                self.player1.movedown()
            if event.key == pg.K_LEFT:
                self.player1.moveleft()
            if event.key == pg.K_RIGHT:
                self.player1.moveright()
            if event.key == pg.K_SPACE:
                missile = Missile.Missile(self._display_surf)
                self._display_surf.blit(self._display_surf, missile.rect, missile.rect)
                self.missileSprites.add(missile)
                self.missileSprites.update()
                self.missileSprites.draw(self._display_surf)
                missile.fire(self.player1.rect)

        elif event.type == pg.KEYUP:
            self.player1.movepos = [0, 0]
            self.player1.state = "still"
Ejemplo n.º 7
0
def main():
    menu = True
    pygame.init()
    deathcounter = 0
    textcounter = 0
    fpsClock = pygame.time.Clock()
    message = ""
    windowSurfaceObj = pygame.display.set_mode((1280, 720), DOUBLEBUF)
    pygame.display.set_caption("William Wallace Castle Defender X-Treme 2140")
    soundObjectExplosion = pygame.mixer.Sound('explosion.wav')
    soundDecoy = pygame.mixer.Sound('decoy.wav')
    soundPwp = pygame.mixer.Sound('powerup.wav')
    soundShld = pygame.mixer.Sound('zap2.wav')
    desertBackground = pygame.image.load(
        os.path.join(os.curdir, 'desert-background.jpg')).convert_alpha()
    SurfaceObjLife = pygame.image.load("life.png")
    level = pygame.image.load(os.path.join(os.curdir,
                                           'LEVEL.png')).convert_alpha()
    player = Player()
    ArrowList = []
    missileList = []
    ShieldList = []
    BombList = []
    PowerUpList = []
    #EXPLOSION
    exploList = []

    #Enemy variables
    maxEnemies = 50
    enemyList = []

    #Castle HP
    HP = 100
    points = 0
    if menu == True:
        Menu(menu, windowSurfaceObj, fpsClock, desertBackground)
    pygame.key.set_repeat(1, 50)
    playing = True
    gravityLimit = False

    soundObjectExplosion = pygame.mixer.Sound("explosion.wav")
    soundObjectArrow = pygame.mixer.Sound("arrow.wav")
    pygame.mixer.music.load("BackgroundMusic.mp3")
    pygame.mixer.music.play(-1)

    gravityLimit = False
    #Main Loop
    LifeUp = 1
    while playing:
        windowSurfaceObj.blit(desertBackground, (0, 0))
        windowSurfaceObj.blit(level, (0, 0))
        mousex = player.x
        mousey = player.y

        #DRAW EXLPLOSIONS
        count = len(exploList) - 1
        while (count >= 0):
            windowSurfaceObj.blit(
                exploList[count].images[exploList[count].image],
                exploList[count].rect)
            if (exploList[count].updateEnemyPos()):
                exploList.pop(count)
            count = count - 1
        if (textcounter > 0):
            #print message
            textMessage = fontObj.render(str(message), False,
                                         pygame.Color(0, 0, 0))
            windowSurfaceObj.blit(
                textMessage,
                ((1280 - textMessage.get_rect().width) / 2 * 1, 670))
            textcounter -= 1
        if (deathcounter > 0):
            if (player.Lives <= 0):
                player.fall()
                player.updatePlayerSprite(21, 1)
            else:
                player.updatePlayerSprite(20, 1)
            deathcounter -= 1
            windowSurfaceObj.blit(player.images[player.image], player.rect)
            pygame.display.flip()
            fpsClock.tick(30)

        else:
            if (player.Lives <= 0):
                retry = gameOver(points, windowSurfaceObj, fpsClock,
                                 desertBackground)
                playing = False
            #Enemy code
            enemyGenerator(enemyList, maxEnemies, points)
            count = len(enemyList) - 1
            while (count >= 0):
                windowSurfaceObj.blit(
                    enemyList[count].images[enemyList[count].image],
                    enemyList[count].rect)

                enx = enemyList[count].x
                eny = enemyList[count].y
                chance = 1
                if enemyList[count].boss:
                    chance = 5
                if random.randint(
                        0, 100) < chance:  #1% chance that an enemy shoots
                    if enemyList[count].right:
                        speed = -enemyList[count].speed
                    else:
                        speed = enemyList[count].speed
                    tmp = random.randint(0, 100)
                    if player.DecoyCounter > 0:
                        playerX = player.DecoyX
                        playerY = player.DecoyY
                    else:
                        playerX = player.x
                        playerY = player.y
                    if enemyList[count].boss:
                        for i in range(0, 30):
                            m = Missile(enx + random.randint(-180, 180),
                                        eny + random.randint(-180, 180),
                                        player.x + random.randint(-180, 180),
                                        player.y + random.randint(-180, 180),
                                        speed)
                            missileList.append(m)
                    elif tmp < 30:
                        m = Missile(enx, eny, playerX, playerY + 20, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY - 20, speed)
                        missileList.append(m)
                    elif tmp < 50:
                        m = Missile(enx, eny, playerX, playerY + 20, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY - 20, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY + 40, speed)
                        missileList.append(m)
                        m = Missile(enx, eny, playerX, playerY - 40, speed)
                        missileList.append(m)
                    else:
                        missileList.append(
                            Missile(enx, eny, playerX, playerY, speed))
                if enemyList[count].updateEnemyPos(enemyList, count):
                    HP = HP - 2
                    if HP < 0:
                        HP = 0
                    exploList.append(Explo(enx, eny, False))
                    soundObjectExplosion.play()
                    if HP == 0:
                        retry = gameOver(points, windowSurfaceObj, fpsClock,
                                         desertBackground)
                        playing = False

                    exploList.append(Explo(enx, eny, False))
                count = count - 1

            skipFall = False
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == MOUSEMOTION:
                    mousex, mousey = event.pos
                    player.updateVector(mousex, mousey)
                elif event.type == MOUSEBUTTONDOWN:
                    myx, myy = event.pos
                    if (myx < player.x):
                        player.updatePlayerSprite(18, 1)
                    else:
                        player.updatePlayerSprite(19, 1)
                elif event.type == MOUSEBUTTONUP:
                    if event.button in (1, 2, 3):
                        mousex, mousey = event.pos
                        #if player.Arrows - 1 >= 0:
                        if 1:
                            arrow = Arrow(player.x, player.y + 24, mousex,
                                          mousey, player.gunmode)
                            ArrowList.append(arrow)
                            if player.MultiShot2:
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey + 20, player.gunmode)
                                ArrowList.append(arrow)
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey - 20, player.gunmode)
                                ArrowList.append(arrow)
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey + 40, player.gunmode)
                                ArrowList.append(arrow)
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey - 40, player.gunmode)
                                ArrowList.append(arrow)
                            elif player.MultiShot:
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey + 30, player.gunmode)
                                ArrowList.append(arrow)
                                arrow = Arrow(player.x, player.y + 24, mousex,
                                              mousey - 30, player.gunmode)
                                ArrowList.append(arrow)
                            soundObjectArrow.play()
                            #player.Arrows -= 1

                        #left, middle, right button
                    elif event.button in (4, 5):
                        blah = "blah"
                        #scroll up or down
                elif event.type == KEYDOWN:
                    x = 0
                    y = 0
                    if event.key == K_SPACE:
                        if player.Repel > 0:
                            soundShld.play()
                            ShieldList.append(Shield(player.x, player.y))
                            player.Repel -= 1

                            #rep = pygame.image.load("pexpl1.png")
                            #windowSurfaceObj.blit(rep,rep.get_rect())
                            for i in range(0, len(missileList)):
                                missXp = missileList[i].x
                                missYp = missileList[i].y

                                diffX = missileList[i].x - player.x
                                diffY = missileList[i].y - player.y

                                if diffX != 0 and diffY != 0:
                                    missileList[i].vector = Vector(
                                        (diffX /
                                         sqrt(diffX * diffX + diffY * diffY)),
                                        (diffY /
                                         sqrt(diffX * diffX + diffY * diffY)))
                                else:
                                    if diffX == 0:
                                        if diffY < 0:
                                            missileList[i].vector = Vector(
                                                0, -1)
                                        elif diffY > 0:
                                            missileList[i].vector = Vector(
                                                0, 1)
                                    elif diffY == 0:
                                        if diffX < 0:
                                            missileList[i].vector = Vector(
                                                -1, 0)
                                        elif diffX > 0:
                                            missileList[i].vector = Vector(
                                                1, 0)
                                    else:
                                        missileList[i].vector = Vector(1, 0)
                                missileList[i].vel = 15
                    if event.key == K_LSHIFT:
                        if player.DecoyNum > 0:
                            soundDecoy.play()
                            player.Decoy(player.x, player.y)
                            player.DecoyNum -= 1

                    if event.key == K_LEFT or event.key == K_a:
                        x = -10
                    if event.key == K_RIGHT or event.key == K_d:
                        x = 10
                    if event.key == K_UP or event.key == K_w:
                        y = -.5
                    keystate = pygame.key.get_pressed()
                    if keystate[pygame.locals.K_UP] or keystate[
                            pygame.locals.K_w]:
                        y = -10
                    if keystate[pygame.locals.K_RIGHT] or keystate[
                            pygame.locals.K_d]:
                        x = 10
                    if keystate[pygame.locals.K_LEFT] or keystate[
                            pygame.locals.K_a]:
                        x = -10
                    #player.updatePlayerPos(x,0)
                    if y != 0:
                        if player.Gravity - 1 >= 0 and gravityLimit:
                            player.jet()
                            skipFall = True
                            player.Gravity -= 1
                        else:
                            if player.Gravity >= 20:
                                gravityLimit = True
                            else:
                                gravityLimit = False
                    if event.key == K_ESCAPE:
                        pygame.event.post(pygame.event.Event(QUIT))
                #else:
            x = 0
            y = 0
            keystate = pygame.key.get_pressed()
            if keystate[pygame.locals.K_UP] or keystate[pygame.locals.K_w]:
                y = -10
            if keystate[pygame.locals.K_RIGHT] or keystate[pygame.locals.K_d]:
                x = 10
            if keystate[pygame.locals.K_LEFT] or keystate[pygame.locals.K_a]:
                x = -10
            if (x != 0 or y != 0):
                player.updatePlayerPos(x, 0)
            if y != 0:
                if player.Gravity - 1 >= 0 and gravityLimit:
                    player.jet()
                    skipFall = True
                    player.Gravity -= 1
                else:
                    if player.Gravity >= 20:
                        gravityLimit = True
                    else:
                        gravityLimit = False

            #player.updateVector(mousex,mousey)
            #Castle health bar
            pygame.draw.rect(windowSurfaceObj, pygame.Color(255, 0, 0),
                             (540, 260, 200, 20))
            pygame.draw.rect(windowSurfaceObj, pygame.Color(0, 255, 0),
                             (540, 260, HP * 2, 20))
            #Display Points
            fontObj = pygame.font.Font('freesansbold.ttf', 32)
            pointsSurfaceObj = fontObj.render("Points: " + str(points), False,
                                              pygame.Color(255, 255, 255))
            windowSurfaceObj.blit(pointsSurfaceObj,
                                  (windowSurfaceObj.get_rect().width -
                                   pointsSurfaceObj.get_rect().width - 25, 25))
            #Display Lives
            fontObj = pygame.font.Font('freesansbold.ttf', 32)
            livesSurfaceObj = fontObj.render("Lives:", False,
                                             pygame.Color(255, 255, 255))
            windowSurfaceObj.blit(livesSurfaceObj, (300, 25))
            for i in range(0, player.Lives):
                windowSurfaceObj.blit(
                    SurfaceObjLife,
                    (300 + livesSurfaceObj.get_rect().width +
                     (i * (SurfaceObjLife.get_rect().width + 25)),
                     25 - SurfaceObjLife.get_rect().height / 4))
            #Display Arrows and gravity
            decoysSurfaceObj = fontObj.render(
                "Decoys: " + str(player.DecoyNum), False,
                pygame.Color(255, 255, 255))
            #arrowsSurfaceObj = fontObj.render("Arrows: " + str(player.Arrows)+"/"+str(player.ArrowsMax), False, pygame.Color(255,255,255))
            #gravitySurfaceObj = fontObj.render("Anti-Gravity: ", False, pygame.Color(255,255,255))
            windowSurfaceObj.blit(decoysSurfaceObj, (40, 15))
            repelSurfaceObj = fontObj.render("Repels: " + str(player.Repel),
                                             False,
                                             pygame.Color(255, 255, 255))
            windowSurfaceObj.blit(repelSurfaceObj, (40, 70))

            pygame.draw.rect(windowSurfaceObj, pygame.Color(255, 255, 0),
                             (20, 120, 200, 20))
            pygame.draw.rect(windowSurfaceObj, pygame.Color(255, 0, 0),
                             (20, 120, 40, 20))
            pygame.draw.rect(windowSurfaceObj, pygame.Color(0, 255, 0),
                             (20, 120, player.Gravity * 2, 20))
            #windowSurfaceObj.blit(arrowsSurfaceObj, (25, 25))
            #windowSurfaceObj.blit(gravitySurfaceObj, (25, arrowsSurfaceObj.get_rect().height + 50))
            #player.updatePos()
            if not skipFall:
                player.fall()
            #Arrow Code
            end = len(ArrowList)
            i = end - 1
            while i >= 0:
                chk = ArrowList[i].updateArrowPos()
                if not chk:
                    ArrowList.pop(i)
                    i = i - 1
                else:
                    end = len(enemyList) - 1
                    count = end
                    chk = True
                    while count >= 0:
                        if ArrowList[i].rect.colliderect(
                                enemyList[count].rect):
                            if (not player.gunmode):
                                ArrowList.pop(i)
                                i = i - 1
                            enx = enemyList[count].x
                            eny = enemyList[count].y
                            if (enemyList[count].Hit(enemyList, count, 5)):
                                exploList.append(Explo(enx, eny, False))
                                x = random.randint(0, 100)
                                if x <= 25:
                                    tmp = PowerUp(enx, eny)
                                    PowerUpList.append(tmp)
                                elif x > 95:
                                    b = Bomb(enx, eny)
                                    BombList.append(b)
                                soundObjectExplosion.play()
                            points = points + 5
                            if points / LifeUp >= 100:
                                LifeUp += 1
                                player.Lives += 1
                            chk = False
                        count -= 1
                        if i < 0:
                            count = -1
                    if chk:
                        ArrowObj = ArrowList[i].ArrowObj
                        windowSurfaceObj.blit(ArrowObj, ArrowList[i].rect)
                i = i - 1

            #Bomb Code
            i = len(BombList) - 1
            while i >= 0:
                if BombList[i].rect.colliderect(player.rect):
                    killAllEnemies(enemyList, exploList, soundObjectExplosion)
                    #deathcounter=45
                    points = points + 30
                    if points / LifeUp >= 100:
                        LifeUp += 1
                        player.Lives += 1
                    for i in range(0, 60):
                        x = random.randint(0, 1280)
                        y = random.randint(0, 720)
                        z = random.randint(0, 1)
                        exploList.append(Explo(x, y, z))
                    BombList = []
                    missileList = []
                    arrowList = []
                    i = -1
                else:
                    windowSurfaceObj.blit(BombList[i].image, BombList[i].rect)
                i = i - 1

            #Missile Code
            end = len(missileList)
            i = end - 1

            while i >= 0:
                chk = missileList[i].updateMissilePos()
                if not chk:
                    missileList.pop(i)
                    i = i - 1
                else:
                    if missileList[i].rect.colliderect(player.rect):
                        exploList.append(
                            Explo(missileList[i].x, missileList[i].y, True))
                        soundObjectExplosion.play()
                        missileList.pop(i)
                        player.Lives -= 1
                        #i = i - 1
                        if player.Lives <= 0 and playing == True:
                            killAllEnemies(enemyList, exploList,
                                           soundObjectExplosion)
                            deathcounter = 70
                        else:
                            i = -1
                            player.ArrowsMax = 20
                            player.ArrowsReplRate = 0.05
                            missileList = []
                            arrowList = []
                            #TODO
                            killAllEnemies(enemyList, exploList,
                                           soundObjectExplosion)
                            deathcounter = 45
                            player.RapidFire = False
                            player.MultiShot = False
                            player.MultiShot2 = False
                            player.gunmode = False
                        chk = False
                    if i < 0:
                        count = -1
                if chk:
                    missileObj = missileList[i].missileObj
                    windowSurfaceObj.blit(missileObj, missileList[i].rect)
                i = i - 1

            i = len(PowerUpList) - 1
            while i >= 0:
                PowerUpList[i].updateBoxSprite()
                if player.rect.colliderect(PowerUpList[i].rect):
                    soundPwp.play()
                    if PowerUpList[i].type == 0:
                        player.Repel += 1
                        message = "Repel!"
                        textcounter = 120
                    elif PowerUpList[i].type == 1:
                        if player.MultiShot:
                            player.MultiShot2 = True
                        player.MultiShot = True
                        message = "Multi Shot!"
                        textcounter = 120
                    elif PowerUpList[i].type == 2:
                        player.DecoyNum += 1
                        message = "Decoy!"
                        textcounter = 120
                    elif PowerUpList[i].type == 3:
                        if HP + 10 >= 100:
                            HP = 100
                        else:
                            HP += 10
                        message = "Castle HP restored!"
                        textcounter = 120
                    elif PowerUpList[i].type == 4:
                        player.gunmode = True
                        message = "Piercing bullets!"
                        textcounter = 120
                        soundObjectArrow = pygame.mixer.Sound("gun.wav")
                    PowerUpList.pop(i)
                else:
                    windowSurfaceObj.blit(
                        PowerUpList[i].images[PowerUpList[i].image],
                        PowerUpList[i].rect)
                i = i - 1
            #check enemy detection with player
            i = len(enemyList) - 1
            while i >= 0:
                if player.rect.colliderect(enemyList[i].rect):
                    player.Lives -= 1
                    exploList.append(
                        Explo(enemyList[i].x, enemyList[i].y, True))
                    soundObjectExplosion.play()
                    exploList.append(
                        Explo(enemyList[i].x, enemyList[i].y, True))
                    enemyList.pop(i)
                    if player.Lives <= 0 and playing == True:
                        killAllEnemies(enemyList, exploList,
                                       soundObjectExplosion)
                        deathcounter = 70
                    else:
                        player.ArrowsMax = 20
                        player.ArrowsReplRate = 0.05
                        killAllEnemies(enemyList, exploList,
                                       soundObjectExplosion)
                        deathcounter = 45
                        missileList = []
                        arrowsList = []
                        player.RapidFire = False
                        player.MultiShot = False
                        player.MultiShot2 = False
                        player.gunmode = False
                    i = len(enemyList)
                i = i - 1

            windowSurfaceObj.blit(player.images[player.image], player.rect)
            player.DecoyCounter -= 5
            if player.DecoyCounter > 0:
                windowSurfaceObj.blit(player.images[21],
                                      (player.DecoyX, player.DecoyY))
            #DRAW SHIELD
            count = len(ShieldList) - 1
            while (count >= 0):
                windowSurfaceObj.blit(
                    ShieldList[count].images[ShieldList[count].image],
                    ShieldList[count].rect)
                ShieldList[count].x = player.x
                ShieldList[count].y = player.y

                if (ShieldList[count].move(0, 0)):
                    ShieldList.pop(count)
                count = count - 1

            #pygame.display.update()
            pygame.display.flip()
            fpsClock.tick(30)
            #if player.Arrows + 1 <= player.ArrowsMax:
            #    player.ArrowsRepl += player.ArrowsReplRate
            #   if player.ArrowsRepl >= 1.0:
            #       player.Arrows += 1
            #      player.ArrowsRepl = 0.0
            if player.Gravity + 1 <= 100:
                player.GravityRepl += .5
                if player.GravityRepl >= 1.0:
                    player.Gravity += 1
                    player.GravityRepl = 0.0

    if retry:
        pygame.mixer.music.stop
        main()
    else:
        pygame.quit()
Ejemplo n.º 8
0
 def shootMissile(self, x, y):
     myMissile = Missile.missile(x, y, 'sprites/balaFire.png', True)
     self.listShoot.append(myMissile)
     self.soundMissile.play()
    HealthBar(player1.lives, [100, height - 25])
    Hyperspeed("PowerUps/Boost/images/powerup.png",
               [random.randint(50, width - 50), (200)])
    Nuke("PowerUps/GuidedMissile/images/nuke.png", [550, 50])
    SlowMo("PowerUps/Boost/images/slowdown.png",
           [random.randint(50, width - 50), (200)])

    while mode == "play" and player1.lives > 0:
        for event in pygame.event.get():
            #print event.type
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if player1.missiles > 0:
                    missile = Missile([
                        player1.rect.centerx - 59, player1.rect.centery - 115
                    ], event.pos)  #spawn point of missile
                    launch.play(1)
                    launch.fadeout(1200)
                    player1.missiles -= 1
            if event.type == pygame.MOUSEMOTION:
                if missile:
                    missile.headTo(event.pos)

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_t:
                    paused = True
                    while paused:
                        for event in pygame.event.get():
                            if event.type == pygame.QUIT: sys.exit()
                            if event.type == pygame.KEYDOWN:
Ejemplo n.º 10
0
print(api.getTable())

network.start(api)

ship1 = Ship.Ship(shipConf, universe)
ship1.name = "Aggressor"
ship2 = Ship.Ship(shipConf, universe)
ship2.name = "Victim"
ship1.location = physics.Vector(5000, 1000, 0)
ship2.location = physics.Vector(1000, 1000, 0)
ship2.rotation = physics.Vector(0, 0, 0)
universe.add(ship1)
universe.add(ship2)

missile = Missile.Missile(missileConf, universe)

for i in ship1.components.values():
    if i.type == "WeaponsStation":
        i.energy = 1
        i.load(missile)

if "-v" in sys.argv:
    screen.fill((255, 255, 255))

universe.tick(5)
universe.collide()
universe.tock()

last = time.time()
while True:
Ejemplo n.º 11
0
 def __shootEnemy(self):
     x, y = self.rect.center
     missileEnemy = Missile.missile(x, y, 'sprites/balaFire.png', False)
     self.listShootE.append(missileEnemy)
Ejemplo n.º 12
0
    def updatePlaying(self, gametime):
        if self.InvaderRemaining == False:
            self.gameState = 3
            return

        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    self.rocketXPos = self.rocketXPos + 4
                elif event.key == pygame.K_LEFT:
                    self.rocketXPos = self.rocketXPos - 4
                elif event.key == pygame.K_SPACE:
                    if self.missileFired == None:
                        self.missileFired = Missile.Missile(
                            self.rocketXPos, 650)
                        self.shootSound.play()
                        leftMostInvader = None

        invaderFound = False
        for i in range(55):
            if self.invaders[i].visible != False:
                invaderFound = True
                break

        if invaderFound == False:
            self.InvaderRemaining = False

        if self.rocketXPos < 100:
            self.rocketXPos = 100

        if self.rocketXPos > 924:
            self.rocketXPos = 924

        if self.missileFired != None:
            self.missileFired.move()
            if self.missileFired.getPosY() < 0:
                self.missileFired = None

        self.ticks = self.ticks + gametime

        if self.ticks < 500:
            for i in range(55):
                if self.invaders[i] != None:
                    self.invaders[i].moveHorizontal(self.alienSpeed *
                                                    self.alienDirection)

            leftMostInvader = None
            rightMostInvader = None

        for i in range(55):
            if self.invaders[i] != None:
                leftMostInvader = self.invaders[i]
                break

        for i in range(54, -1, -1):
            if self.invaders[i] != None:
                rightMostInvader = self.invaders[i]
                break

        if leftMostInvader.getPosX() < 96:
            self.alienDirection = +1
            self.leftrightSound.play()

            xPos = 96
            for r in range(55):
                if r % 11 == 0:
                    xPos = 96
                #for i in range(11):
                if self.invaders[r] != None:
                    self.invaders[r].moveVertical(4)
                    self.invaders[r].setPosX(xPos)
                xPos = xPos + 32

        if rightMostInvader.getPosX() > 924:
            self.leftrightSound.play()
            self.alienDirection = -1

            xPos = 924 - 32 * 10
            for r in range(55):

                if r % 11 == 0:
                    xPos = 924 - 32 * 10

                if self.invaders[r] != None:
                    self.invaders[r].moveVertical(4)
                    self.invaders[r].setPosX(xPos)
                xPos = xPos + 32

        self.ticks = 0

        if self.missileFired != None:
            rectMissile = pygame.Rect(self.missileFired.getPosX(),
                                      self.missileFired.getPosY(),
                                      self.missileImg.get_width(),
                                      self.missileImg.get_height())
            for i in range(55):
                if self.invaders[i].visible:
                    rectInvader = pygame.Rect(self.invaders[i].getPosX(),
                                              self.invaders[i].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders[i].takehit()
                        self.explosionSound.play()
                        if i < 23:
                            self.playerScore = self.playerScore + 500
                        elif i >= 45:
                            self.playerScore = self.playerScore + 50
                        else:
                            self.playerScore = self.playerScore + 200
                            break
Ejemplo n.º 13
0
    def updatePlaying(self, gametime): # update the playing screen (while the game is running) 
        events = pygame.event.get()

        for event in events:
            if event.type == pygame.QUIT: # quits the game if the event told to
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN: # looks for the arrow key inputs then moves thee player in the direction respectively
                if event.key == pygame.K_RIGHT:
                    self.rocketXPos = self.rocketXPos + 4
                elif event.key == pygame.K_LEFT:
                    self.rocketXPos = self.rocketXPos - 4
                elif event.key == pygame.K_SPACE: #looks for the space key to be pressed then fires the missile if so 
##                    self.missileFired = Missile.Missile(self.rocketXPos, 650) #old line where the missile shot from the left of the rocket
                    self.missileFired = Missile.Missile((self.rocketXPos + (self.rocketLauncherImg.get_width()//2)), 650)# so the missile shoots more central
                

        isInvaderRemaining = False
        for h in range(5):
            for i in range(11):
                if self.invaders[h][i] != None:
                    isInvaderRemaining = True
                    break
                
        if isInvaderRemaining == False: # moves the game to the end screen if all invaders are gone 
            self.gameState = 3
            return
        
        if self.missileFired != None: # moves the missile vertically if it has been fired 
            self.missileFired.move()
        
        if self.rocketXPos < 100:
            self.rocketXPos = 100

        if self.rocketXPos > 924:
            self.rocketXPos = 924

        self.ticks = self.ticks + gametime

        if self.ticks > 500:
            for h in range(5):
                for i in range(11):
                    if self.invaders[h][i] != None:
                        self.invaders[h][i].moveHorizontal(self.alienSpeed * self.alienDirection) # moves the alien by the amount of pixels equal to
                                                                                                  # the product of the direction and the speed of the 
            leftMostInvader = None                                                                # invader
            rightMostInvader = None

            for h in range(5):
                for i in range(11):
                    if self.invaders[h][i] != None:
                        leftMostInvader = self.invaders[h][i]
                        break
                
            for h in range(5):
                for i in range(10, -1, -1):
                    if self.invaders[h][i] != None:
                        rightMostInvader = self.invaders[h][i]
                        break

            if leftMostInvader.getPosX() < 96: # if the psiton of the left most invader is less than 96 switch directon
                self.alienDirection = +1

                for h in range(5):
                    xPos = 96
                    for i in range(11):
                        if self.invaders[h][i] != None: #sets the invaders to move down the screen when it hits the side
                            self.invaders[h][i].moveVertical(8)
##                            self.invaders[h][i].setPosX(xPos)
                            if self.invaders[h][i].getPosY() >= 650:#ends the game when the alien is at the same level as the player 
                                self.gameState = 3
                        xPos = xPos + self.invaderImg.get_width()
                        xPos = xPos + 30
                        
            if rightMostInvader.getPosX() > 924 :
                self.alienDirection = -1

                for h in range(5):
                    xPos = 924 - self.invaderImg.get_width() * 10 
                    for i in range(11):
                        if self.invaders[h][i] != None: #sets the invaders to move down the screen when it hits the other side
                            self.invaders[h][i].moveVertical(8)
##                            self.invaders[h][i].setPosX(xPos)
                            if self.invaders[h][i].getPosY() >= 650:#ends the game when the alien is at the same level as the player
                                self.gameState = 3
                        xPos = xPos + self.invaderImg.get_width()
                        xPos = xPos + 30
            self.ticks = 0
        
        for h in range(5):                  #goes through all the invaders creating a rectangle around them also creates a rectangle around the rocket 
                for i in range(11):         # then sees if the two collide if yes then ends the game 
                    if self.invaders[h][i] != None:
                        rectInvader = pygame.Rect(self.invaders[h][i].getPosX(), self.invaders[h][i].getPosY(), self.invaderImg.get_width(), self.invaderImg.get_height())
                        rectRocket = pygame.Rect(self.rocketXPos, 650, self.rocketLauncherImg.get_width(), self.rocketLauncherImg.get_height())
                        if rectInvader.colliderect(rectRocket):
                            self.gameState = 3


                    
        if self.missileFired != None: # creates the rectangle around the missile
            rectMissile = pygame.Rect(self.missileFired.getPosX(), self.missileFired.getPosY(), self.missileImg.get_width(), self.missileImg.get_height())
            for h in range(5):
                for i in range(11):
                    if self.invaders[h][i] != None: # creates the rectangle around the invader 
                        rectInvader = pygame.Rect(self.invaders[h][i].getPosX(), self.invaders[h][i].getPosY(), self.invaderImg.get_width(), self.invaderImg.get_height())
                        if rectMissile.colliderect(rectInvader): # do the two rectangle share a co ordinate
                            self.missileFired = None             # if yes then delete the missile 
                            self.invaders[h][i] = None
                            self.score += 100 
                            break
Ejemplo n.º 14
0
    def updatePlaying(self, gametime):
        events = pygame.event.get()

        #These are the key events that the user will use to control the game when
        #they are playing it.

        #The first key evebt is the escape key and when it is pressed the gane
        #reverts back to the start menu and turn everything back to default.
        for event in events:
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    self.initializeGameVariables()
                    self.gameState = 1

    #This event is used when the user presses the red cross on the game
    #game window and this shuts down the game.
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

    #This event check if the right key is being pressed by the user
    #and if it is moves teh rocketlauncher to teh right.
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    self.rocketXPos = self.rocketXPos + 4

    #This event checks if  the left key is being pressed by the user
    #and if it is moves the rocketlauncher to the left.
                elif event.key == pygame.K_LEFT:
                    self.rocketXPos = self.rocketXPos - 4

    #This event checks if the spacebar is being pressed and if it is
    #then makes an instance of the missile shotting from the rocketlauncher
    #using its X and Y positiobs.
                elif event.key == pygame.K_SPACE:
                    self.missileFired = Missile.Missile(
                        self.rocketXPos, self.rocketYPos)

        # these are the five for loops in the playing update method that constantly check
        #the rows of invaders to see if there are any invazder remaining in any of the
        #rows and till every incaders is destroyed the isInvaderRemaining is set to true
        isInvaderRemaining = False
        for i in range(11):
            if self.invaders[i] != None:
                isInvaderRemaining = True
                break

        for j in range(11):
            if self.invaders2[j] != None:
                isInvaderRemaining = True
                break

        for q in range(11):
            if self.invaders3[q] != None:
                isInvaderRemaining = True
                break

        for w in range(11):
            if self.invaders4[w] != None:
                isInvaderRemaining = True
                break

        for e in range(11):
            if self.invaders5[e] != None:
                isInvaderRemaining = True
                break

        #This if statement checks if the there are any invadeers reamaing and if there are not
        #the isInvaderRemaining variable is set to false and the game goes to gameState 3 which
        #is the game over menu
        if isInvaderRemaining == False:
            self.gameState = 3
            return

        #This is statement if the missilefired is not equal to None which means if the missile
        #has been fired from the rocketlauncher then exectue the method move which mvoes the
        #missiles Y position
        if self.missileFired != None:
            self.missileFired.move()

        #This if statement checks if the rocket launchers position on the X axis is less than
        #100 which means if it close to the left end of the game screen. if it is then the
        #rockets position is set to 100 which will stop it from moving any further left and
        #going off screen.
        if self.rocketXPos < 100:
            self.rocketXPos = 100

        #This if sstatement checks if the ricket launchers X axis position is more than 924
        #which means it is near the right end of the game screen. if it is then the rockets
        #position is set to 924 which will stop it from going any further rught and moving
        #off screen.
        if self.rocketXPos > 924:
            self.rocketXPos = 924

        self.ticks = self.ticks + gametime

        #These are five for loops for the five invaders rows in teh game and these check
        #if each row of invaders is not equal to None which means if there are still invaders
        #remaining in each of the rows and if there are invaders remaining initializes the
        #moveHorizontal method which adds te alien speed and direction areguments for the rows
        #of invaders
        if self.ticks > 500:
            for i in range(11):
                if self.invaders[i] != None:
                    self.invaders[i].moveHorizontal(self.alienSpeed *
                                                    self.alienDirection)

        if self.ticks > 500:
            for j in range(11):
                if self.invaders2[j] != None:
                    self.invaders2[j].moveHorizontal(self.alienSpeed *
                                                     self.alienDirection)

        if self.ticks > 500:
            for q in range(11):
                if self.invaders3[q] != None:
                    self.invaders3[q].moveHorizontal(self.alienSpeed *
                                                     self.alienDirection)

        if self.ticks > 500:
            for w in range(11):
                if self.invaders4[w] != None:
                    self.invaders4[w].moveHorizontal(self.alienSpeed *
                                                     self.alienDirection)

        if self.ticks > 500:
            for e in range(11):
                if self.invaders5[e] != None:
                    self.invaders5[e].moveHorizontal(self.alienSpeed *
                                                     self.alienDirection)
                    #self.fastinvader.play()

            #These are the left  and right most invader variables and they are all set to None
            leftMostInvader = None
            rightMostInvader = None

            leftMostInvader2 = None
            rightMostInvader2 = None

            leftMostInvader3 = None
            rightMostInvader3 = None

            leftMostInvader4 = None
            rightMostInvader4 = None

            leftMostInvader5 = None
            rightMostInvader5 = None

            #These are the five for loops for the five rows of invadrs and these loops check
            #if each row of invaders os not equal ro none meaning if there are invaders
            #remamining in each row and if therea re invaders remaining assign the rows of
            #invaders to the leftMostInvader varaibles.
            for i in range(11):
                if self.invaders[i] != None:
                    leftMostInvader = self.invaders[i]
                    break

            for j in range(11):
                if self.invaders2[j] != None:
                    leftMostInvader2 = self.invaders2[j]
                    break

            for q in range(11):
                if self.invaders3[q] != None:
                    leftMostInvader3 = self.invaders3[q]
                    break

            for w in range(11):
                if self.invaders4[w] != None:
                    leftMostInvader4 = self.invaders4[w]
                    break

            for e in range(11):
                if self.invaders5[e] != None:
                    leftMostInvader5 = self.invaders5[e]
                    break

            #These five for loops check if the rows of invaders in the self.invaders are
            #not equal to none meanning if there are invaders still remaining in the rows
            #if there are invaders remaining then assign the self.invaders which are the rows
            #to the varaiable rightMostInvader and leftMostInvader[2-5] and at the end of
            #each for loop is a break to end the loop
            for i in range(10, -1, -1):
                if self.invaders[i] != None:
                    rightMostInvader = self.invaders[i]
                    break

            for j in range(10, -1, -1):
                if self.invaders2[j] != None:
                    rightMostInvader2 = self.invaders2[j]
                    break

            for q in range(10, -1, -1):
                if self.invaders3[q] != None:
                    rightMostInvader3 = self.invaders3[q]
                    break

            for w in range(10, -1, -1):
                if self.invaders4[w] != None:
                    rightMostInvader4 = self.invaders4[w]
                    break

            for e in range(10, -1, -1):
                if self.invaders5[e] != None:
                    rightMostInvader5 = self.invaders5[e]
                    break

            #This if statement get the X position of the leftMostInvader whcih are
            #assigned the rows of invaders and if te X position is less than 96
            #which is close to the left end of the game screen change the direction
            #of the rows to plus one so they will move right.
            if leftMostInvader.getPosX() < 96:
                self.alienDirection = +1

                #First 96 is assigned to the xOos varaible. Then the for loops are
                #started for the five rows of invaders in my game. The if statement
                #in the for loop checks if the self.invaders is not equal to none meaning
                #if there are invaders remaining in the rows the initialise the moververtial
                #method with the argument 4 and then set the position of selfinvaders for
                #each of the for loops to xPos which is 96/Finally assigning the width of the
                #invaderImg to the xPos varaible.
                xPos = 96
                for i in range(11):
                    if self.invaders[i] != None:
                        self.invaders[i].moveVertical(12)
                        self.invaders[i].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 96
                for j in range(11):
                    if self.invaders2[j] != None:
                        self.invaders2[j].moveVertical(12)
                        self.invaders2[j].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 96
                for q in range(11):
                    if self.invaders3[q] != None:
                        self.invaders3[q].moveVertical(12)
                        self.invaders3[q].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 96
                for w in range(11):
                    if self.invaders4[w] != None:
                        self.invaders4[w].moveVertical(12)
                        self.invaders4[w].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 96
                for e in range(11):
                    if self.invaders5[e] != None:
                        self.invaders5[e].moveVertical(12)
                        self.invaders5[e].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

            #This if statement gets the X position of the rightMostInvader variable
            #for each of the loops and check if the position is more than 924 which
            #is near the right end of the game screen and if it is more than 924
            #then set self.alienDirection to -1 which will change the direction to
            #left.
            if rightMostInvader.getPosX() > 924:
                self.alienDirection = -1

                #First 924 is minused by the invaderImg width ten times
                #and this is assigned to the varaible xPos. Then the for loops
                #are started for each of the rows of invaders. The if statement
                #checks if the self.invaders which are the rows are not equal
                #to None meaning theat if therea are any invaders remaining in
                #the rows andi fi therea are initialise the moveVertical method
                #and set the argument 12 to it. Then the self.invaders is set a X
                #position of parameter xPos. Finally the invaderImg widht is
                #assigned to the variable xPos.
                xPos = 924 - self.invaderImg.get_width() * 10
                for i in range(11):
                    if self.invaders[i] != None:
                        self.invaders[i].moveVertical(12)
                        self.invaders[i].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 924 - self.invaderImg.get_width() * 10
                for j in range(11):
                    if self.invaders2[j] != None:
                        self.invaders2[j].moveVertical(12)
                        self.invaders2[j].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 924 - self.invaderImg.get_width() * 10
                for q in range(11):
                    if self.invaders3[q] != None:
                        self.invaders3[q].moveVertical(12)
                        self.invaders3[q].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 924 - self.invaderImg.get_width() * 10
                for w in range(11):
                    if self.invaders4[w] != None:
                        self.invaders4[w].moveVertical(12)
                        self.invaders4[w].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

                xPos = 924 - self.invaderImg.get_width() * 10
                for e in range(11):
                    if self.invaders5[e] != None:
                        self.invaders5[e].moveVertical(12)
                        self.invaders5[e].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

            self.ticks = 0

            #First pygame rect is created for the rocket launcher and the rocketXPos
            #and the rocketYPos, the the rocketLaucher width and height is taken and
            #all of this is assigned to the rectRocketLauncher varaible. Then the for loops
            #for for the five rows of invaders is started and it first if statement in the loop
            #is saying if self.invaders which is the row of invaders is not equal to None.
            #if it is not equal to None thyen create a rectInvader which has the the X and Y
            #positions of the invaders nad the width and height of the invaderImg, next another
            #if statement is started which checks if there has been a collision between the eectInvader
            #and the rectRocket Launcher and if there has been go to gameState 3 whci is the gameover menu
            rectRocketLauncher = pygame.Rect(
                self.rocketXPos, self.rocketYPos,
                self.rocketLauncherImg.get_width(),
                self.rocketLauncherImg.get_height())
            for i in range(11):
                if self.invaders[i] != None:
                    rectInvader = pygame.Rect(self.invaders[i].getPosX(),
                                              self.invaders[i].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectInvader.colliderect(rectRocketLauncher):
                        self.gameState = 3
                        return

            for j in range(11):
                if self.invaders2[j] != None:
                    rectInvader = pygame.Rect(self.invaders2[j].getPosX(),
                                              self.invaders2[j].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectInvader.colliderect(rectRocketLauncher):
                        self.gameState = 3
                        return

            for q in range(11):
                if self.invaders3[q] != None:
                    rectInvader = pygame.Rect(self.invaders3[q].getPosX(),
                                              self.invaders3[q].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectInvader.colliderect(rectRocketLauncher):
                        self.gameState = 3
                        return

            for w in range(11):
                if self.invaders4[w] != None:
                    rectInvader = pygame.Rect(self.invaders4[w].getPosX(),
                                              self.invaders4[w].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectInvader.colliderect(rectRocketLauncher):
                        self.gameState = 3
                        return

            for e in range(11):
                if self.invaders5[e] != None:
                    rectInvader = pygame.Rect(self.invaders5[e].getPosX(),
                                              self.invaders5[e].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectInvader.colliderect(rectRocketLauncher):
                        self.gameState = 3
                        return
        #This if statment checks if the variable self.missileFired is not equal to none
        #if it not equal to non the pygame rectangle is created around hte missile using
        #the missiles X and Y positions and getting the width and height of the missileImg
        #and assigning all of this to the variable called rectMissile.
        if self.missileFired != None:
            rectMissile = pygame.Rect(self.missileFired.getPosX(),
                                      self.missileFired.getPosY(),
                                      self.missileImg.get_width(),
                                      self.missileImg.get_height())

            #These are the for loops for the five rows of invaders in the game. The if
            #statement checks if teh self.invaders in eachh of the for loops is not
            #equal to none and if it is not equal to none then create a rectangle for
            #the invaders using the invaders X and Y positions and getting the width and
            #height of the invaderImg and assigning all this to the rectInvader variable.
            #The next if statement checks if the rectMissile has collided with rectInvader,
            #if it has then set the missileFired variable to none, then set the self.invaders
            #to none, next play the self.explistion sound and finally add five to self.playerScore
            #and assign that to the variable self.playerScore.

            for i in range(11):
                if self.invaders[i] != None:
                    rectInvader = pygame.Rect(self.invaders[i].getPosX(),
                                              self.invaders[i].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders[i] = None
                        self.explosionSound.play()
                        self.playerScore = self.playerScore + 5
                        break

            for j in range(11):
                if self.invaders2[j] != None:
                    rectInvader = pygame.Rect(self.invaders2[j].getPosX(),
                                              self.invaders2[j].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders2[j] = None
                        self.explosionSound.play()
                        self.playerScore = self.playerScore + 5
                        break

            for q in range(11):
                if self.invaders3[q] != None:
                    rectInvader = pygame.Rect(self.invaders3[q].getPosX(),
                                              self.invaders3[q].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders3[q] = None
                        self.explosionSound.play()
                        self.playerScore = self.playerScore + 5
                        break

            for w in range(11):
                if self.invaders4[w] != None:
                    rectInvader = pygame.Rect(self.invaders4[w].getPosX(),
                                              self.invaders4[w].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders4[w] = None
                        self.explosionSound.play()
                        self.playerScore = self.playerScore + 5
                        break

            for e in range(11):
                if self.invaders5[e] != None:
                    rectInvader = pygame.Rect(self.invaders5[e].getPosX(),
                                              self.invaders5[e].getPosY(),
                                              self.invaderImg.get_width(),
                                              self.invaderImg.get_height())
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders5[e] = None
                        self.explosionSound.play()
                        self.playerScore = self.playerScore + 5
                        break

            #The self.playerScore is assigned to the variable self.total score
            self.totalscore = self.playerScore
Ejemplo n.º 15
0
    def updatePlaying(self, gametime):
        events = pygame.event.get()

        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_END:
                    pygame.quit()
                    sys.exit()
                elif event.key == pygame.K_RIGHT:
                    self.rocketXPos = self.rocketXPos + 6
                elif event.key == pygame.K_LEFT:
                    self.rocketXPos = self.rocketXPos - 6
                elif event.key == pygame.K_SPACE and self.missileFired == None:
                    self.missileFired = Missile.Missile(self.rocketXPos, 650)
                    self.shootSound.play()
                    self.missileFired.move()


        isInvaderRemaining = False
        for i in range(self.noInvaders * self.noRows):
            if self.invaders[i] != None:
                isInvaderRemaining = True
                break
        if isInvaderRemaining == False:
            self.gameState = 3
            return
        #Checking if missile fired and waiting for it to disappear first
        if self.missileFired != None:
            self.missileFired.move()
            if self.missileFired.getPosY() < -10:
                self.missileFired = None
        
        #Position of rocket launcher going through the screen
        if self.rocketXPos < 100:
            self.rocketXPos = 100
            self.rocketXPos = 924

        if self.rocketXPos > 924:
            self.rocketXPos = 924
            self.rocketXPos = 100

        self.ticks = self.ticks + gametime

        if self.ticks > 500:

            # Movements of rows of invaders
            for i in range(self.noInvaders * self.noRows):
                if self.invaders[i] is not None:
                    self.invaders[i].moveHorizontal(self.alienSpeed * self.alienDirection)

                self.fastinvader1Sound.play()

            leftMostInvader = None
            rightMostInvader = None

            #To detect whether there are any invaders left in row
            for i in range(self.noInvaders):
                if self.invaders[i] != None:
                    leftMostInvader = self.invaders[i]
                    break
                
            for i in range(self.noInvaders -1, -1, -1):
                if self.invaders[i] != None:
                    rightMostInvader = self.invaders[i]
                    break

            PosX = 100
            if leftMostInvader.getPosX() < 100:
                self.alienDirection = +1

                xPos = 100
                for i in range(self.noInvaders * self.noRows):
                    if self.invaders[i] != None:
                        self.invaders[i].moveVertical(8)
                        #self.invaders[i].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

            if rightMostInvader.getPosX() > 924:
                self.alienDirection = -1

                xPos = 924 - self.invaderImg.get_width() * 11
                for i in range(self.noInvaders * self.noRows):
                    if self.invaders[i] != None:
                        self.invaders[i].moveVertical(8)
                        #self.invaders[i].setPosX(xPos)
                    xPos = xPos + self.invaderImg.get_width()

            #Making invaders speed up when the reach certain Y point on Y axis
            if self.AlreadySpeedUp == False:
                for i in range((self.noRows * self.noInvaders) - 1, -1, -1):
                    if self.invaders[i] is not None:
                        if int(self.invaders[i].getPosY()) > 400:
                            self.alienSpeed += 15
                            self.AlreadySpeedUp = True
                            break
                        
            self.ticks = 0
        
        #Collision detection
        if self.missileFired != None:
            rectMissile = pygame.Rect(self.missileFired.getPosX(), self.missileFired.getPosY(), self.missileImg.get_width(), self.missileImg.get_height())
            for i in range((self.noInvaders * self.noRows)-1, -1, -1):
                if self.invaders[i] is not None:
                        rectInvader = pygame.Rect(self.invaders[i].getPosX(), self.invaders[i].getPosY(), self.invaderImg.get_width(), self.invaderImg.get_height())
                        if rectMissile.colliderect(rectInvader):
                            self.missileFired = None
                            self.invaders[i] = None

                            self.playerScore = self.playerScore + 100

                            self.explosionSound.play()
                            break
Ejemplo n.º 16
0
import sys
import os
import time
import Spaceship
import Alien
import math
import Missile
import pygame
from pygame.locals import *
from random import randint
from pygame.time import *
from pygame.font import *

spaceship = Spaceship.ship()
alien = Alien.alien()
missile1 = Missile.Missile1()
missile2 = Missile.Missile2()


class Board:
    def __init__(self):
        pygame.init()
        pygame.display.set_caption("Space Invaders")
        self.score = 0
        alien.spawn()
        self.printboard()

    def printboard(self):

        screen = pygame.display.set_mode((600, 400))
        screen.fill((255, 255, 255))
Ejemplo n.º 17
0
import D3QN
import Missile
import pygame
from pygame.locals import *
import math
import numpy as np

env = Missile.MissileAI()

RL_B = D3QN.DQN(env.action_dim,
                env.state_dim,
                load=True,
                id='A',
                dueling=True,
                double=True,
                units=50,
                train=False)


class Game(object):
    def __init__(self):
        self.AI = RL_B  # 人工智能选手
        self.env = env  # 环境
        self.time_stop = 200  # 每隔多少时间刷新
        self.ai_mode = None  # 人工智能与人对战或者与电脑

        self.width = 640
        self.height = 480
        pygame.init()  # 初始化pygame
        self.font = pygame.font.SysFont("simsunnsimsun", 30)
        self.font_mini = pygame.font.SysFont("simsunnsimsun", 15)
Ejemplo n.º 18
0
    def updatePlaying(self, gametime):
        events = pygame.event.get()

        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    self.rocketXPos = self.rocketXPos + 6
                elif event.key == pygame.K_LEFT:
                    self.rocketXPos = self.rocketXPos - 6
                elif event.key == pygame.K_SPACE:
                    self.missileFired = Missile.Missile(self.rocketXPos, 650)
                    self.shootSound.play()

        isInvaderRemaining = False
        for row in range(5):
            for col in range(11):
                if self.invaders[row][col] != None:
                    isInvaderRemaining = True
                    break
        if isInvaderRemaining == False:
            self.gameState = 3
            return

        if self.missileFired != None:
            self.missileFired.move()

        if self.rocketXPos < 100:
            self.rocketXPos = 100

        if self.rocketXPos > 924:
            self.rocketXPos = 924

        self.ticks = self.ticks + gametime

        if self.ticks > 500:
            for row in range(5):
                for col in range(11):
                    if self.invaders[row][col] != None:
                        self.invaders[row][col].moveHorizontal(
                            self.alienSpeed * self.alienDirection)
                        #plays the alien move sound
                        self.moveSound.play()

            leftMostInvader = None
            rightMostInvader = None

            for row in range(1):
                for col in range(11):
                    if self.invaders[row][col] != None:
                        leftMostInvader = self.invaders[row][col]
                        break

            for row in range(1):
                for col in range(10, -1, -1):
                    if self.invaders[row][col] != None:
                        rightMostInvader = self.invaders[row][col]
                        break

            if leftMostInvader.getPosX() < 96:
                self.alienDirection = +1
                self.alienSpeed = self.alienSpeed * 1.01  # speeds up rows as they go down more

                for row in range(5):
                    xPos = 96
                    for col in range(11):
                        if self.invaders[row][col] != None:
                            self.invaders[row][col].moveVertical(8)
                            self.invaders[row][col].setPosX(xPos)
                        xPos = xPos + self.invaderImg.get_width()

            if rightMostInvader.getPosX() > 924:
                self.alienDirection = -1
                self.alienSpeed = self.alienSpeed * 1.01  # speeds up rows as they go down more

                for row in range(5):
                    xPos = 924 - self.invaderImg.get_width() * 10
                    for col in range(11):
                        if self.invaders[row][col] != None:
                            self.invaders[row][col].moveVertical(8)
                            self.invaders[row][col].setPosX(xPos)
                        xPos = xPos + self.invaderImg.get_width()

            self.ticks = 0
        #Collision Detected
        if self.missileFired != None:
            rectMissile = pygame.Rect(self.missileFired.getPosX(), self.missileFired.getPosY(), \
                                      self.missileImg.get_width(), self.missileImg.get_height())
            for row in range(5):
                for col in range(11):
                    if self.invaders[row][col] != None:
                        rectInvader = pygame.Rect(self.invaders[row][col].getPosX(), self.invaders[row][col].getPosY(),\
                                              self.invaderImg.get_width(), self.invaderImg.get_height())

                        rectBase = pygame.Rect((0, 650), (1024, 650))
                        #end game if alien reaches launcher
                        if rectInvader.colliderect(rectBase):
                            self.gameState = 3

                    #If missile collides with Invader
                    if rectMissile.colliderect(rectInvader):
                        self.missileFired = None
                        self.invaders[row][col] = None
                        #self.alienSpeed = self.alienSpeed * 10 # speeds up aliens everytime 1 is shot
                        #sets the score for hitting an alien
                        self.playerScore = self.playerScore + 10
                        #plays the explosion sound effect as the alien is killed
                        self.explosionSound.play()
                        break