提供学习或者毕业设计使用,功能基本都有,不能和市场上正式游戏相提比论,请理性对待!
本博文将开启免费试读,如有您需要完整源码或者素材材料等,请订阅本专栏或者找博主购买!购买后将提供源码文件,包括1个月的免费维护工作!
目录
一、运行效果图
二、代码介绍
2.1 导入所需模块
2.2 定义敌机类
2.3 初始化pygame和设置游戏常量
2.4 加载游戏所需图片
2.5 创建游戏窗口和时钟对象
2.6 创建玩家飞机和存储子弹、敌机的列表
2.7 定义玩家飞机发射子弹的函数
2.8 创建玩家飞机自动发射子弹的定时器
2.9 创建积分变量和游戏结束弹框函数
2.10 重置游戏数据函数
2.11 游戏循环
三、源码
一、运行效果图
二、代码介绍
2.1 导入所需模块
在飞机大战游戏中,我们需要使用pygame和tkinter模块来实现游戏界面和弹框功能,同时还需要使用random模块来生成随机数。因此我们需要导入这些模块:
import pygame
import random
import tkinter as tk
from tkinter import messagebox
import sys
2.2 定义敌机类
在游戏中,敌机是一种重要的游戏元素,我们需要定义一个敌机类来管理敌机的属性和行为。敌机具有位置、移动方向、移动速度等属性,同时还具有摆动速度和摆动计时器等特性。以下是敌机类的定义:
class Enemy:
def __init__(self, x, y, swing_speed):
self.rect = pygame.Rect(x, y, 50, 50)
self.movement_direction = random.choice([-1, 1])
self.movement_speed = random.randint(1, 3) / 10
self.swing_speed = swing_speed
self.swing_timer = 0
self.swing_duration = random.randint(60, 120)
2.3 初始化pygame和设置游戏常量
在开始游戏之前,我们需要初始化pygame,并设置一些游戏常量,例如窗口大小、帧率、玩家飞机的速度、子弹速度等等。以下是初始化pygame和设置游戏常量的代码:
pygame.init()
font = pygame.font.SysFont("宋体", 36)
WIDTH, HEIGHT = 800, 600
FPS = 60
PLAYER_SPEED = 5
ENEMY_SPEED = 1
BULLET_SPEED = 7
ENEMY_SPAWN_RATE = FPS
2.4 加载游戏所需图片
在游戏中,我们需要加载一些图片资源,包括玩家飞机、敌机、子弹以及背景图片等。以下是加载游戏所需图片的代码:
player_img = pygame.image.load('战斗机10.png')
enemy_img = pygame.image.load('战斗机5.png')
player_bullet_img = pygame.image.load('子弹.png')
background_img = pygame.image.load('img.png')
df_bullet_img = pygame.image.load('敌方子弹.png')
2.5 创建游戏窗口和时钟对象
在游戏中,我们需要创建一个窗口来显示游戏内容,并创建一个时钟对象来控制游戏的帧率。以下是创建游戏窗口和时钟对象的代码:
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("飞机大战")
clock = pygame.time.Clock()
2.6 创建玩家飞机和存储子弹、敌机的列表
在游戏中,我们需要创建一个玩家飞机对象,并创建用于存储子弹和敌机的列表。以下是创建玩家飞机和存储子弹、敌机的列表的代码:
player = pygame.Rect(WIDTH // 2, HEIGHT - 50, 50, 50)
bullets = []
enemies = []
2.7 定义玩家飞机发射子弹的函数
在游戏中,玩家飞机可以发射子弹,我们需要定义一个函数来实现玩家飞机发射子弹的行为。以下是定义玩家飞机发射子弹的函数的代码:
def player_shoot():
bullet_x = player.x + player.width // 2 - 25
bullet_y = player.y
bullet_info = {'rect': pygame.Rect(bullet_x, bullet_y, 4, 10), 'source': 'player'}
bullets.append(bullet_info)
2.8 创建玩家飞机自动发射子弹的定时器
在游戏中,我们希望玩家飞机能够自动发射子弹,因此我们需要创建一个定时器来实现这个功能。以下是创建玩家飞机自动发射子弹的定时器的代码:
pygame.time.set_timer(pygame.USEREVENT, 500)
2.9 创建积分变量和游戏结束弹框函数
在游戏中,我们需要一个变量来记录玩家的得分,并且需要一个函数来显示游戏结束的弹框。以下是创建积分变量和游戏结束弹框函数的代码:
score = 0
def show_game_over(score):
root = tk.Tk()
root.withdraw()
result = messagebox.askquestion("游戏结束", f"您的得分: {score}\n是否继续游戏?", icon='warning')
if result == 'yes':
restart_game()
else:
pygame.quit()
sys.exit()
2.10 重置游戏数据函数
在游戏结束后,我们需要重置游戏数据,以便重新开始游戏。以下是重置游戏数据函数的代码:
def restart_game():
global score, bullets, enemies
score = 0
bullets = []
enemies = []
player.x = WIDTH // 2
player.y = HEIGHT - 50
2.11 游戏循环
在游戏中,我们需要一个主循环来处理游戏逻辑和更新游戏界面。以下是游戏循环的代码:
running = True
enemy_spawn_timer = 0
# 生成初始敌机
for _ in range(3):
enemy = Enemy(random.randint(0, WIDTH - 50), 0, 0.5)
enemies.append(enemy)
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.USEREVENT:
player_shoot()
# 更新敌机生成计时器
if len(enemies) < 3 and enemy_spawn_timer <= 0:
enemy = Enemy(random.randint(0, WIDTH - 50), 0, 0.5)
enemies.append(enemy)
enemy_spawn_timer = ENEMY_SPAWN_RATE
enemy_spawn_timer -= 1
# 玩家移动控制
# ...
# 绘制游戏元素
# ...
# 绘制积分
# ...
pygame.display.update()
# 更新子弹位置
# ...
# 更新敌机位置
# ...
clock.tick(FPS)
pygame.quit()
三、源码
请订阅专栏或者购买后,联系博主提供!