300行代码,教你用Python写个飞机大战

本文介绍了如何使用Python的pygame库,通过300行代码实现一个飞机大战小游戏。作者详细讲解了思路框架,包括plane_sprite.py和plane_main.py两个主要文件的内容,涉及游戏精灵的创建、事件监听、碰撞检测等关键功能。文章适合有一定Python基础的读者,旨在通过实践提升编程技能。
摘要由CSDN通过智能技术生成

 闲赋在家,甚是无聊,便萌发了研究经典小游戏:飞机大战的念头,想必大家可能玩过微信的这款小游戏,给我的感觉是这款游戏怎么可以做得这么好呢,操作简单,容易上手,简直是“老少皆宜”啊~

既然这款游戏这么棒,能否自己动手用 Python 来实现呢?事实证明是可以的。

先来看下飞机大战游戏最终实现的动态效果图。

文章末尾下方获取 

一. 动态效果图

二. 思路框架
plane_sprite.py文件内容
1.导入需要使用的模块
import random
import pygame

在导入pygame之前,需要先使用命令:

pip install pygame

进行包模块的安装

2.设置屏幕大小和刷新帧率等常量
3.创建继承于pygame.sprite.Sprite的基类GameSprite
4.创建继承于GameSprite的子类
  • Background背景子类

  • Enemy敌机子类

  • Hero英雄子类

  • Bullet子弹子类

plane_main.py文件内容
1. 导入plane_sprite.py文件中所有内容
2. 创建继承于Object的飞机大战主游戏类PlaneGame

(1). __init__初始化方法:

进行游戏开始的初始化操作,包含:创建游戏窗口,创建游戏的敌机,背景等精灵

(2). __create_sprites创建精灵方法:

负责创建不同角色的精灵,并将其添加至精灵组

(3). start_game游戏开始方法:

负责播放背景音乐,使用while循环来设置刷新帧率、事件监听、碰撞检测、更新绘制精灵组、更新显示屏幕图像

(4). __event_handler事件监听方法:

负责监听用户在游戏界面的操作,例如:关闭游戏窗口,左右方向键的移动等

(5). __check_collide碰撞检测方法:

负责检测子弹是否碰撞到敌机,敌机是否碰撞到英雄飞机,然后做出相应的操作

(6). __update_sprites更新精灵方法:

负责各个角色精灵的更新并绘制到屏幕,展示给用

好的,以下是一个简单的飞机大战游戏代码: ```python import pygame import random # 初始化 pygame.init() # 游戏窗口大小 WIDTH 480 HEIGHT = 600 # 创建游戏窗口 screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 标题和图标 pygame.display.set_caption("飞机大战") icon = pygame.image.load("icon.png") pygame.display.set_icon(icon) # 背景 background = pygame.image.load("background.png") # 飞机 player_img = pygame.image.load("player.png") player_x = WIDTH // 2 - 32 player_y = HEIGHT - 96 player_speed = 5 # 子弹 bullet_img = pygame.image.load("bullet.png") bullet_speed = 10 bullet_list = [] # 敌机 enemy_img = pygame.image.load("enemy.png") enemy_list = [] enemy_speed = 5 enemy_spawn_rate = 50 # 飞机函数 def draw_player(x, y): screen.blit(player_img, (x, y)) # 子弹函数 def draw_bullet(x, y): screen.blit(bullet_img, (x, y)) # 敌机函数 def draw_enemy(x, y): screen.blit(enemy_img, (x, y)) # 检测碰撞 def is_collision(x1, y1, x2, y2): distance = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 if distance < 64: return True else: return False # 游戏循环 running = True while running: # 背景色 screen.fill((0, 0, 0)) # 背景图片 screen.blit(background, (0, 0)) # 事件循环 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 键盘操作 if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x -= player_speed if event.key == pygame.K_RIGHT: player_x += player_speed if event.key == pygame.K_SPACE: bullet_list.append([player_x + 32, player_y - 32]) # 移动飞机 if player_x < 0: player_x = 0 elif player_x > WIDTH - 64: player_x = WIDTH - 64 # 移动子弹 for bullet in bullet_list: bullet[1] -= bullet_speed draw_bullet(bullet[0], bullet[1]) # 生成敌机 if random.randint(0, 100) < enemy_spawn_rate: enemy_list.append([random.randint(0, WIDTH - 64), 0]) # 移动敌机 for enemy in enemy_list: enemy[1] += enemy_speed draw_enemy(enemy[0], enemy[1]) # 检测碰撞 if is_collision(enemy[0], enemy[1], player_x, player_y): running = False # 检测子弹击中敌机 for bullet in bullet_list: if is_collision(enemy[0], enemy[1], bullet[0], bullet[1]): bullet_list.remove(bullet) enemy_list.remove(enemy) # 绘制飞机 draw_player(player_x, player_y) # 更新窗口 pygame.display.update() # 退出游戏 pygame.quit() ``` 注意:代码中的图片和图标需要自己准备,并且放在与代码文件相同的目录下。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值