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的学习之路 # ...
随机推荐
- linux系统编程之信号(二):信号处理流程(产生、注册、注销、执行)
对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生 信号在进程中注册 信号在进程中的注销 信号处理函数执行 1 信号诞生 信号事件 ...
- NET 下载共享文件
执行 public static void Run() { "); if (state) { // 共享文件夹的目录 TransportRemoteToLocal(@"\\192. ...
- Python3------装饰器详解
装饰器 定义:本质是函数.(装饰其他函数)就是为其他函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 理解装饰器前提条件: 1.函数即"变量&qu ...
- c# list修改某一个属性的值
public class info() { public string name{get;set;} public string age{get;set;} } list<info> li ...
- 为什么不能用Abort退出线程
在使用线程时,如果线程还未结束直接退出线程很有可能会导致数据丢失. class threadAbort { static void Main(string[] args) { WriteMessage ...
- JQuery - 动态添加Html后,如何使CSS生效,JS代码可用?
今天在开发JQuery Mobile程序时候,需要从服务器取得数据,随后显示在页面上的Listview控件中,数据完整获取到了,也动态添加到Listview控件中,但是数据对应的CSS没有任何效果了, ...
- hdu4815----dp0-1背包
/* 题目大意: 有n个问题,,告诉你答对该题能得多少分,其中一个人随机答题,问另一个人不输的概率为p 至少需要答多多少分 对于样例: 3 0.5 1 2 3 分析: 分数 0 1 2 3 3 4 5 ...
- Android安全防护防护———Android 端常见的安全问题
Android安全防护防护——加密算法:传送门https://www.cnblogs.com/huangjialin/p/9694488.html 组件安全 activity劫持 简单来说就是正常的a ...
- 一分钟搞懂 JavaScript this 指向问题
关于Javascript的this指向问题,网络上有很多分析文章,写的很好,比如这里和这里 我这里做一个简单的总结. 箭头函数的 this 箭头函数内的this指向外层函数定义时所在的作用域.如果没有 ...
- 杭电OJ之2020-2029(C语言版)
2020. 绝对值排序 题目 Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等. Inpu ...