喜欢的点个赞支持一下哦

联系方式见评论区--------------欢迎大家一起探讨-----------------------------------------------------------------

具体的代码:
settings配置
import pygame

class Settings(object):
    """设置常用的属性"""

def __init__(self):
        self.bgImage = pygame.image.load('img/background.png')  # 背景图

self.bgImageWidth = self.bgImage.get_rect()[2]  # 背景图宽
        self.bgImageHeight = self.bgImage.get_rect()[3]  # 背景图高
        self.start=pygame.image.load("img/start.png")
        self.pause=pygame.image.load("img/pause.png")
        self.gameover=pygame.image.load("img/gameover.png")
        self.heroImages = ["img/hero.gif",
                           "img/hero1.png", "img/hero2.png"]  # 英雄机图片
        self.airImage = pygame.image.load("img/enemy0.png") # airplane的图片
        self.beeImage = pygame.image.load("img/bee.png") # bee的图片
        self.heroBullet=pygame.image.load("img/bullet.png")# 英雄机的子弹
飞行物类
import abc

class FlyingObject(object):
    """飞行物类,基类"""

def __init__(self, screen, x, y, image):
        self.screen = screen
        self.x = x
        self.y = y
        self.width = image.get_rect()[2]
        self.height = image.get_rect()[3]
        self.image = image

@abc.abstractmethod
    def outOfBounds(self):
        """检查是否越界"""
        pass

@abc.abstractmethod
    def step(self):
        """飞行物移动一步"""
        pass

def shootBy(self, bullet):
        """检查当前飞行物是否被子弹bullet(x,y)击中"""
        x1 = self.x
        x2 = self.x + self.width
        y1 = self.y
        y2 = self.y + self.height
        x = bullet.x
        y = bullet.y
        return x > x1 and x < x2 and y > y1 and y < y2

def blitme(self):
        """打印飞行物"""
        self.screen.blit(self.image, (self.x, self.y))
英雄机
from flyingObject import FlyingObject
from bullet import Bullet
import pygame

class Hero(FlyingObject):
    """英雄机"""
    index = 2  # 标志位
    def __init__(self, screen, images):

# self.screen = screen
        
        self.images = images  # 英雄级图片数组,为Surface实例
        image = pygame.image.load(images[0])
        x = screen.get_rect().centerx
        y = screen.get_rect().bottom
        super(Hero,self).__init__(screen,x,y,image)
        self.life = 3  # 生命值为3
        self.doubleFire = 0  # 初始火力值为0

def isDoubleFire(self):
        """获取双倍火力"""
        return self.doubleFire

def setDoubleFire(self):
        """设置双倍火力"""
        self.doubleFire = 40

def addDoubleFire(self):
        """增加火力值"""
        self.doubleFire += 100
    def clearDoubleFire(self):
        """清空火力值"""
        self.doubleFire=0

def addLife(self):
        """增命"""
        self.life += 1
    
    def sublife(self):
        """减命"""
        self.life-=1
   
    def getLife(self):
        """获取生命值"""
        return self.life
    def reLife(self):
        self.life=3
        self.clearDoubleFire()

def outOfBounds(self):
        return False

def step(self):
        """动态显示飞机"""
        if(len(self.images) > 0):
            Hero.index += 1
            Hero.index %= len(self.images)
            self.image = pygame.image.load(self.images[int(Hero.index)])  # 切换图片

def move(self, x, y):
        self.x = x - self.width / 2
        self.y = y - self.height / 2

def shoot(self,image):
        """英雄机射击"""
        xStep=int(self.width/4-5)
        yStep=20
        if self.doubleFire>=100:
            heroBullet=[Bullet(self.screen,image,self.x+1*xStep,self.y-yStep),Bullet(self.screen,image,self.x+2*xStep,self.y-yStep),Bullet(self.screen,image,self.x+3*xStep,self.y-yStep)]
            self.doubleFire-=3
            return heroBullet
        elif self.doubleFire<100 and self.doubleFire > 0:
            heroBullet=[Bullet(self.screen,image,self.x+1*xStep,self.y-yStep),Bullet(self.screen,image,self.x+3*xStep,self.y-yStep)]
            self.doubleFire-=2
            return heroBullet
        else:
            heroBullet=[Bullet(self.screen,image,self.x+2*xStep,self.y-yStep)]
            return heroBullet

def hit(self,other):
        """英雄机和其他飞机"""
        x1=other.x-self.width/2
        x2=other.x+self.width/2+other.width
        y1=other.y-self.height/2
        y2=other.y+self.height/2+other.height
        x=self.x+self.width/2
        y=self.y+self.height
        return x>x1 and x<x2 and y>y1 and y<y2
enemys
import abc

class Enemy(object):
    """敌人,敌人有分数"""
    @abc.abstractmethod
    def getScore(self):
        """获得分数"""
        pass
award
import abc

class Award(object):
    """奖励"""
    DOUBLE_FIRE = 0
    LIFE = 1

@abc.abstractmethod
    def getType(self):
        """获得奖励类型"""
        pass

if __name__ == '__main__':

print(Award.DOUBLE_FIRE)
airplane
import random
from flyingObject import FlyingObject
from enemy import Enemy

class Airplane(FlyingObject, Enemy):
    """普通敌机"""

def __init__(self, screen, image):

x = random.randint(0, screen.get_rect()[2] - 50)
        y = -40
        super(Airplane, self).__init__(screen, x, y, image)

def getScore(self):
        """获得的分数"""
        return 5

def outOfBounds(self):
        """是否越界"""

return self.y < 715

def step(self):
        """移动"""
        self.y += 3  # 移动步数
Bee
import random
from flyingObject import FlyingObject
from award import Award

class Bee(FlyingObject, Award):

def __init__(self, screen, image):
        x = random.randint(0, screen.get_rect()[2] - 60)
        y = -50
        super(Bee, self).__init__(screen, x, y, image)
        self.awardType = random.randint(0, 1)
        self.index = True

def outOfBounds(self):
        """是否越界"""
        return self.y < 715

def step(self):
        """移动"""
        if self.x + self.width > 480:
            self.index = False
        if self.index == True:
            self.x += 3
        else:
            self.x -= 3
        self.y += 3  # 移动步数

def getType(self):
        return self.awardType
主类
```python
import pygame
import sys
import random
from setting import Settings
from hero import Hero
from airplane import Airplane
from bee import Bee
from enemy import Enemy
from award import Award

START=0
RUNNING=1
PAUSE=2
GAMEOVER=3
state=START
sets = Settings()
screen = pygame.display.set_mode(
(sets.bgImageWidth, sets.bgImageHeight), 0, 32) #创建窗口
hero=Hero(screen,sets.heroImages)
flyings=[]
bullets=[]
score=0
def hero_blitme():
"""画英雄机"""
global hero
hero.blitme()

def bullets_blitme():
"""画子弹"""
for b in bullets:
b.blitme()

def flyings_blitme():
"""画飞行物"""
global sets
for fly in flyings:
fly.blitme()

def score_blitme():
"""画分数和生命值"""
pygame.font.init()
fontObj=pygame.font.Font("SIMYOU.TTF", 20) #创建font对象
textSurfaceObj=fontObj.render(u'生命值:%d\n分数:%d\n火力值:%d'%(hero.getLife(),score,hero.isDoubleFire()),False,(135,100,184))
textRectObj=textSurfaceObj.get_rect()
textRectObj.center=(300,40)
screen.blit(textSurfaceObj,textRectObj)

def state_blitme():
"""画状态"""
global sets
global state
if state==START:
screen.blit(sets.start, (0,0))
elif state==PAUSE:
screen.blit(sets.pause,(0,0))
elif state== GAMEOVER:
screen.blit(sets.gameover,(0,0))

def blitmes():
"""画图"""
hero_blitme()
flyings_blitme()
bullets_blitme()
score_blitme()
state_blitme()

def nextOne():
"""生成敌人"""
type=random.randint(0,20)
if type<4:
return Bee(screen,sets.beeImage)
elif type==5:
return Bee(screen,sets.beeImage) #本来准备在写几个敌机的,后面没找到好看的图片就删了
else:
return Airplane(screen,sets.airImage)

flyEnteredIndex=0
def enterAction():
"""生成敌人"""
global flyEnteredIndex
flyEnteredIndex+=1
if flyEnteredIndex%40==0:
flyingobj=nextOne()
flyings.append(flyingobj)

shootIndex=0
def shootAction():
"""子弹入场,将子弹加到bullets"""
global shootIndex
shootIndex +=1
if shootIndex % 10 ==0:
heroBullet=hero.shoot(sets.heroBullet)
for bb in heroBullet:
bullets.append(bb)

def stepAction():
"""飞行物走一步"""

hero.step()
for flyobj in flyings:
    flyobj.step()
global bullets
for b in bullets:       
    b.step()
def outOfBoundAction():
"""删除越界的敌人和飞行物"""
global flyings
flyingLives=[]
index=0
for f in flyings:
if f.outOfBounds()==True:
flyingLives.insert(index,f)
index+=1
flyings=flyingLives
index=0
global bullets
bulletsLive=[]
for b in bullets:
if b.outOfBounds()==True:
bulletsLive.insert(index,b)
index+=1
bullets=bulletsLive

j=0
def bangAction():
"""子弹与敌人碰撞"""
for b in bullets:
bang(b)

def bang(b):
"""子弹与敌人碰撞检测"""
index=-1
for x in range(0,len(flyings)):
f=flyings[x]
if f.shootBy(b):
index=x
break
if index!=-1:
one=flyings[index]
if isinstance(one,Enemy):
global score
score+=one.getScore() # 获得分数
flyings.remove(one) # 删除

if isinstance(one,Award):
        type=one.getType()
        if type==Award.DOUBLE_FIRE:
            hero.addDoubleFire()
        else:
            hero.addLife()
        flyings.remove(one)

bullets.remove(b)
def checkGameOverAction():
if isGameOver():
global state
state=GAMEOVER
hero.reLife()

def isGameOver():
for f in flyings:
if hero.hit(f):
hero.sublife()
hero.clearDoubleFire()
flyings.remove(f)

return hero.getLife()<=0
def action():
x, y = pygame.mouse.get_pos()

blitmes()  #打印飞行物 
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        sys.exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        flag=pygame.mouse.get_pressed()[0] #左键单击事件
        rflag=pygame.mouse.get_pressed()[2] #右键单击事件
        global state
        if flag==True and (state==START or state==PAUSE):
            state=RUNNING
        if flag==True and state==GAMEOVER:
            state=START
        if rflag==True:
            state=PAUSE

if state==RUNNING:
    hero.move(x,y)  
    enterAction()
    shootAction()
    stepAction()      
    outOfBoundAction()
    bangAction()
    checkGameOverAction()

def main():

pygame.display.set_caption("飞机大战")

while True:
    screen.blit(sets.bgImage, (0, 0))  # 加载屏幕

action()
    pygame.display.update()  # 重新绘制屏幕
    # time.sleep(0.1)       # 过0.01秒执行,减轻对cpu的压力
if name == 'main':
main()

``` 写这个主要是练习一下python,把基础打实些。pygame的文本书写是没有换行,得在新建一个对象去写,为了简单我把文本都书写在了一行。

python飞机大战源代码(可直接运行)相关推荐

  1. Python飞机大战源代码

    pygame飞机大战源代码 文章目录 pygame飞机大战源代码 一.注意事项 二.plane_sprites 三.plane_main 四. 总结 一.注意事项 注意:将本源码复制粘贴到pychar ...

  2. python飞机大战源代码-制作python程序windows安装包(飞机大战源码)

    本文以飞机大战源码为例: 1.首先使用pyinstaller -w xxx.py打包 -w的意思是不显示命令行:飞机大战源码由多个.py文件以及一些图片,音乐文件组成,我们将main.py打包, 其他 ...

  3. python飞机大战源代码-python版飞机大战代码分享

    利用pygame实现了简易版飞机大战.源代码如下: # -*- coding:utf-8 -*- import pygame import sys from pygame.locals import ...

  4. Python飞机大战 源代码+素材

    emmmmm 今天 终于把小甲鱼的飞机大战敲完了, 真累啊 你是不知道 小甲鱼动不动就悄悄的改代码 结果他的能用 我的全错 还得我一点一点好好改 到了最后 直接不敲了 全复制粘贴 下面是我花了半个月敲 ...

  5. python飞机大战源代码-python飞机大战源码和素材

    1 importpygame2 from plane_sprites import * 3 4 5 classPlaneGame(object):6 """飞机大战主游戏 ...

  6. python飞机大战源代码百度云_python飞机大战添加音效和计分源代码

    然后,将下面代码复制到zcx.py中. import pygame import time import os from plane_sprites import * class PlaneGame( ...

  7. python飞机大战没有运行界面_python3实现飞机大战

    本文实例为大家分享了python3实现飞机大战的具体代码,供大家参考,具体内容如下 以下是亲测Python飞机大战全部代码,在保证有pygame环境支持并且有Python3解释器的话完全没问题! 如果 ...

  8. python飞机大战设计思路_python飞机大战pygame游戏背景设计详解

    本文实例讲述了python飞机大战pygame游戏背景设计.分享给大家供大家参考,具体如下: 目标 背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确定 运行 备课代码,观察 背景图像 ...

  9. python飞机大战联网版_Python 飞机大战搞怪版本

    python 飞机大战搞怪版本 (飞机为迷你亚索,外星人为迷你小诺手,由于时间关系和图片素材较难寻找,仅仅做了简易版,没有贴上背景图片.由于篇幅原因,对于函数讲解较为简略,可以自行搜索相应函数的用法) ...

最新文章

  1. 深入理解 Spring Cloud 核心组件与底层原理!
  2. Python实现单链表
  3. 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计...
  4. 菜鸟学Linux 第033篇笔记 bootloader,inittab
  5. 关于realarm210 realarmTest.apk不能直接安装问题解决方法
  6. 搭建K8s集群(kubeadm方式)-部署node节点和集群测试
  7. 这里有一份面筋请查收(五)
  8. 新入驻博客园立一个flag
  9. ​css3属性选择器总结
  10. WordPress 默认主题自定义页面模板
  11. LeetCode 315. 计算右侧小于当前元素的个数(Count of Smaller Numbers After Self)
  12. [POJ 1273]Drainage Ditches
  13. 计算机仿真实训操作开车步骤,计算机仿真上机实训指导书.doc
  14. [笔记].浅析在Nios II中的两种寄存器映射方法的异同
  15. [转]WF事件驱动(1)
  16. atititi.soa  微服务 区别 联系 优缺点.doc
  17. Android,保存图片并通知系统更新相册
  18. qiankun 2.x 运行时沙箱 源码分析
  19. 如何在H5页面上添加音乐播放
  20. Warframe Rank考核

热门文章

  1. 一周上线百万高并发系统!你给我解释解释什么叫牛逼?
  2. 在vue中使用antV-G2展示柱状图
  3. 动手玩转Scratch2.0编程pdf
  4. 常见的数据库有哪些(关系型、非关系型)?
  5. Wireshark分析SSL协议
  6. 6年手工测试拿8.5k,我要学习自动化测试吗?
  7. English Learning - L3 Lesson3 VOA-Food 译文
  8. 关于childNodes和children区别
  9. hive sql 求周几
  10. PyQt5 将.ui文件转为.py文件并用另一个.py调用