python 飞机大战

第一个自己做的python小游戏

import pygame
import random
import math
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("fight game2021")
icon=pygame.image.load('D:/resource/icon.jpg')
bgImg=pygame.image.load('D:/resource/bg.jpg')
playerImg=pygame.image.load('D:/resource/player.png')
enemyImg=pygame.image.load('D:/resource/enemy.png')
playerX=400
playery=500
playerStep=0
pygame.mixer.music.load('D:/resource/bgm.mp3')
pygame.mixer.music.play(-1)
bomb_sound=pygame.mixer.Sound('D:/resource/exp.wav')
# enemyStep=0.2
# enemyX=random.randint(200,600)
# enemyY=random.randint(50,200)
pygame.display.set_icon(icon)
running=True
number_of_enemy=15
score=0
font = pygame.font.Font('freesansbold.ttf',32)
is_over=False
def check_over():
    if is_over:
        text='GAME OVER'
        render=font.render(text,True,(255,102,102))
        screen.blit(render,(300,300))
def show_score():
    text=f'score:{score}'
    score_render=font.render(text,True,(255,255,102))
    screen.blit(score_render,(10,10 ))
class Enemy():
    def __init__(self):
        self.img=pygame.image.load('D:/resource/enemy.png')
        self.x=random.randint(200,600)
        self.y=random.randint(50,200)
        self.step=random.randint(1,3)
    def reset(self):
        self.x = random.randint(200, 600)
        self.y = random.randint(50, 200)

enemys=[]
class Bullet():
    def __init__(self):
        self.img=pygame.image.load('D:/resource/bullet.png')
        self.x=playerX+16
        self.y=playery-10
        self.step=1
    def hit(self):
        global  score
        for e in enemys:
            if distance(self.x,self.y,e.x,e.y)<30:
                bomb_sound .play()
                score+=1
                bullets.remove(self)
                e.reset()

# for i in range(5):
bullets=[]
for i in range(number_of_enemy):
    enemys.append(Enemy())
def show_enemy():
    global is_over
    # global enemyX,enemyStep,enemyY
    for e in enemys:
        screen.blit(e.img,(e.x,e.y))
        e.x+=e.step*0.1
        if e.x > 736 or e.x<0:
            e.step *=-1
            e.y +=100
            if e.y>450:
                is_over=True
                enemys.clear()



def move_player():
    global playerX
    playerX += playerStep
    if playerX > 736:
        playerX = 736
    if playerX < 0:
        playerX = 0


def show_bullet():
    for b in bullets:
        b.hit()
        screen.blit(b.img,(b.x,b.y))
        b.y-=b.step
        if b.y<0:
            bullets.remove(b)

def distance(bx,by,ex,ey):
    a=bx-ex
    b=by-ey
    return  math.sqrt(a*a+b*b)

while running:
    screen.blit(bgImg,(0,0))
    show_score()
    for even in pygame.event.get():
        if even.type==pygame.QUIT:
            running=False
        if even.type==pygame.KEYDOWN:
            if even.key==pygame.K_RIGHT:
                playerStep=0.9
            elif even.key==pygame.K_LEFT:
                playerStep=-0.9
            elif even.key==pygame.K_SPACE:


                bullets.append(Bullet())
        if even.type==pygame.KEYUP:
            playerStep=0
    screen.blit(playerImg,(playerX,playery))
    move_player()
    # playerX+=playerStep
    # if playerX>736:
    #     playerX=736
    # if playerX<0:
    #     playerX=0
    show_bullet()
    show_enemy()
    check_over()
    pygame.display.update()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值