一、pygame正确安装
1.安装:pip install pygame
2.验证安装:python -m pygame.examples.aliens;安装ok即会出现如下图所示动画

二、使用pygame创建图像窗口
1.游戏的初始化和退出;要使用pygame提供的所有功能之前,必须先调用init方法;在游戏结束,需要调用quit方法

pygame.init()→游戏代码→pygame.quit()

2.在游戏中,所有可见的元素都是以矩形区域来描述位置的;要描述一个矩形区域有4个要素(x,y(width,height));pygame.Rect用于专门描述矩形区域的
(pygame.Rect是一个比较特殊的类,内部只是封装了一些数字计算,不需要执行pygame.init()方法就能直接使用)

举个例子:

三.创建游戏主窗口;

模块:pygame.display;用于创建、管理游戏窗口
方法:pygame.display.set_mode():初始化游戏显示窗口pygame.display.update():刷新屏幕内容显示,稍后使用set_moed(resolution=(0,0),flags=0,depth=0) →Surface

resolution:指定屏幕的宽和高;默认创建的窗口大小和屏幕大小一致
flags:指定屏幕的附加选项,例如是否全屏等等,默认不需要传递
depth:表示颜色的位置,默认自动匹配
Suface返回值;暂时可以理解为游戏的屏幕,游戏的元素都需要被绘制到游戏的屏幕上
注意:必须使用变量记录set_mode方法的返回结果!(因为后续所有的图像绘制都基于这个返回结果)
举个例子:

import pygame
pygame.init()#游戏代码:
screen = pygame.display.set_mode((480, 700))    #宽480,高700#游戏循环;为了做到游戏程序启动后,不会立即退出,
while True:passpygame.quit()

四.理解图像并实现图像绘制;
图像文件初始是保存在磁盘上,如需使用,第一步就需要被加载到内存;要在屏幕上看到某一个图像的内容,需要按照三个步骤:
①.使用pygame.image.load();加载图像的数据 【load(file_path)】
②.使用游戏屏幕对象,调用blit方法将图像绘制到指定位置怕【blit(图像,位置)】
③.调用pygame.display.update()方法更新整个屏幕的显示

举个例子:

import pygame
pygame.init()#游戏代码:
screen = pygame.display.set_mode((480, 700))    #宽480,高700#绘制背景图像
"""
①.使用pygame.image.load();加载图像的数据
②.使用游戏屏幕对象,调用blit方法将图像绘制到指定位置
③.调用pygame.display.update()方法更新整个屏幕的显示
"""bg = pygame.image.load("./images/background.png") #load方法需要有返回值;将背景图片的地址写入
screen.blit(bg, (0, 0))  #blit方法里传入俩个参数:图像,位置
pygame.display.update() #必须要使用这个方法,才能更新到屏幕上
#游戏循环;为了做到游戏程序启动后,不会立即退出,
while True:passpygame.quit()

在游戏中,能够看到的游戏元素大多是图像;
图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存
要在屏幕上看到某一个图像的内容,需要按照三个步骤:
①.使用pygame.image.load()加载图像的数据
②.使用游戏屏幕对象,调用blit方法,将图像绘制到指定位置
③.调用pygame.display.update()方法更新整个屏幕的显示

五.绘制英雄图像,并在屏幕上显示

"""
需求:
1.加载me1.png图像,创建英雄费飞机
2.将英雄飞机绘制在屏幕的(200,500)位置
3.调用屏幕更新显示飞机图像
"""import pygame
pygame.init()#游戏代码:
screen = pygame.display.set_mode((480, 700))    #宽480,高700#绘制背景图像
"""
①.使用pygame.image.load();加载图像的数据
②.使用游戏屏幕对象,调用blit方法将图像绘制到指定位置
③.调用pygame.display.update()方法更新整个屏幕的显示
"""bg = pygame.image.load("./images/background.png") #load方法需要有返回值;将背景图片的地址写入
screen.blit(bg, (0, 0))  #blit方法里传入俩个参数:图像,位置
pygame.display.update() #必须要使用这个方法,才能更新到屏幕上
#游戏循环;为了做到游戏程序启动后,不会立即退出# 绘制英雄的飞机并更新在屏幕上
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (200, 500))
pygame.display.update()
while True:passpygame.quit()

透明图像:
png格式的图像是支持透明的,在绘制图像时,透明区域不会显示任何内容,但是如果下方已经有内容,会透过透明区域显示出来

六.update方法的作用
可以在所有绘制工作完成后,统一调用update方法

7.游戏循环

游戏循环的作用:
①.保证游戏不会直接退出
②.变化图像位置-动画效果 (每隔1/60s移动一下所有图像的位置,调用pygame.display.update()更新屏幕显示)
③.检测用户交互 ——按键,鼠标等

游戏由2个部分组成:游戏初始化 + 游戏循环
而游戏循环的开始,才意味着游戏的正式开始
游戏初始化:
①.设置游戏窗口
②.绘制图像初始位置
③.设置游戏时钟

游戏循环:
①.设置刷新帧率
②.检测用户交互
③.更新所有图像位置
④.更新屏幕显示

游戏时钟(利用时钟设置游戏循环的刷新帧率):
pygame专门提供了一个类:pygame.time.Clock()可以非常方便的设置屏幕绘制速度)刷新帧率;要使用时钟对象,需要俩步
1)在游戏初始化创建一个时钟对象
2)在游戏循环中让时钟对象调用tick(帧率)方法
tick方法会根据上次被调用的时间,自动设置游戏循环中的延时

英雄动画效果实现:

"""
需求:
1.在游戏初始化定时一个pygame.Rect的变量记录英雄的初始位置
2.在游戏循环中每次让英雄的y-1(向上移动)
3.y<=0将英雄移动到屏幕的底部
"""import pygame
pygame.init()#游戏代码:
screen = pygame.display.set_mode((480, 700))    #宽480,高700#绘制背景图像
"""
①.使用pygame.image.load();加载图像的数据
②.使用游戏屏幕对象,调用blit方法将图像绘制到指定位置
③.调用pygame.display.update()方法更新整个屏幕的显示
"""bg = pygame.image.load("./images/background.png") #load方法需要有返回值;将背景图片的地址写入
screen.blit(bg, (0, 0))  #blit方法里传入俩个参数:图像,位置
#游戏循环;为了做到游戏程序启动后,不会立即退出# 绘制英雄的飞机并更新在屏幕上
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (200, 500))
pygame.display.update()#创建游戏时钟对象
clock = pygame.time.Clock()#定义rect记录飞机的初始位置
hero_rect = pygame.Rect(200, 500, 102, 126)#游戏循环:意味着游戏的正式开始
while True:clock.tick(60)#2.修改飞机的位置hero_rect.y -=50#判断飞机的位置if hero_rect.y <=0:hero_rect.y = 700#3.调用blit方法绘制图像screen.blit(bg, (0, 0))#绘制游戏背景; 为了飞机回到原点,没有残影screen.blit(hero, hero_rect)#4.调用update方法更新显示pygame.display.update()pygame.quit()

在游戏中监听事件:

………………………………省略,没有详细的说明了~附带代码
plane_main.py

import pygame
from plane_sprites import *"""
该文件为游戏的主程序;封装主游戏类;创建游戏对象;启动游戏
"""class PlaneGame(object):"""飞机大战主游戏"""def __init__(self):#1.创建游戏的窗口#self.screen = pygame.display.set_mode((480, 700))      #这个屏幕的大小值不固定,可以使用常量,在plane_sprites.py中设置常量,这边引用即可self.screen = pygame.display.set_mode(SCREEN_RECT.size)#2.创建游戏的时钟self.clock = pygame.time.Clock()#3.调用私有方法,精灵和精灵组的创建self.__creat_sprites()#设置定时器,创建敌机1~秒pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)pygame.time.set_timer(HERO_FIRE_EVENT, 500)#创建私有方法(精灵和精灵组的创建)def __creat_sprites(self):#创建背景精灵和精灵组bg1 = BackGround()bg2 = BackGround(True)self.back_group = pygame.sprite.Group(bg1, bg2)     #背景精灵组self.enemy_group = pygame.sprite.Group()    #敌机精灵组self.hero = Hero()self.hero_group = pygame.sprite.Group(self.hero)     #英雄精灵组#开始游戏,且循环游戏def start_time(self):while True:#print("开始游戏了……")#1.设置刷新帧率self.clock.tick(FRAME_PER_SEC)#2.事件监听self.__event_handler()#3.碰撞检测self.__check_collide()#4.更新精灵组self.__update_sprites()#5.更新屏幕显示pygame.display.update()#事件监听def __event_handler(self):for event in pygame.event.get():#判断是否退出游戏if event.type == pygame.QUIT:PlaneGame.__game_over()elif event.type == CREATE_ENEMY_EVENT:print("敌机出场……")enemy = Enemy()self.enemy_group.add(enemy)elif event.type == HERO_FIRE_EVENT:self.hero.fire()#使用键盘提供的方法获取键盘按键(按键元组)keys_pressed = pygame.key.get_pressed()#判断元组中对应的按键索引值 1if keys_pressed[pygame.K_RIGHT]:self.hero.speed = 2elif keys_pressed[pygame.K_LEFT]:self.hero.speed = -2else:self.hero.speed = 0#碰撞检测def __check_collide(self):#1.子弹摧毁敌机pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)#2.敌机撞毁英雄enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)#3.判断列表有内容if len(enemies) > 0:#让英雄牺牲self.hero.kill()#游戏结束PlaneGame.__game_over()#更新精灵组def __update_sprites(self):self.back_group.update()self.back_group.draw(self.screen)self.enemy_group.update()self.enemy_group.draw(self.screen)self.hero_group.update()self.hero_group.draw(self.screen)self.hero.bullets.update()self.hero.bullets.draw(self.screen)@staticmethoddef __game_over():pygame.quit()exit()if __name__ == '__main__':"""创建游戏对象"""game = PlaneGame()"""开始游戏"""game.start_time()

plane_sprites.py

import random
import pygame
# 屏幕大小的常量
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)#刷新的帧率
FRAME_PER_SEC =60#定义敌机定时器的事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT#英雄发射子弹事件
HERO_FIRE_EVENT = pygame.USEREVENT + 1"""
该文件是封装游戏中所有需要使用的精灵子类;提供游戏的相关工具;(比如屏幕尺寸大小,游戏精灵子类)
"""#创建游戏精灵基类;并继承pygame.sprite.Sprite
class GameSprite(pygame.sprite.Sprite):def __init__(self, image_name, speed=1):#调用父类的初始化方法super().__init__()#加载图像self.image = pygame.image.load(image_name)#设置尺寸self.rect = self.image.get_rect()#记录速度self.speed = speeddef update(self):#默认在垂直方向移动self.rect.y += self.speed#创建游戏背景精灵
class BackGround(GameSprite):def __init__(self, is_alt=False):# 1. 调用父类方法实现精灵的创建(image/rect/speed)super().__init__("./images/background.png")# 2. 判断是否是交替图像,如果是,需要设置初始位置if is_alt:self.rect.y = -self.rect.heightdef update(self):# 1. 调用父类的方法实现super().update()# 2. 判断是否移出屏幕,如果移出屏幕,将图像设置到屏幕的上方if self.rect.y >= SCREEN_RECT.height:self.rect.y = -self.rect.height#创建敌机精灵
class Enemy(GameSprite):def __init__(self):#1.调用父类的方法,创建敌机精灵,并且指定敌机的图像super().__init__("./images/enemy1.png")#2.设置敌机的随机初始速度self.speed = random.randint(1, 3)#3.设置敌机的随机初始位置self.rect.bottom = 0max_x = SCREEN_RECT.width - self.rect.widthself.rect.x = random.randint(0, max_x)def update(self, *args):#1.调用父类的方法,让敌机在垂直方向运动super().update()#2.判断是否飞出屏幕,如果是,需要将敌机从精灵组删除if self.rect.y >= SCREEN_RECT.height:# print("敌机飞出屏幕")# kill方法可以将精灵从所有精灵组中移出,精灵就会被自动销毁self.kill()def __del__(self):pass#创建英雄精灵
class Hero(GameSprite):def __init__(self):#1.调用父类方法,设置图像和速度super().__init__("./images/me1.png", 0)#2.设置英雄的初始位置self.rect.centerx =SCREEN_RECT.centerxself.rect.bottom =SCREEN_RECT.bottom - 120#3.创建子弹的精灵组self.bullets = pygame.sprite.Group()def update(self):#1.英雄在水平方向移动self.rect.x += self.speed#控制英雄不能离开屏幕if self.rect.x < 0:self.rect.x = 0elif self.rect.right > SCREEN_RECT.right:self.rect.right = SCREEN_RECT.rightdef fire(self):print("发射子弹……")for i in (0, 1, 2):#1.创建子弹精灵bullet = Bullet()#2.设置精灵的位置bullet.rect.bottom = self.rect.y - i * 20bullet.rect.centerx = self.rect.centerx#3.将精灵添加到精灵组self.bullets.add(bullet)#创建子弹精灵类
class Bullet(GameSprite):def __init__(self):#调用父类方法,设置子弹图片和设置初始速度super().__init__("./images/bullet1.png", -2)def update(self):#调用父类方法,让子弹沿垂直方向飞行super().update()#判断子弹是否飞出屏幕if self.rect.bottom < 0:self.kill()def __del__(self):print("子弹被销毁……")

python学习-飞机大战相关推荐

  1. Python学习-飞机大战(1)

    飞机大战(1) 此阶段完成了飞机的移动   面向过程 面向过程(只写到移动) 导入库 1.     创建游戏窗口,用于显示游戏内容 2.     读取充当背景的图片 3.     读取飞机图片 创建飞 ...

  2. 小甲鱼python游戏代码_【小甲鱼】零基础学习python pygame 飞机大战可执行源代码...

    [实例简介] [小甲鱼]零基础学习python pygame 飞机大战可执行源代码,觉得挺有意思,故此分享. [实例截图] [核心代码] 飞机大战 └── 飞机大战 ├── bullet.py ├── ...

  3. python写飞机大战游戏_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  4. python实现飞机大战游戏_python实现飞机大战小游戏

    本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 初学Python,写了一个简单的Python小游戏. 师出bilibili某前辈 pycharm自带了第三方库pyga ...

  5. 飞机大战游戏python_基于Python的飞机大战游戏

    基于 Python 的飞机大战游戏 杨铠 [期刊名称] <电脑迷> [年 ( 卷 ), 期] 2017(000)021 [摘要] 我们每天都享受到科技带来的好处 , 了解计算机编程对每个人 ...

  6. 【python】飞机大战小游戏练习

    飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...

  7. python的飞机大战

    python的飞机大战的完整代码 alien.py import pygame from pygame.sprite import Sprite class Alien(Sprite):"& ...

  8. python实现飞机大战游戏

    python实现飞机大战小游戏(含源码+视频资源) 导语: 正文: 1.开发工具 2.环境搭建 3.效果如下 Step1:定义精灵类 Step2:实现游戏主循环 Step3:制作简易的游戏开始和结束界 ...

  9. python制作飞机大战游戏准备工作相关知识点

    python制作飞机大战游戏准备工作相关知识点 1.初始化背景 `import pygame` : 导入pygame模块 `pygame.init()` : 导入并初始化所有 `pygame` 模块, ...

最新文章

  1. Jmeter 使用自定义变量
  2. Android利用android:indeterminateDrawable来实现ProgressBar三种方式
  3. 阿里开源软件替换指南
  4. 执行计划oracle中cost,执行计划中cost计算方法
  5. 反射实体自动生成EasyUi DataGrid模板 第二版--附项目源码
  6. uva 11419 最大匹配(最小点覆盖)
  7. 用python实现求最大公约数_python实现求最大公约数与最小公倍数
  8. 图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
  9. zabbix通过skype发送报警消息之切换平台
  10. 建模方法(四)-因子分析定义和应用
  11. 娱乐小工具微信小程序源码下载/支持多种流量主
  12. 颜色名称及色样表(HTML版)
  13. python+opencv代码给证件照换底色
  14. MacOS 连接网络打印机后一直不能打印
  15. 螺旋无限延伸_无限螺旋篇 其之八(一)
  16. 有机晶体数据库_福利干货 | 对晶体学数据库来个大盘点吧!
  17. Web思维导图实现的技术点分析
  18. matlab ccd驱动,CCD常见驱动比较
  19. Docker 核心知识点 可视化仪表盘
  20. html 奇数div,使用奇数偶数类的Javascript DOM操作

热门文章

  1. PADS Logic电路原理pcb设计(线路硬件设计实践问题总结)
  2. spacy 英文模型下载_英语文本处理工具库2 — spaCy
  3. Python:str()函数
  4. 计算机专业兴趣小组 名字,计算机人兴趣小组口号
  5. win10sas安装教程_win10s是什么版本_windows10s版本的特性图文教程
  6. mysql错误1273_mysql8 参考手册--错误代码1273-1294
  7. golang 内存管理
  8. Window10系统下触摸板失灵了 该咋处理
  9. 《用户体验要素》笔记
  10. android pc扩展屏幕分辨率,让闲置的iPad / Android平板电脑成为计算机屏幕的扩展显示!...