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的更多相关文章

  1. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  2. python 金币小游戏

    我最近用python的pygame做了一个金币小游戏 游戏规则:移动挡板接住金币 游戏截图: 代码如下: import pygame.freetype import sys import random ...

  3. python 打字小游戏

    最近随便用python的pygame编了这个打字小游戏 只要有字母调到窗口底部就结束 上代码: import pygame.freetype import sys import random pyga ...

  4. Python——项目-小游戏

    开始我们的项目 飞机大战 1 项目的初体验 以及前期准备 游戏初体验画面 验证一下本地第三方包有没有导入 python3 -m pygame.examples.aliens 如果没有出现游戏画面请先安 ...

  5. Python——项目-小游戏2-动画绘制

    实现游戏循环还有事件的监听 在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记.,重要的事情说三遍 我们来看一下什么是游戏循环 所谓的游戏循环很好的理解 就 ...

  6. 把川普射上太阳—如何用python制作小游戏

    1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装. Windows环境下打开Cmd(开始—运行—CMD),苹果系统 ...

  7. python做小游戏——做个马里奥分分钟解决

    一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...

  8. Python hangman小游戏

    hangman # words.py 使用pickle永久性存储数据 import pickle filename = 'words.pk' data = ['cat', 'dog', 'perro' ...

  9. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

  10. Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围

    系列文章目录 第一章:武装飞船 07调整飞船速度 08限制飞船活动范围 一.代码及演示 1.修改settings 修改文件:settings.py 点击查看代码 #渗透小红帽python的学习之路 # ...

随机推荐

  1. vs web项目远程发布到IIS

    一.下载安装 IIS安装管理服务,这里不赘述,安装完后显示如下(装完刷新一下或者重新打开iis) 下载webploy,安装的时候要选中远程功能,或者选择完全安装,否则会因为没有远程模块导致连接失败(注 ...

  2. bootstrap-treeview 加载默认选择第一个节点

    configAppTree: function (oArrayData){ $('#appTree').treeview({ color: "#545454", expandIco ...

  3. leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树

    题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  4. 《Python黑帽子:黑客与渗透测试编程之道》 基于GitHub的命令和控制

    GitHub账号设置: 这部分按书上来敲命令即可,当然首先要注册一个GitHub账号还有之前安装的GitHub API库(pip install github3.py),这里就只列一下命令吧: mkd ...

  5. jvm(2)类的初始化(一)

    [深入Java虚拟机]之三:类初始化 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码. 1,下面说的初始化主要是类变量的初始化,实例变量的初始化触发条件不同(一 ...

  6. css 三角图标

    .triangle-right{ display: inline-block; width: 0; height: 0; border-top: 6px solid transparent; bord ...

  7. ffmpeg开发基础知识

    1.音频采集 面临的问题:延时敏感,噪声消除,回声消除,静音检测 主要参数: 采样率,位宽,声道数,音视频帧 采样率: 也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它 ...

  8. 微信小程序一些总结

    1.体验版和线上是啥区别,啥关系 在微信开发者工具里提交代码后进入体验版,在微信后台里点击版本管理,就可以看到线上版本,和开发体验版,描述里有提交备注. 在体验版里发布审核之后会进入到线上.他们两个可 ...

  9. JS: 防抖节流

    防抖节流 防抖(debounce) 先来看看下面的代码: //触发滚动事件,num 就加1 let num = 0; function incNum() { console.log('鼠标滚动中'); ...

  10. 认识AngularJS

    学习AngularJS所需技能 HTML & CSS JavaScript 为什么要使用AngularJS 如果你想用JavaScript制作动态Web站点,使用AngularJS有以下优点: ...