Python 实例 - Day2 - Aircraft Fight 飞机大战 (进行中ing)

首先感谢@1_bit 大佬的教程, 源代码请移步下面链接. 本文是自己为了理解代码所做的注释.
https://blog.csdn.net/A757291228/article/details/116305295

功能: 可以用子弹消灭敌机, 无法碰撞敌机销毁.
还有代码没有读懂, 注释持续添加中.

# 2021.5.8
# refer to https://blog.csdn.net/A757291228/article/details/116305295

import pygame
# reset the path for your own file path!!!
bg = pygame.image.load(r'C:\aircraft_fight\img\bg.png')  
hero = pygame.image.load(r'C:\aircraft_fight\img\hero1.png')
enemy = pygame.image.load(r'C:\aircraft_fight\img\enemy1.png')
enemy_boom = pygame.image.load(r'C:\aircraft_fight\img\enemy1_down1.png')
bullet = pygame.image.load(r'C:\aircraft_fight\img\bullet1.png')


pygame.init()   # initialize all modules of pygame
screen = pygame.display.set_mode((600, 800))   # set the size of game window
pygame.display.set_caption("This is a aircraft fight game!") # set the title of the game window


heroX = 250  # the origination of hero on X axis
heroY = 680  # the origination of hero on Y axis
stepX = 0    # the extent of movement on X axis
stepY = 0    # the extent of movement on Y axis

enemy_speed = 2
enemy_objs = []
enemy_objs1 = []
enemy_objs2 = []
enemy_objs3 = []
bullets_pos =[]
bullet_speed =[]


def keydown_event(event, stepX, stepY, hero_pos):  # the movement of keyboard control
    bullet_pos = []
    if event.key == pygame.K_RIGHT:
        stepX =5
    elif event.key == pygame.K_LEFT:
        stepX =-5
    elif event.key == pygame.K_UP:
        stepY =-5
    elif event.key == pygame.K_DOWN:
        stepY =5
    elif event.key == pygame.K_SPACE:
        bullet_pos=[hero_pos[0],hero_pos[1]+10]
    return stepX, stepY, bullet_pos

def enemy_show(enemy_objs,startY =-40):
    if len(enemy_objs) < 5:
        while len(enemy_objs) < 5:
            enemy_X = random.randint(0,500)
            enemy_pos = [enemy_X, startY]
            screen.blit(enemy,enemy_pos)
            enemy_objs.append(enemy_pos)
    else:
        i = 0
        for pos in enemy_objs:
            screen.blit(enemy, pos)
            enemy_objs[i] = [pos[0],pos[1]+enemy_speed]
            i = i +1
    return enemy_objs

def screen_border(x,y):
    if x<0:
        x = 0
    elif x > 500:
        x = 500
    if y<0:
        y = 0
    elif y>700:
        y = 700
    return x, y


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


while True:
    bullet_pos_ = []
    heroX = heroX + stepX
    heroY = heroY + stepY
    heroX, heroY = screen_border(heroX, heroY)

    #blit function: draw one image onto another
    screen.blit(bg,(0, 0))  #draw the background image onto screen window
    screen.blit(hero, (heroX,heroY))  #draw the aircraft image onto screen window
    enemy_objs = enemy_show(enemy_objs)
    print(bullets_pos)

    i = 0
    for v in bullets_pos:
        bullets_pos[i] =[v[0], v[1]-10]
        screen.blit(bullet, (bullets_pos[i][0]+45, bullets_pos[i][1]))
        distance_b = [bullets_pos[i][0]+45, bullets_pos[i][1]]
        ei = 0
        for ep in enemy_objs:
            if distance(distance_b[0], distance_b[1],ep[0],ep[1])<60:
                print('\n\n\n\n\n\n\n\n\n\n\n boom')
                screen.blit(enemy_boom, (ep[0], ep[1]))
                enemy_objs[ei] = [random.randint(0,500),-50]
            ei = ei + 1
        i = i + 1


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        if event.type == pygame.KEYDOWN:
            stepX, stepY, bullet_pos_= keydown_event(event, stepX, stepY, [heroX, heroY])
            if len(bullet_pos_)>0:
                bullets_pos.append(bullet_pos_)

    pygame.display.update()  #need update to refresh game window

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值