Python---战机小游戏,学习pygame
import pygame # 导入游戏包 pygame.init() # 导入并初始化所有pygame模块,使用其他模块之前必须先调用init()方法
print('下面是游戏代码:') # 绘制矩形
# 坐标系 左上角(0,0),向右x+,向下y+
# 游戏中,所有可见元素都是以矩形区域来描述位置,矩形区域四个要素(x,y)(width,height)
# pygame提供了一个矩形区域类pygame.Rect hero_rect = pygame.Rect(150, 300, 102, 126) # 绘制矩形,记录飞机初始位置
print('英雄原点:%d %d, 英雄尺寸:%d %d' % (hero_rect.x, hero_rect.y, hero_rect.width, hero_rect.height))
print('英雄size: %d %d' % hero_rect.size) # 英雄size: 120 130
print(hero_rect) # <hero_rect(100, 500, 120, 130)> # 创建游戏主窗口
# pygame提供一个模块pygame.display,用来创建游戏窗口
# pygame.模块名称.类名称 类首字母大写
# pygame.display.set_mode() 初始化游戏显示窗口,后续所有图像绘制基于这个返回结果
# pygame.display.update() 刷新屏幕显示内容,稍后使用
# pygame.display.set_mode((width,height) 默认和屏幕大小一致, 屏幕附加选项 是否全屏等 默认为空, 颜色位数 默认自动匹配) screen = pygame.display.set_mode((480, 700)) # 此时screen对象是一个内存中的屏幕数据对象,理解为一个画布 # 绘制图像
# 游戏元素大多都是图像,图像初始保存在磁盘上,需要时,加载到内存
# pygame.image.load(图像path) 加载图像数据
# 使用主窗口游戏屏幕对象,调用blit()方法,blit(图像,位置)将图像绘制到指定位置
# 调用pygame.display.update()方法,更新整个屏幕显示 bg = pygame.image.load('./images/background.png') # 绘制背景图像
screen.blit(bg, (0, 0))
hero = pygame.image.load('./images/me1.png') # 绘制英雄飞机图像
# screen.blit(hero, (100, 100))
# pygame.display.update() # 更新屏幕 # 游戏时钟
# pygame提供的类pygame.time.Clock()可以方便的设置屏幕绘制速度--刷新帧率
# 游戏初始化阶段创建一个时钟对象
# 在游戏循环中让时钟对象调用tick()方法,tick(帧率),每秒执行多少次
# tick()自动设置游戏循环中的延时 clock = pygame.time.Clock() # 创建时钟对象 # ================================= 上方是游戏初始化 =================================
# ================ 设置游戏窗口 === 绘制图像初始位置 === 设置游戏时钟 =================== # =========================== 游戏循环 意味着游戏真正的开始 ===========================
# ======== 设置刷新帧率 === 检测用户交互 === 更新所有图像位置 === 更新屏幕显示 =========== # 动画
# 动画原理:快速在屏幕上绘制图像,每秒绘制60次,就能达到连续高品质动画效果,每次绘制结果为 帧 Frame
# 每调用一次update(),就是一帧
# 每次调用update()之前,需要把游戏图像都重新绘制一遍,最先绘制背景图片 # 游戏循环中监听事件
# 事件event 用户针对游戏所做的操作
# 捕获事件: pygame.event.get() 获得当前 事件列表
# 只有捕获到事件,才能做出相应的响应 # 游戏循环
# 游戏循环作用:
# 1.保证游戏不会直接退出
# 2.变化图像位置,产生动画效果,1/60秒移动一下图像位置,调用pygame.display.update()更新屏幕
# 3.检测用户交互,按键鼠标等 while True:
clock.tick(20) # 指定循环体内部代码执行的频率 # 捕获事件
event_list = pygame.event.get() # 获取事件列表
if len(event_list) > 0:
print(event_list) # 有事件就打印事件列表 # 事件监听 做出响应
for event in event_list:
if event.type == pygame.QUIT:
print('退出游戏')
pygame.quit() # 卸载pygame模块,退出游戏
# break()只能退出当前循环,for外面还有while,所以使用内置函数exit()直接退出程序系统
exit() # 直接退出系统 # 判断飞机位置
if hero_rect.y <= 0: # 飞机出视野循环到底部出现
hero_rect.y = 700 hero_rect.y -= 1 # 修改飞机位置
screen.blit(bg, (0, 0)) # 重新绘制背景图片
screen.blit(hero, hero_rect) # 将飞机图像绘制到指定位置
pygame.display.update() # 更新屏幕 pygame.quit() # 卸载pygame模块,清空内存,结束游戏
运行结果:

Python---战机小游戏,学习pygame的更多相关文章
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- python 金币小游戏
我最近用python的pygame做了一个金币小游戏 游戏规则:移动挡板接住金币 游戏截图: 代码如下: import pygame.freetype import sys import random ...
- python 打字小游戏
最近随便用python的pygame编了这个打字小游戏 只要有字母调到窗口底部就结束 上代码: import pygame.freetype import sys import random pyga ...
- Python——项目-小游戏
开始我们的项目 飞机大战 1 项目的初体验 以及前期准备 游戏初体验画面 验证一下本地第三方包有没有导入 python3 -m pygame.examples.aliens 如果没有出现游戏画面请先安 ...
- Python——项目-小游戏2-动画绘制
实现游戏循环还有事件的监听 在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记.,重要的事情说三遍 我们来看一下什么是游戏循环 所谓的游戏循环很好的理解 就 ...
- 把川普射上太阳—如何用python制作小游戏
1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...
- python做小游戏——做个马里奥分分钟解决
一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...
- Python hangman小游戏
hangman # words.py 使用pickle永久性存储数据 import pickle filename = 'words.pk' data = ['cat', 'dog', 'perro' ...
- Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...
- Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围
系列文章目录 第一章:武装飞船 07调整飞船速度 08限制飞船活动范围 一.代码及演示 1.修改settings 修改文件:settings.py 点击查看代码 #渗透小红帽python的学习之路 # ...
随机推荐
- 反射导出 Excel
/// <summary> /// List 数据导出Excel /// </summary> /// <param name="list">数 ...
- C#穿透session隔离———Windows服务启动UI交互程序
在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方. 需要注意的地方 首先要将服务的Account属性 ...
- 在linux下搭建python+django环境
下载python3,进行编译安装,运行django程序 在 /opt目录中安装 cd /opt 1.解决python编译安装所需的软件依赖 yum install gcc patch libffi-d ...
- express 重新加载
1,res.location() 2. res.redirect() location()与redirect()的比较: Express的response对象,是对Node.js原生对象ServerR ...
- PHP之旅4 php 超全局变量
预定义数组: 自动全局变量---超全局数组 1.包含了来自web服务器,客户端,运行环境和用户输入的数据 2.这些数组比较特别 3.全局范围内自动生效,都可以直接使用这些数组 4.用户不能自定义这些数 ...
- template.js插件和ajax一起使用的例子
template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果. https:/ ...
- crop和resize操作区别
crop:对图像进行剪切 resize:对图像进行伸缩 实践代码 import cv2 bb2d = [30, 30, 72 ,42] image = cv2.imread('car.png') pt ...
- 【hdu4609】 3-idiots FFT
题外话:好久没写blog了啊-- 题目传送门 题目大意:给你m条长度为ai的线段,求在其中任选三条出来,能构成三角形的概率.即求在这n条线段中找出三条线段所能拼出的三角形数量除以$\binom{m}{ ...
- (转)Windows下MySQL :GUI安装和使用(MySQL GUI tools)
原文:http://blog.csdn.net/dahunbi/article/details/52970815 MySQL GUI Tools是MySQL官方提供的图形化管理工具,功能很强大,值得推 ...
- android开发 gradle 总结
gradle结构: MyApp ├── build.gradle ├── settings.gradle └── app └── build.gradle 1. setting.gradle解析 当你 ...