pygame小项目 ~ 3 :Python完成简易飞机大战

pygame小项目 ~ 3 :Python完成简易飞机大战

子弹 敌机 我方战斗机全部采用图片

子弹击中和战斗机被击中全部采用碰撞检测

游戏的主函数代码

import spite
from spite import plane_game
if __name__ == '__main__':
    game = plane_game()
    game.strat_game()

采用pygame的精灵类完成游戏的运行

import pygame as pg
import random

import pygame.font

from plane_wars.Enemy_plane import *

class plane_game(object):
    def __init__(self):
        # 创建游戏窗口
        self.srceen = pg.display.set_mode(SRCEEN_RECT.size, flags = 1)
        # 创建时钟
        self.clock = pg.time.Clock()
        # 调用私有方法
        self.__creat_sprites()

        pygame.time.set_timer(CREAT_ENEMY_TIME, 1000)

        pg.time.set_timer(HERO_FIRE, 500)
        print("游戏初始化successily")

    def strat_game(self):
        print("游戏开始")

        while True:
            # 设置刷新率
            self.clock.tick(FRAME_TICT)

            # 事件监听
            self.__event_hear()

            # 碰撞检测
            self.__check_collide()

            # 更新敌机和战斗机等精灵组的
            self.__update_spites()
            print(pygame.font.get_default_font())
            # 更新游戏窗口
            pg.display.update()

    def __event_hear(self):
        for it in pg.event.get():
            if it.type == pg.QUIT:
                print("游戏结束")
                pg.quit()
                exit()
            elif it.type == CREAT_ENEMY_TIME:
                speed = random.randint(1, 3)
                x = random.randint(0, 423)
                enemy = Enemy("./plane_wars/imgs/images/enemy1.png", speed)
                enemy.rect.y, enemy.rect.x = -43, x
                self.enemy_group.add(enemy)
            elif it.type == HERO_FIRE:
                self.plane.fire()
        keys = pg.key.get_pressed()
        if keys[pg.K_RIGHT]:
            print("R")
            self.plane.rect.x += 2.5
        elif keys[pg.K_LEFT]:
            print("L")
            self.plane.rect.x -= 2.5
    def __creat_sprites(self):
        bg1 = background("./plane_wars/imgs/images/background.png")
        bg2 = background("./plane_wars/imgs/images/background.png")
        bg2.rect.y = -bg2.rect.height
        self.bg_group = pg.sprite.Group(bg1, bg2)

        self.enemy_group = pg.sprite.Group()

        self.plane = Plane()
        self.plane.rect.x, self.plane.rect.y = 220, 600
        self.plane_group = pg.sprite.Group(self.plane)
    #碰撞检测
    def __check_collide(self):
        pg.sprite.groupcollide(self.plane.bullets, self.enemy_group, True, True)
        e = pg.sprite.spritecollide(self.plane, self.enemy_group, True)
        if len(e) > 0:
            self.plane.kill()
            plane_game.gameover()
    def __update_spites(self):
        self.bg_group.draw(self.srceen)
        self.bg_group.update()

        self.enemy_group.draw(self.srceen)
        self.enemy_group.update()

        self.plane_group.draw(self.srceen)
        self.plane_group.update()

        self.plane.bullets.draw(self.srceen)
        self.plane.bullets.update()

    @staticmethod
    def gameover():
        print("游戏结束")
        pg.quit()
        exit(0)

敌机, 子弹对象全部采用sprite类产生,便于统一绘制、碰撞检测、和内存销毁

import pygame
SRCEEN_RECT = pygame.Rect(0, 0, 480, 700)
FRAME_TICT = 90
HERO_FIRE = pygame.USEREVENT + 1
# 创建时间常量
CREAT_ENEMY_TIME = pygame.USEREVENT
class Enemy_plane(pygame.sprite.Sprite):
    def __init__(self, picture_name, speed = 1):
        # 注意如果继承的弗雷不是基类,一定要调用父类的初始化方法,不然不能享受父类初始化中的东西
        super().__init__()
        self.image = pygame.image.load(picture_name)
        self.rect = self.image.get_rect()
        self.speed = speed
    def update(self) :
        self.rect.y += self.speed

class background(Enemy_plane):
    def update(self):
        super().update()
        if self.rect.y >= SRCEEN_RECT.height:
            self.rect.y = -SRCEEN_RECT.height

class Enemy(Enemy_plane):
    def update(self):
        super().update()
        if self.rect.y > SRCEEN_RECT.height:
            self.kill()
    def __del__(self):
        print("敌机已经被销毁")
class Plane(Enemy_plane):
    def __init__(self):
        super().__init__("E:\pycharm\pythonGames\plane_wars\imgs\images\life.png", 0)
        self.bullets = pygame.sprite.Group()

    def update(self):
        super().update()
        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.x > SRCEEN_RECT.width - self.rect.width:
            self.rect.x = SRCEEN_RECT.width - self.rect.width

    def fire(self):
        bulle = Bullet("E:\pycharm\pythonGames\plane_wars\imgs\images\\bullet2.png", -2)
        bulle.rect.y = self.rect.y - 10
        bulle.rect.x = self.rect.centerx
        self.bullets.add(bulle)
class Bullet(Enemy_plane):
    def update(self):
        super().update()
        if self.rect.y < -self.rect.bottom:
            self.kill()
    def __del__(self):
        print("子弹已经销毁")

还有积分等功能暂未实现

游戏界面

 

更新中~~~~~~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值