Game Development 5 min read

Build a Classic Plane Shooter Game with Python and Pygame – Step‑by‑Step Guide

This tutorial shows how to recreate the classic WeChat airplane battle game using Python and Pygame, covering environment setup, player and enemy plane implementation, keyboard controls, bullet collision detection, and includes full source code and screenshots.

MaGe Linux Operations
MaGe Linux Operations
MaGe Linux Operations
Build a Classic Plane Shooter Game with Python and Pygame – Step‑by‑Step Guide

Remember the classic WeChat "Plane Battle" game? This article walks through recreating a similar airplane shooter using Python and Pygame.

Environment Setup

The game code is based on a simple Pygame project (version 1.0) and requires Python 3, PyCharm, the pygame module, and some built‑in modules.

pip install -i https://pypi.douban.com/simple/ pygame

Player Plane

def main():
    global is_hit
    global nums
    screen = pygame.display.set_mode((480, 852), 0, 32)
    background = pygame.image.load("./feiji/background.png")
    # 创建飞机
    hero = HeroPlane(screen)
    enermy_plane = EnermyPlane(screen)
    while True:
        global hero_nums
        global enermy_nums
        # 显示背景
        screen.blit(background, (0, 0))
        # 显示我方飞机
        hero.display()
        # 测试是否被子弹击中
        hero.test(enermy_plane.bullets)
        if hero.is_hit:
            hero_nums += 1
        if hero_nums == 10:
            hero.image = pygame.image.load("./feiji/hero_blowup_n1.png")
        elif hero_nums == 20:
            hero.image = pygame.image.load("./feiji/hero_blowup_n2.png")
        elif hero_nums == 30:
            hero.image = pygame.image.load("./feiji/hero_blowup_n3.png")
        elif hero_nums == 40:
            hero.image = pygame.image.load("./feiji/hero_blowup_n4.png")
        elif hero_nums > 50:
            break

Enemy Plane

# 显示敌飞机
enermy_plane.display()
enermy_plane.test(hero.bullets)
if enermy_plane.is_hit:
    enermy_nums += 1
if enermy_nums == 10:
    enermy_plane.image = pygame.image.load("./feiji/enemy0_down1.png")
elif enermy_nums == 20:
    enermy_plane.image = pygame.image.load("./feiji/enemy0_down2.png")
elif enermy_nums == 30:
    enermy_plane.image = pygame.image.load("./feiji/enemy0_down3.png")
elif enermy_nums == 40:
    enermy_plane.image = pygame.image.load("./feiji/enemy0_down4.png")
elif enermy_nums > 50:
    enermy_plane = EnermyPlane(screen)
    enermy_nums = 0
else:
    enermy_plane.move()
    enermy_plane.fire()
# 控制飞机左右
key_control(hero)
# 刷新屏幕
pygame.display.update()
# 程序休眠0.01秒
time.sleep(0.01)

Keyboard Control

def key_control(hero):
    for event in pygame.event.get():
        if event.type == QUIT:
            print("exit")
            exit()
        elif event.type == KEYDOWN:
            if event.key == K_a or event.key == K_LEFT:
                hero.move_left()
                print("left")
            elif event.key == K_d or event.key == K_RIGHT:
                hero.move_right()
                print("right")
            elif event.key == K_SPACE:
                hero.fire()
                print("space")

Bullet Collision Detection

class BasePlane(object):
    def __init__(self, screen, x, y, image):
        self.x = x
        self.y = y
        self.screen = screen
        self.image = pygame.image.load(image)
        self.is_hit = False  # 此标志用来表示飞机是否被击中了
        self.bullets = []
    def test(self, bullets):
        for bullet in bullets:
            if self.x < bullet.x < self.x + self.image.get_width() and \
               self.y < bullet.y < self.y + self.image.get_height():
                self.is_hit = True
# 检测子弹碰撞
for item in self.bullets:
    for bullet in bullets:
        if item.x < bullet.x < item.x + item.image.get_width() and \
           item.y < bullet.y < item.y + item.image.get_height():
            item.is_hit = True
            bullet.is_hit = True

Screenshots

Summary

The simple version runs infinitely without power‑ups or larger aircraft; further enhancements will be added later.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

PythonShooter
MaGe Linux Operations
Written by

MaGe Linux Operations

Founded in 2009, MaGe Education is a top Chinese high‑end IT training brand. Its graduates earn 12K+ RMB salaries, and the school has trained tens of thousands of students. It offers high‑pay courses in Linux cloud operations, Python full‑stack, automation, data analysis, AI, and Go high‑concurrency architecture. Thanks to quality courses and a solid reputation, it has talent partnerships with numerous internet firms.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.