python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了
安装pygame
本人电脑是windows 10、python3.6,pygame下载地址:pypi.python.org/pypi/Pygame…
请自行下载对应python版本的pygame
运行以下命令
创建Pygame窗口及响应用户输入
新建一个文件夹alien_invasion,并在文件夹中新建alien_invasion.py文件,输入如下代码。
运行上述代码,我们可以得到一个灰色界面的窗口:
创建设置类
为了在写游戏的过程中能便捷地创建一些新功能,下面额外编写一个settings模块,其中包含一个Settings类,用于将所有设置存储在一个地方。
这样在以后项目增大时修改游戏的外观就更加容易。
我们首先将alien_invasion.py中的显示屏大小及显示屏颜色进行修改。
首先在alien_invasion文件夹下新建python文件settings.py,并向其中添加如下代码:
然后再alien_invasion.py中导入Settings类,并使用相关设置,修改如下:
添加飞船图像
接下来,我们需要将飞船加入游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame()方法blit()绘制它。
在游戏中几乎可以使用各种类型的图像文件,但是使用位图(.bmp)文件最为简单,这是因为Pygame默认加载位图。
虽然其他类型的图像也能加载,但是需要安装额外的库。
我们推荐去免费的图片素材网站上去找图像:pixabay.com/
我们在主项目文件夹(alien_invasion)中新建一个文件夹叫images,将如下bmp图片放入其中。
接下来,我们创建飞船类ship.py:
重构:模块game_functions
在大型项目中,经常需要在添加新代码前重构既有代码。重构的目的是为了简化代码的结构,使其更加容易扩展。
我们将实现一个game_functions模块,它将存储大量让游戏Alien invasion运行的函数。通过创建模块game_functions,可避免alien_invasion.py太长,使其逻辑更容易理解。
函数check_events()
首先我们将管理事件的代码移到一个名为check_events()的函数中,目的是为了隔离事件循环
然后我们修改alien_invasion.py代码,导入game_functions模块,并将事件循环替换成对函数check_events()的调用:
函数update_screen()
将更新屏幕的代码移到一个名为update_screen()函数中,并将这个函数放在模块game_functions中:
其中alien_invasion修改如下:
从上面一套流程走下来,我们发现:在实际的开发过程中,我们一开始将代码编写得尽可能的简单,并在项目越来越复杂时进行重构。接下来我们开始处理游戏的动态方面。
驾驶飞船
这里我们要实现的就是使玩家通过左右箭头键来控制飞船的左移与右移。
响应按键
因为在pygame中,每次按键都被注册为KEYDOWN事件,在check_events()中,我们通过event.type检测到KEYDOWN事件后还需进一步判断是哪个按键。代码如下:
允许不断移动
玩家按住右箭头不动时,我们希望飞船能不断地移动,直到玩家松开为止。这里我们通过KETUO事件来判断。因此我们设置一个标志位moving_right来实现持续移动。原理如下:
飞船不动时,标志moving_right将为false。玩家按下右箭头时,我们将这个标志设置为True;玩家松开时,我们将标志重新设置成False。
这个移动属性是飞船属性的一种,我们用ship类来控制,因此我们给这个类增加一个属性名称叫,moving_right以及一个update()方法来检测标志moving_right的状态。
ship
game_functions
最后在alien_invasion中调用update()方法
左右移动
前面我们实现了向右移动,接下来实现向左移动,逻辑类似,代码就不贴了。
调整飞船的速度
当前,每次执行while循环时,飞船最多移动一个像素,我们可以在Settings中添加ship_speed_factor,用于控制飞船的速度。我们将根据这个属性决定飞船每次循环时最多移动多少距离。
Settings:
Ship:
限制飞船的活动范围
如果玩家按住箭头的时间过长,飞船就会消失,那么如何使飞船抵达屏幕边缘时停止移动?这里我们只需要修改Ship类中的update方法,增加一个逻辑判断。
重构
这里我们主要讲check_events()函数进行重构,将其中部分代码分成两部分,一部分处理KEYDOWN事件,一部分处理KEYUP事件。
game_functions:
射击
接下来添加射击功能,使玩家按空格键时发射子弹,子弹将在屏幕中向上穿行,抵达屏幕后消失。
添加子弹设置
在Settings类中增加一些子弹的属性,这里我们创建一个宽3像素,高15像素的深灰色子弹。子弹的速度比飞船稍低。
创建Bullet类
将子弹存储到group中
前面定义了Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都会发射一发子弹。
首先,我们在alien_invasion中创建一个group,用于存储所有的有效子弹。
开火
这里我们修改check_keydown_events()函数,来监听玩家按下空格键的事件。这里还需要修改update_screen()函数,确保屏幕每次更新时,都能重绘每一个子弹。
我们来看下效果:
删除消失的子弹
在alien_invasion中删除消失的子弹。
限制子弹数量
为了鼓励玩家有目标的射击,我们规定屏幕上只能同时存在3颗子弹,我们只需要在每次创建子弹前检查未消失的子弹数目是否小于3即可。
创建update_bullets()函数
为了使alien_invasion中代码更加简单,我们将检查子弹管理的代码,移到game_functions模块中:
创建fire_bullet()函数
这里我们将发射子弹的代码移到一个独立的函数中:
添加外星人,并检测碰撞
在我们完成新的任务之前,我们先给游戏添加一个结束游戏的快捷键Q:
创建第一个外星人
这里和创建飞船的方法一样
创建一群外星人
这里我们首先确定一行能容纳多少个外星人以及要绘制几行。这里改动代码较多,直接看效果:
其实做为一个开发者,有一个学习的氛围跟一个交流圈子是一个特别重要的事情,这里我创建了一个python交流群12546470,不管你是小白还是大牛欢迎入驻,大家一起交流成长。
移动外星人
前面我们创建的是静态的外星人,现在我们需要让外星人动起来。这里我们在Settings类中设置外星人移动的速度,然后通过Alien类中的update的方法来实现移动
射杀外星人
要想射杀外星人,就必须先检测两个编组成员之间是否发生碰撞,在游戏中,碰撞就是游戏元素重叠在一起。
这里我们使用sprite.groupcollide()来检测两个编组的成员之间的碰撞。
子弹击中外星人时,需要立马知道,并同时使被碰撞的外星人立即消失,因此我们需要在更新子弹的位置后立即检测碰撞。
结束游戏
这里我们还需要知道何时该结束游戏,有以下几种情况:
飞船全部被摧毁
外星人到达屏幕底部
实际效果:
计分
最后我们将给游戏添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏。
我们还将实现一个计分系统,能够在玩家等级提高时加快节奏。
添加Play按钮
这里可以先将游戏初始化为非活动状态,当我们点击了按钮,就开始游戏。
由于Pygame中没有内置的创建按钮的方法。因此我们可以通过创建一个Button类来创建一个自带标签的实心矩形。
我们通过检测鼠标发生点击后的坐标是否与我们绘制的按钮发生碰撞与否来判断是否发生了点击事件。
提高等级
为了使玩家将敌人消灭干净后能够提高游戏难度,增加趣味性,这里我们可以在Settings类中进行修改,增加静态初始值,和动态初始值。
记分、等级、剩余飞船
打包成exe可执行文件
上面游戏开发完了,那么你需要将其转成文exe的可执行文件。我们采用pyinstaller,安装步骤参考:
python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了相关推荐
- python纯函数_理想国真恵玩Python从入门到精通第006天_纯函数写游戏管理系统
原标题:理想国真恵玩Python从入门到精通第006天_纯函数写游戏管理系统 前面已经带大家学习了函数,高级数据类型,比如说字典,今天带大家用函数加字典做一个游戏管理系统,希望大家喜欢.废话不多说,直 ...
- 越玩越大,微软中国吹响全面挺进的冲锋号角
越玩越大,微软中国吹响全面挺进的冲锋号角 陈永正加盟微软,毫无悬念地巩固了江山.至此,异己已经排除,自己的兵马也到位.媒体上的刻意低调无法掩饰其中国战略的快马加鞭.对于陈永正而言,从摩托罗拉跳到微软, ...
- Html5在线小游戏 在线玩压扁小鸟(flyBird)游戏源码
这个源码无需后台上传服务器,直接在线即可使用. 该游戏源码是基于HTML5和JavaScript开发的,运行在浏览器中,使得用户能够方便地进行游戏,而且不需要进行任何安装和下载操作.想要玩游戏的用户只 ...
- Pygame实战:记忆差怎么办?别急,增强记忆力的小游戏送给你~【越玩越上瘾】
导语 哈喽!大家好,我是木木子. 今日游戏更新系列来啦,是不是很想知道今天的游戏是什么类型的?立马安排上-- 随着年纪的不断上升,我们开始丢三落四,忘东忘西,记忆力越来越差了! 这不止大人随着年纪增大 ...
- Created with Cocos丨抖音小游戏杀疯了!这几个脑洞清奇的作品越玩越上瘾
据抖音官方公开的数据显示,目前抖音日活用户已超过6亿.在如此大的流量.以及抖音对小游戏业务的大力扶持面前,游戏厂商和开发者恐怕已经很难忽视抖音小游戏平台的发展空间. 而近段时间的抖音小游戏平台上,以& ...
- PS4计算机模块试题,越玩越留恋的PS4独占大作,馋坏了PC玩家,纷纷加入主机行列...
PS4游戏主机是发烧级玩家必有的装备,它的游戏性能远远大于电脑,对于任何的游戏软件优化很强,几乎很少出现卡顿和缺陷,因为它就是为游戏而生,各种游戏也是为主机固件量身定做,那么这个强大的游戏平台,也有自 ...
- 手机计算机怎么玩24点游戏,计算器游戏怎么玩_计算器游戏新手玩法介绍_快吧手游...
计算器游戏怎么玩,新手前期玩法介绍,计算器游戏是怎么操作的,新手要怎么操作上手,想必很玩家也是十分的想知道吧,下面快吧小编带来了这篇攻略,希望能帮助大家,赶紧去看看吧. 计算器游戏怎么玩? 计算器游戏 ...
- python游戏代码运行不了_用Python写游戏,不到十分钟就学会了
安装pygame 请自行下载对应python版本的pygame 运行以下命令 创建Pygame窗口及响应用户输入 新建一个文件夹alien_invasion,并在文件夹中新建alien_invasio ...
- python做的游戏怎么导到微信_微信跳一跳游戏的脚本-scratch导出到微信-微信小程序是怎么做的...
1. 微信更新后出来了一块比较火的小游戏,要是一款不涉及到排行的游戏,可能没人去关注这款游戏.最开自己一直苦练技术,想在微信排行上面装一装,练了好久才跑三百多分.接着在Github(Github地址: ...
最新文章
- oracle循环语句loop,oracle循环语句loop
- linux shell find命令 查找指定时间范围内的文件
- MySQL—04—MySQL的其他对象
- json字符串与java对象的相互转换(jackson)
- 581. 最短无序连续子数组 golang
- Linux PCI网卡驱动分析
- SQL多列查询最大值
- 【ZOJ - 4024】Peak(模拟,水题)
- 5分钟带你看懂 GCanvas渲染引擎的演进
- 2013dgtcs 数字编码
- 读《scikiit-learn机器学习》第七章_决策树
- 微信跳一跳小游戏使用charles抓包工具改分攻略
- yaffs2源码学习2:chunk和block
- python中repr方法_理解Python中的repr()函数 - 程序园
- linux yield_带你通俗易懂的了解——Linux线程模型和线程切换
- Springboot集成百度地图实现定位打卡功能
- C++笔记 蒙特卡罗计算π值
- 关于IOS delegate的weak和assign 探讨
- 节点网络计划图计算机,工程网络计划(网络图)
- Codeforces Round #700 (Div. 2) C. Searching Local Minimum(交互)
热门文章
- Linux内核怎么优化,linux 内核该怎么优化
- Linux系统下安装CodeBlocks
- 依赖配置中心实现注有@ConfigurationProperties的bean相关属性刷新
- Jackson ObjectMapper readValue过程
- form表单ajax提交 ac,請求Ajax 帶返回值的通用方法, 自動獲取頁面控件值(form表單post方法提交 ),自動給控件賦值...
- oracle nvarchar2 字符集不匹配,Oracle中NVARCHAR2字符集不匹配问题
- lede 自定义linux,OpenWrt 和 LEDE 宣布正式合并
- ios nslog 例子_iOS 典型内存泄露案例 - zhenshan2013的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 交流信号叠加直流偏置_放大器偏置电流Ib需要完整的直流回路
- 3090显卡 torch.cuda.is_available()返回false的解决办法