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的学习之路 # ...
随机推荐
- LCS2 - Longest Common Substring II(spoj1812)(sam(后缀自动机)+多串LCS)
A string is finite sequence of characters over a non-empty finite set \(\sum\). In this problem, \(\ ...
- git修改文件权限方式
查看Repository中文件权限 git ls-tree HEAD 100644 blob 018321abfbff52d175a788597f5b5f3f17f67dc7 .gitignore 1 ...
- ubuntu14.0 安装 node v8.11.1(任意版本)
由于众所周知的原因,通过node官网下载速度十分慢,我这里通过淘宝镜像安装 node8.11.1,其他版本同理. node版本淘宝镜像地址:https://npm.taobao.org/mirrors ...
- 微信小程序组件化实践
Do Not Repeat Yourself 如何提高代码质量,方法有许多:抽象.模块.组件化,我认为它们的中心点都是--Do Not Repeat Yourself. 小程序组件化 我们先看看小程序 ...
- 安装Apache时端口号被占用解决方案
有些朋友的电脑在安装Apache是会遇到端口冲突的问题.以下是一种解决方案 1.打开控制面板的管理工具 2.打开IIS 3.观察网站下的端口号 4.点击绑定 5.更改端口号 6.重新启动即可
- centos7修改默认运行级别的变化
在学习centos7,视频教学中使用的的centos6,查看权限文件命令为 cat /etc/inittab/ 但是在centos7中输入以下命令会出现这种情况 这个已经不用了,现在修改权限的命令修改 ...
- mysql优化器在统计全表扫描的代价时的方法
innodb 的聚集索引 的叶子结点 存放的 是 索引值以及数据页的偏移量 那么在计算全表扫描的代价是怎么计算的呢? 我们知道代价 为 cpu代价+io代价 cpu代价 就是 每5条记录比对 计算一个 ...
- hive算法报错..
hive普通语句查询报错.. 查到以下设定项,,附加在语句前执行成功.. 但是有可能没有真正的执行.. 试到最后使用标红的三行附加在语法前执行成功 set hive.execution.engine= ...
- 【Java并发编程】:多线程环境中安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...
- [转]Subdirectory Checkouts with git sparse-checkout
From:http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/ If there is one thi ...