python做飞机大战让敌机打子弹_python(pygame)滑稽大战(类似飞机大战) 教程

python做飞机大战让敌机打子弹_python(pygame)滑稽大战(类似飞机大战) 教程_第1张图片

初始准备工作

本项目使用的python3版本(如果你用python2,我不知会怎么样)

Ide推荐大家选择pycharm(不同ide应该没影响)

需要安装第三方库pygame,

pygame安装方法(windows电脑,mac系统本人实测与pygame不兼容,强行运行本项目卡成ppt)

电脑打开cmd命令窗口,输入

pip3 install pygame

补充说明:

由于众所周知的原因,安装过程中下载可能十分缓慢,甚至由此导致安装失败

此时建议大家尝试使用镜像下载

使用办法 pip install xxxx -i jinxiangurl

具体到pygame,则是:pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple

一、实现基础窗口

0 - 新建app.py文件,内容如下

import pygame

WINWIDTH = 600 # 窗口宽度

WINHEIGHT = 900 # 窗口高度

pygame.init() # pygame初始化,必须有,且必须在开头

# 创建主窗体

win=pygame.display.set_mode((WINWIDTH,WINHEIGHT))

此时运行app.py,会发现一个一闪而逝的窗口

1 - 进一步,我们自然而然的就要思考这些问题

怎么维持住这个窗口?

通过while循环去实现

但是简单的循环只是单纯的将界面卡住,怎么实现刷新?

在循环体内使用pygame.display.update()语句进行界面的更新

循环的刷新频率不做节制的话,界面会飞速刷新导致卡死,怎么办?

pygame有专门的对象pygame.time.Clock用于去控制循环刷新的频率,创建pygame.time.Clock对象后,调用该对象的tick()方法,函数参数为每秒刷新次数,就可以设置循环每秒刷新频率,术语叫做帧率

根据上面的思路,修改app.py后如下

import pygame

FPS=60 # 游戏帧率

WINWIDTH = 600 # 窗口宽度

WINHEIGHT = 900 # 窗口高度

pygame.init() # pygame初始化,必须有,且必须在开头

# 创建主窗体

clock=pygame.time.Clock() # 用于控制循环刷新频率的对象

win=pygame.display.set_mode((WINWIDTH,WINHEIGHT))

while True:

clock.tick(FPS) # 控制循环刷新频率,每秒刷新FPS对应的值的次数

pygame.display.update()

此时运行app.py,就可以得到一个最最最基础的窗口了,

2- 优化

最后,还有一个比较重要的问题,此时窗口的关闭按钮很容易出bug(卡死)

一般需要程序去重新实现这个窗口关闭功能,需要在循环体内添加如下代码

# 获取所有事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

# 判断当前事件是否为点击右上角退出键

pygame.quit()

sys.exit() # 需要提前 import sys

本阶段最后app.py如下

import pygame

import sys

FPS=60 # 游戏帧率

WINWIDTH = 600 # 窗口宽度

WINHEIGHT = 900 # 窗口高度

pygame.init() # pygame初始化,必须有,且必须在开头

# 创建主窗体

clock=pygame.time.Clock() # 用于控制循环刷新频率的对象

win=pygame.display.set_mode((WINWIDTH,WINHEIGHT))

while True:

# 获取所有事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

# 判断当前事件是否为点击右上角退出键

pygame.quit()

sys.exit()

clock.tick(FPS) # 控制循环刷新频率,每秒刷新FPS对应的值的次数

pygame.display.update()

到这里,基础窗口就完成了~

二、玩家飞机实现

本节主要实现一个基本的,可以键盘控制方向移动的玩家飞机

0 - 分析与初步实现

创建玩家飞机需要知道哪些?

1、父控件(在该控件上绘制飞机)

2、飞机坐标(x,y)

3、飞机的图像(图像文件地址)

玩家飞机需要实现哪些方法?

1、移动到指定坐标

2、绘制玩家飞机

基于上述分析,新建plane.py文件,内容如下

import pygame

PLANEIMG="img/huaplane.png"

class Plane():

def __init__(self,master,x,y,img_path):

self._master=master # 父控件

self.image=pygame.image.load(img_path) # 飞机图像

# 飞机位置-坐标

self.x=x

self.y=y

# 移动飞机到指定位置

def move(self,x,y):

self.x+=x

self.y+=y

# 绘制飞机

def draw(self):

self._master.blit(self.image,(self.x,self.y))

在surface对象上绘制图像方法:

在surface对象(a)上位置为(x,y)的地方绘制另一个surfae对象(img)

a.blit(img,(x,y))

1 - 界面绘制飞机

要在界面上展示飞机,十分简单,只需在app.py中添加三行代码

# 在开头添加

from plane import Plane

# 在创建完窗体win实例之后添加(开始循环之前)

plane=Plane(win,200,600)

# 在循环体中添加(在clock.tick(FPS)语句之前)

plane.draw()

但是此时界面上展示的只是一个静态的飞机图像,无法键盘运动,需要添加通过键盘控制飞机移动功能

修改app.py循环体部分代码如下

while True:

# 获取所有事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

# 判断当前事件是否为点击右上角退出键

你可能感兴趣的:(python做飞机大战让敌机打子弹_python(pygame)滑稽大战(类似飞机大战) 教程)