猫史档案馆


【Python作品分享】飞机大战【作品秀】

用户:@Bm4U@Bm4U查看:0 回复:1 评论:0 创建时间:2022-02-12T13:36:49


【作品展示】

center_image

 

【作品介绍】

......

 

【作品源代码】

'''
......
'''
import pygame
from pygame.locals import *
import sys
from ship import Ship, Bullet, Alien
from random import randint


class main:

    def __init__(self):

        pygame.init()
        pygame.mixer.init()
        self.screen = pygame.display.set_mode((950, 800))
        self.screen_rect = self.screen.get_rect()
        pygame.display.set_caption('灰机大战pygame版')
        self.clock = pygame.time.Clock()
        self.background = pygame.image.load('images/background.png').convert()
        self.background_rect = self.background.get_rect()
        self.background = pygame.transform.scale(self.background, (800, 800))
        self.screen.blit(self.background, (0, 0))
        self.ship = Ship(self)
        self.ship_group = pygame.sprite.Group(self.ship)
        self.bullets = pygame.sprite.Group()
        self.aliens = pygame.sprite.Group()
        self.alien_bullets = pygame.sprite.Group()
        self.boss = pygame.sprite.Group()
        self.move_right = False
        self.move_left = False
        self.max_bullets = 10
        self.max_num = 6
        self.ship.blood = 3
        self.ship.a = 1
        self.gold = 0
        self.print_text('Lives: ' + str(self.ship.blood),
                        50, 'white', (875, 20))
        self.print_text('Gold: ' + str(self.gold), 50, 'white', (875, 100))
        file = 'a_050xgw.mid'
        pygame.mixer.music.load(file)
        pygame.mixer.music.play(-1, 0.0)
        self.rand = 0
        self.boss_count = 0
        self.can_make = True
        self.game_over_count = 0
        self.can_make_B = True
        self.update()

    def update(self):
        while True:
            self.rand += 1
            self.boss_count += 1
            self.screen = pygame.display.set_mode((950, 800))
            self.screen.blit(self.background, (0, 0))
            self.print_text('Lives: ' + str(self.ship.blood),
                            50, 'white', (875, 20))
            self.print_text('Gold: ' + str(self.gold), 50, 'white', (875, 70))
            if self.boss_count >= 3600 and self.can_make_B:
                self.aliens.empty()
                self.big_boss = Alien(self, './images/enemy3.png', 50, 730)
                self.big_boss.blood = 60
                self.boss.add(self.big_boss)
                self.boss_count = 0
                self.can_make_B = False
                self.can_make = False
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == KEYDOWN:
                    if event.key == K_RIGHT:
                        self.move_right = True
                    elif event.key == K_LEFT:
                        self.move_left = True
                    if event.key == K_SPACE:
                        if len(self.bullets) < self.max_bullets:
                            self.bullet = Bullet(self)
                            self.bullets.add(self.bullet)
                    if event.key == K_q:
                        pygame.quit()
                        sys.exit()
                    elif event.key == K_a and self.gold >= 50:
                        self.ship.a += 0.5
                        self.gold -= 50
                elif event.type == KEYUP:
                    if event.key == K_RIGHT:
                        self.move_right = False
                    elif event.key == K_LEFT:
                        self.move_left = False
            if pygame.sprite.spritecollide(self.ship, self.aliens, True):
                self.ship.blood -= 1
                self.is_kill()
            if pygame.sprite.spritecollide(self.ship, self.boss, True):
                self.ship.blood -= 2
                self.is_kill()
            if self.rand >= 50 and len(self.aliens) < self.max_num and self.can_make:
                self.alien = Alien(self, './images/enemy.png', 40, 760)
                self.aliens.add(self.alien)
                self.rand = 0
            for bullet in self.bullets.sprites():
                bullet.update_bullet()
                bullet.draw_bullet()
                if bullet.rect.bottom <= self.screen_rect.top:
                    self.bullets.remove(bullet)
            for alien in self.aliens.sprites():
                alien.update_alien(1)
                alien.draw_alien()
                if alien.rect.bottom > self.screen_rect.bottom:
                    self.aliens.remove(alien)
                    self.ship.blood -= 1
                    self.is_kill()
            for boss in self.boss.sprites():
                boss.update_alien(0.6)
                boss.draw_alien()
                if boss.rect.bottom > self.screen_rect.bottom:
                    self.boss.remove(boss)
                    self.ship.blood -= 2
                    self.is_kill()
            self.x = float(self.ship.rect.x)
            if self.move_right and self.ship.rect.right < 800:
                self.x += 7.5
            if self.move_left and self.ship.rect.x > 0:
                self.x -= 7.5
            for bullet_ in self.bullets.sprites():
                for alien_ in self.aliens.sprites():
                    boom = pygame.sprite.collide_rect_ratio(
                        0.85)(bullet_, alien_)
                    if boom:
                        self.bullets.remove(bullet_)
                        alien_.blood -= self.ship.a
                        if alien_.blood <= 0:
                            self.aliens.remove(alien_)
                            self.gold += 1
                for boss_ in self.boss.sprites():
                    boom_ = pygame.sprite.collide_rect(boss_, bullet_)
                    if boom_:
                        self.bullets.remove(bullet_)
                        boss_.blood -= self.ship.a
                        if boss_.blood <= 0:
                            self.boss.remove(boss_)
                            self.gold += 10
                            self.can_make_B = True
                            self.can_make = True
            self.ship.rect.x = self.x
            self.ship.draw_plane()
            self.clock.tick(60)
            pygame.display.flip()

    def is_kill(self):
        if self.ship.blood <= 0:
            self.aliens.empty()
            self.bullets.empty()
            self.ship.blood = 3
            self.gold = 0
            self.max_bullets = 10
            print('Lose!')

    def print_text(self, text, font_size, font_color, center):
        self.font = pygame.font.Font(None, font_size)
        self.text = self.font.render(text, True, font_color)
        self.rect = self.text.get_rect()
        self.rect.center = center
        self.screen.blit(self.text, self.rect)

    def game_over(self):
        self.print_text('You Lose!', 200, 'white', self.background_rect.center)
        self.game_over_count += 1


if __name__ == '__main__':
    main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
和谐0856和谐0856

哎,这个超经典的开发案例我到现在都搞不出来imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E4%BC%A4%E5%BF%83.gif"alt="emotion_编程猫_伤心",图片老是导入错误

点赞0


评论