Pygame库200行代码实现简易飞机大战的小游戏

该博客介绍了如何使用Python的Pygame库编写一个简易的飞机大战游戏。通过讲解pygame的安装、主要模块、程序原理,逐步解析了游戏的精灵类、背景、敌机、主机和子弹的创建与更新,以及事件监听和碰撞检测。文章末尾对程序进行了总结,并鼓励读者根据代码进行功能优化。
摘要由CSDN通过智能技术生成


写在开头,因为这个小游戏的实验主要是帮助我熟悉pygame库的使用,所以游戏的一些地方可能存在不完善处,还望包涵。
在这里插入图片描述

安装使用库

pygame简介

pygame是跨平台python模块,专为电子游戏设计,包括图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言束缚, 开发者可以把精力放在游戏的架构上。

pgame中主要模块介绍

(1) pygame

pygame模块会自动导入其它的pygame相关模块。

pygame模块包括surface函数, 可以返回一个新的surface 对象。 init()函数是pygame游戏的核心,必须在进入游戏的主循环之前调用。init()会自动初始化其它所有模块。

(2) pygame.locals

包括在你自己的模块作用域内使用的名字(变量)。包括事件类型、键和视频模式等的名字。

(3) pygame.display

包括处理pygame显示方式的函数。包括普通窗口和全屏模式。 pygame.display中一些常用的方法如下:

flip:更新显示。

update:更新一部分时候使用update。

set_mode:设定显示的类型和尺寸。

set_caption:设定pygame程序的标题。

get_surface:调用flip和blit前返回一个可用于画图的surface对象。

(4) pygame.font

包括font函数,用于表现不同的字体。

(5) pygame.sprite

游戏精灵,Group用做sprite对象的容器。调用group对象的update对象,会自动调用所有sprite对象的update方法。

(6) pygame.mouse

隐藏鼠标光标,获取鼠标位置。

(7) pygame.event

追踪鼠标单击、按键按下和释放等事件。

(8) pygame.image

用于处理保存在GIF、PNG或者JPEG文件内的图像。

注:程序中除了local模块和font模块没有使用,其他模块均有涉及。

pygame的安装

你可以选择使用pycharm中工具栏下方的python packages搜索pygame进行安装,当然也可以使用cmd命令符中常用的pip install pygame 的方法。

安装超时网速慢,直接超时,可以指定国内源镜像。

  • pip install -i 国内镜像地址 包名

例如: pip install -i https://mirrors.aliyun.com/pypi/simple/ numpy

国内常用源镜像地址:

  • 清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学
    https://pypi.mirrors.ustc.edu.cn/simple/
    豆瓣:http://pypi.douban.com/simple/

验证安装

验证pygame是否安装成功,在cmd命令符中使用 pip list 语句,如果安装成功,我们可以在下方结果中找到。
在这里插入图片描述

程序原理

首先创建游戏的主窗体,主窗体的大小就是你背景图片的大小。

import pygame
#游戏初始化
pygame.init()
#创建游戏主窗口
screen = pygame.display.set_mode((480,700))
#绘制背景图香
#1 加载图像数据
background = pygame.image.load('./image/background.png')
#2 blit绘制图像
#从左上角绘制
screen.blit(background,(0,0))
pygame.display.update()
#卸载所有的模块
pygame.quit()

绘制图像时的方向,后面我们主机、敌机、背景、子弹的方向都需要注意这一点。
在这里插入图片描述
背景图像绘制完之后就是我们主机、敌机的绘制,我们可以在所有的绘制工作完成后再统一调用update方法

#绘制飞机图片
hero = pygame.image.load('./image/hero2.png')
screen.blit(hero,(150,300))
pygame.display.update()

其实飞机大战的原理和动画片的原理一致,我们需要对一个个按下的指令进行反应,从而形成一个连贯的画面,这里我们就需要使用到pygame库中的time模块

#创造时钟对象  屏幕绘制速率
clock = pygame.time.Clock()
#游戏循环
while True:
	#指定循环体内部代码的执行频率   每秒重复60次
	clock.tick(60)
	#将移动前飞机进行遮挡 达到动画效果
	screen.blit(background, (0, 0))
	screen.blit(hero,hero_rect)

如果你想停止程序,发现点击窗体右上角的关闭并无反应,因为你还未在循环体内进行事件监听,然后对时间进行判断

event_list = pygame.event.get()
for event in event_list:
	#判断是否为退出事件
	if event.type == pygame.QUIT:
		print("退出游戏...")
		#卸载所有模块
		pygame.quit()
		exit()

关于敌机的生成我们需要使用到sprite精灵和精灵组模块,创建两个一样的敌机,但是敌机的飞行速度不一样,然后将敌机精灵添加至敌机精灵组中,然后在循环体中我们不断将敌机精灵组进行绘制即可

enemy = GameSprite("./image/enemy0.png")
enemy1 = GameSprite("./image/enemy0.png",2)
enemy_group = pygame.sprite.Group(enemy,enemy1)

#精灵组调用方法
enemy_group.update()
enemy_group.draw(screen)

对上述部分代码进行整理简化,最后我们可以得到这样的效果图,主机和敌机都可以移动

import pygame
from plane_sprites import *

#游戏初始化
pygame.init()
#创建游戏主窗口
screen = pygame.display.set_mode(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值