猫史档案馆


【金鑫工作室】Python飞机大战源代码

用户:小熊与雪小熊与雪查看:0 回复:0 评论:0 创建时间:2021-01-12T22:00:18


工作室连接:https://shequ.codemao.cn/work_shop/4939

Python飞机大战公开源代码了!

你看不看得动本者就不管了……

素材和教程公开在“金鑫工作室”qq群!

#初始化游戏
import pygame
import sys
import random
import time
pygame.init() 
canvas = pygame.display.set_mode((480, 852))
pygame.display.set_caption("飞机大战")
canvas.fill((255, 255, 255))
#导入图片
bg = pygame.image.load("images/bg1.png")
enemy1 = pygame.image.load("images/enemy1.png")
enemy2 = pygame.image.load("images/enemy2.png")
enemy3 = pygame.image.load("images/enemy3.png")
h = pygame.image.load("images/hero.png")
b = pygame.image.load("images/bullet1.png")
stop = pygame.image.load("images/game_pause_nor.png")
LOGO = pygame.image.load("images/LOGO.png")
startGame = pygame.image.load("images/startGame.png")
#鼠标退出函数
def isMouseOut(x,y):
    if x>479 or x<=0 or y>=喵9 or y<=0:
        return True
    else:
        return False
def isMouseOver(x, y):
    if x > 1 or x <= 479 or y > 1 or y < 喵9:
        return True
    else:
        return False
#退出函数
def handleEvent():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEMOTION:
            GameVar.hero.x = event.pos[0]-GameVar.hero.width/2
            GameVar.hero.y = event.pos[1]-GameVar.hero.height/2
            if isMouseOut(event.pos[0], event.pos[1]):
                if GameVar.state == GameVar.STATES['RUNNING']:
                    GameVar.state = GameVar.STATES['PAUSE']
            if isMouseOver(event.pos[0], event.pos[1]):
                if GameVar.state == GameVar.STATES['PAUSE']:
                    GameVar.state = GameVar.STATES['RUNNING']
        if event.type==pygame.MOUSEBUTTONDOWN and event.button==1:
            if GameVar.state == 1:
                GameVar.state = GameVar.STATES['RUNNING']
#时间间隔函数
def isActionTime(lastTime,insert):
    if lastTime == 0:
        return True
    newTime = time.time()
    return newTime - lastTime >= insert
#碰撞函数
def bong(a,b):
    if a.x > b.x-a.width and a.x < b.x+a.width+b.width and a.y > b.y-a.height and a.y < b.y+a.height+b.height:
        return True
    else:
        return False
#背景类
class Bg():
    width = 480
    height = 852
    def __init__(self):
        self.img = bg
        self.x1 = 0
        self.x2 = 0
        self.y1 = 0
        self.y2 = -Bg.height
    def step(self):
        self.y1 = self.y1+1
        self.y2 = self.y2+1
        if self.y1 > Bg.height:
            self.y1 = -Bg.height
        if self.y2 > Bg.height:
            self.y2 = -Bg.height
    def paint(self):
        canvas.blit(self.img, (self.x1, self.y1))
        canvas.blit(self.img, (self.x2, self.y2))
#敌机类
class Enemy():
    def __init__(self,x,y,width,height,life,score,img):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.life = life
        self.score = score
        self.img = img
    def paint(self):
        canvas.blit(self.img,(self.x,self.y))
    def step(self):
        self.y = self.y + 2
#英雄类
class Hero():
    def __init__(self,x,y,width,height,life,img):
        self.width = width
        self.height = height
        self.x = (Bg.width+self.width)/2
        self.y = (Bg.height+self.height)/2
        self.life = life
        self.img = img
        self.shootLastTime = 0
        self.shootInsert = 0.3
    def paint(self):
        canvas.blit(self.img, (self.x, self.y))
    def shoot(self):
        if isActionTime(self.shootLastTime, self.shootInsert):
            self.shootLastTime = time.time()
            GameVar.bullets.append(Bullet(self.x+(self.width-9)/2, self.y-21, 9, 21, 1, b))
#子弹类
class Bullet():
    def __init__(self, x, y, width, height, life, img):
        self.width = width
        self.height = height
        self.x = x
        self.y = y
        self.life = life
        self.img = img
    def paint(self):
        canvas.blit(self.img, (self.x, self.y))
    def step(self):
        self.y = self.y - 2
#游戏数据类
class GameVar():
    #创建背景角色
    sky = Bg()
    #创建敌机列表
    enemies = []
    #敌机创建时间
    enemyLastTime = 0
    enemyInsert = 2
    #飞行物重绘时间
    allLastTime = 0
    allInsert = 0.04
    #英雄机
    hero = Hero(0,0,60,75,1,h)
    #创建子弹列表
    bullets = []
    #分数生命
    score = 0
    life = 1
    #游戏状态
    STATES ={'STATE':1,'RUNNING':2,'PAUSE':3,'GAME_OVER':4}
    state = STATES['STATE']
#添加所有图片函数
def allEnter():
    #添加飞机
    if isActionTime(GameVar.enemyLastTime, GameVar.enemyInsert):
        GameVar.enemyLastTime = time.time()
        a = random.randint(1,100)
        x1 = random.randint(0, Bg.width-57)
        y1 = -45
        x2 = random.randint(0, Bg.width-50)
        y2 = -68
        x3 = random.randint(0, Bg.width-100)
        y3 = -153
        if a >= 95:
            GameVar.enemies.append(Enemy(x3, y3, 100, 153, 10, 5, enemy3))
        elif a >= 80:
            GameVar.enemies.append(Enemy(x2, y2, 50, 68, 5, 3, enemy2))
        else:
            GameVar.enemies.append(Enemy(x1, y1, 57, 45, 3, 1, enemy1))
    #添加子弹
    GameVar.hero.shoot()
#写文字方法
def text(text,position,big):
    my_font = pygame.font.SysFont("微软雅黑",big)
    newText = my_font.render(text,True,(255,255,255))
    canvas.blit(newText,position)
#画所有图片函数
def allPaint():
    GameVar.sky.paint()
    for enemy in GameVar.enemies:
        enemy.paint()
    GameVar.hero.paint()
    for b in GameVar.bullets:
        b.paint()
    text('score:'+str(GameVar.score),(0,0),40)
    text('life:'+str(GameVar.life), (380, 0),40)

#移动所有图片函数
def allStep():
    GameVar.sky.step()
    for enemy in GameVar.enemies:
        enemy.step()
        if enemy.y > Bg.height:
            GameVar.enemies.remove(enemy)
        for b in GameVar.bullets:
            if bong(enemy,b):
                GameVar.bullets.remove(b)
                enemy.life -= 1
                if enemy.life <= 0:
                    GameVar.score += enemy.score
                    GameVar.enemies.remove(enemy)
        if bong(enemy,GameVar.hero):
            GameVar.enemies.remove(enemy)
            GameVar.life-=1
            if GameVar.life <= 0:
                GameVar.state = GameVar.STATES['GAME_OVER']
    for b in GameVar.bullets:
        b.step()
        if b.y < 0:
            GameVar.bullets.remove(b)
#运行函数
def gameUp():
    if GameVar.state == 1:
        GameVar.sky.paint()
        GameVar.sky.step()
        canvas.blit(LOGO,(-40,200))
        canvas.blit(startGame,(150,400))
    elif GameVar.state == 2:
        allStep()
        allPaint()
        allEnter()
    elif GameVar.state == 3:
        allPaint()
        canvas.blit(stop,(Bg.width/2,Bg.height/2))
    else:
        GameVar.sky.paint()
        GameVar.sky.step()
        text('GameOver',(60,320),100)

while True:
    gameUp()
    pygame.display.update()
    handleEvent()


回复

上一页1 页 / 共 0下一页