Python不能做游戏?一小时做出一个游戏!

article/2025/8/23 23:51:19

        嗨喽~小伙伴们,我又来了,      

        写在前面的话: 

       

        一直都听他们说,python做不出好的游戏,个人是不赞同的,我只能说,python可以用来写游戏,但不适合

        举个最简单的例子,弹弓可以用来拔牙吗?当然可以,只不过人们不用弹弓而已。现在主流的大型游戏的制作,主要用的是C++或者C#,但是,python也可以写出比较好的大型游戏,比如《EVE》,《文明》等等。

        但,说句实话,python有两个缺点,一是速度慢,二是语法缺陷

        速度慢是python这类解释性语言的通病。

        而语法缺陷,举个例子,一个格斗类游戏,武器有如下类型:弓箭,枪,刀等,那么在C++或者C#中,声明一把武器为对应类型可以这样写:

箭 A = xxx;
枪 B = xxx;
刀 C = xxx;

        而若用python,由于python不需要类型声明,写出来就会是这样的:

A = xxx
B = xxx
C = xxx

        很显然,如果用python编写武器实例,会让人摸不着头脑:A是什么武器?B是什么武器?当代码量超级大的时候,区分A到底是什么类型时,就显得非常麻烦。

        此外,python还有许多不适合做游戏的缺点,但是,对于小型游戏,加上python语言的简洁性,其还是有用武之地的。

        笔者学习编程的第一门语言,便是python,而学习python的第一个应用,便是游戏制作,可以说,是游戏制作让我喜欢上了python,喜欢上了编程。虽然,用python制作游戏已经不太推荐了,但怀着一种对python的热爱,我写了这系列博文。

         】

        在python众多的第三方库中,用于制作游戏的库主要是pygame,下面我们来详细介绍这个库的使用。

        首先,我们来写一个世界上最“无聊”的游戏(看不懂的小伙伴们先放一放):


import sys,pygame
from pygame.locals import *
pygame.init()
DISPLAY_SURF = pygame.display.set_mode((400,300))
pygame.display.set_caption("Hello World~")
while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()

        它的运行结果是这样的:

                        

         没错,就是屏幕中央的一个黑乎乎的窗口,啥都没有。但是,这是我们学习python游戏制作的第一步。我们来解释一下每一行代码的具体含义:

import sys,pygame
from pygame.locals import *

        第一行,导入 sys库(用于游戏终止退出等的控制)和 pygame库(用于绘制图形,播放声音,处理鼠标输入等操作) 。

        第二行,导入pygame库中定义的许多常量,同时使用“from modulename import *”的形式可以不加“pygame.locals.” 而直接调用里面的函数。

pygame.init()

        第三行, 调用了pygame库的初始化函数init(),用于对pygame库的初始化。简单来说,就是调用这个函数后会强制要求系统检查一遍pygame库中的模块是否有缺失,并返回有关信息。这是保证我们写的游戏能够正常运行的基础。

DISPLAY_SURF = pygame.display.set_mode((400,300))

        第四行,调用pygame.display.set_mode()函数,会创建一个窗口。它的参数是一个元组(a,b),这个元组告诉set_mode()函数,应该创建一个宽度为a像素,高度为b像素的窗口。重要的是,该函数返回一个Surface对象(后面介绍),现在只需知道,之后要对这个窗口进行更新,监测等操作,都需要操作这个Surface对象

pygame.display.set_caption("Hello World~")

        set_caption("标题") 用于给窗口设置一个标题。

while True:    # main game loopfor event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()

        第五行,用了一个条件始终为真的while循环。如果没有while循环,前面编写的窗口会“一闪而过”消失,为了保证窗口不消失,我们使用while循环。如果想要退出程序,主要有两种方式,一是执行一条break语句跳出循环,二是调用 sys.exit() 终止程序。  

        大家可以看到,while循环后面加了一条注释 “# main game loop”。游戏循环(game loop,也叫做主循环,main loop),循环中主要做三件事情:

  1. 处理事件
  2. 更新游戏状态
  3. 在屏幕上绘制游戏状态

        什么是"事件"?简单来说,诸如用户的鼠标点击,键盘输入等都可以看成一个个事件,自然,当用户发出一个“事件”后,我们的游戏需要有响应,这就是“处理事件”。 

        什么是“游戏状态”?简单来说,游戏状态包括记录游戏中玩家的生命值,位置,分数等,都是游戏状态。而当任何时候,玩家的生命值,位置,分数等发生变化的时候,就称作游戏状态发生改变,自然,更新游戏状态也是游戏正常运行的基础。此外,如果你玩过可以存盘类的游戏,就会理解,当暂停或退出游戏是,游戏会保存该时刻的“游戏状态”,以便下次打开游戏,它能调出之前的游戏状态并继续游戏。而这些游戏状态的记录,只需要几个变量即可搞定。

        while循环里,调用了 pygame.event.get() 函数。任何时候,当用户做了诸如按下一个按键鼠标点击某个区域等操作时,Pygame库都会创建一个 pygame.event.Event 对象来保存这些操作,也就是之前说的“事件”,而调用pygame.event.get() 函数便可以获得游戏里发生了哪些事件,从而作出针对性的处理,该函数返回一个 pygame.event.Event 对象的列表,这个列表,包含了自上次调用 pygame.event.get() 函数之后所发生的所有事件

         pygame.event.Event 对象有一个 type 属性,它告诉我们这个事件对象到底是何种事件,比如上述代码中的“QUIT”事件,当用户点击窗口上方的“X”退出时,会触发这个事件。

        所有的这些事件类型,都放在 pygame.locals 下,作为一个个常量变量。

        上述代码中,当事件是“QUIT”时,调用 pygame.quit() 函数和 sys.exit() 函数,pygame.quit()函数与pygame.init()函数相反,它执行完后会使Pygame库停止工作。而sys.exit()则是终止程序运行。一般而言,pygame.quit()函数的调用在sys.exit()函数之前

        最后一句:“pygame.display.update()”用于更新屏幕显示。具体来说,它把前面的pygame.display.set_mode()所返回的Surface对象(存储在DISPLAY_SURF变量中)绘制到屏幕上。如果这个Surface对象没有做任何修改,那么每次调用pygame.display.update()函数后,将会重新绘制相同的黑色窗口。

        这样,整个程序就是让一个黑色的窗口绘制到屏幕上,然后不断地检查QUIT事件,不断重复地将黑色的窗口绘制到屏幕上,除此之外,啥都不干:

​​​​​​​ 

        下一章,我们将学习Surface对象Color对象Rect对象Pygame提供的绘制函数等内容,来了解如何将一些有趣的内容展示在这个窗口中,而不是只有黑压压的一片。点击跳转:

        Python不能做游戏?Pygame中的对象你了解吗?

      ​​​​​​​         

                                


http://chatgpt.dhexx.cn/article/YCuCEjRN.shtml

相关文章

【含源码】用python做游戏有多简单好玩

有很多同学问我还有其他什么小游戏吗,游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦,喜欢…

python做小游戏之一小迷宫游戏

趣味python一迷宫小游戏 读取外部迷宫地图 既然是编写小游戏,那么自然少不了pygame模块,编译环境使用的是pycharm。 迷宫小游戏设计思想是,我们自己绘制迷宫地图文档,然后程序根据我们设计的地图把迷宫绘制到pygame游戏界面当中来…

一日一技:用Python做游戏有多简单 (2)

现在用Python来制作游戏越来越方便,虽然某些方面有所限制。但是利用Pygame工具包基本能制作所有的2D游戏在制作的同时对游戏的理解也会更加深刻,因为本质上都是对图片的定位和图片碰撞的判断,从而以此为原理衍生出各种各样的游戏类型。 接下…

一日一技:用Python做游戏有多简单

自从表白代码发了以后,有很多同学问我除了这种表白的,还有其他什么小游戏吗,游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如果使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小…

利用python制作自己的小游戏,超简教程

懒得客套,直接步入主题 首先,利用python来做游戏需要用到python中的pygame模块,这个我们在终端cmd中安装 输入:pip install pygame 安装好后我们进入pycharm查询我们有的模块(打开路径:文件-设置&#xf…

如何用python做游戏(简单易上手版)【送 源码】

嗨害大家好鸭,我是小熊猫🖤 很多小伙伴后台私信问我说, “python可以做游戏吗 ?” “要怎么做呢?” 接下来我就介绍一下, 如何用Python做游戏 有什么python相关报错解答自己不会的、或者源码资料/模块…

python小游戏-移动木板

文章目录 一、游戏简介二、编写步骤1.引入库2.初始化3.相关自定义函数4.相关自定义函数 一、游戏简介 本游戏是通过python编写的小游戏,给初学者熟悉python编程语言抛砖引玉,希望有所帮助。 成型的效果图如下: 二、编写步骤 1.引入库 代码…

UDP over Socks5 实现全局透明代理

Socks5代理协议很强大,不光可以实现HTTP/HTTPS代理的TCP隧道代理功能,类似connect,还可以实现HTTP代理不能做到的UDP代理功能。 要知道UDP代理的重要过程,以方便我们排查错误,我们还需要了解Socks5协议对UDP代理方式的…

阿里P7测开岗大手子手把手教你【软件测试秘籍】

本人阿里CTO线测试开发岗,入职阿里系已有两年,从事软件测试岗位五年有余。双非一本计算机系出身,大佬说不上,今天跟学弟学妹分享一下我这几年的学习软件测试心得。 一、 熟练使用SQL 常用的 sql 语句一定会写。比如说增删改查之类…

软件测试人员必备的60个测试工具清单,建议收藏一波~

据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因此软件…

软件测试精华总结,入门到精通全流程(必看,知识点很全)

软件测试基础 软件测试的概念 通过一系列手段去证明软件是符合用户需求的,满足质量要求的。预期结果和实际结果的一个对比。 软件测试分类 按方法分:黑盒测试、白盒测试、灰盒测试 黑盒测试:把软件比作一个“黑匣子”,不考虑具体是内部是如何实现的,只考虑外部功能的运行…

400 页共计 800 道软件测试面试真题汇总,2022年吐血整理

800 道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题…

软件测试人员必备的60个测试工具清单,果断收藏了!

前言 据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因…

软件测试面试题集(含答案)

软件测试面试题集 一、Bug基本要素 缺陷ID,状态,类型,所属项目,所属模块,缺陷提交时间,缺陷提交人(检测者),严重程度,优先级别,缺陷描述信息&…

常用的软件测试工具清单,建议收藏。

常用的测试工具有10类: 1.测试管理工具 2.接口测试工具 3.性能测试工具 4.C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 1.测试管理工具 1,TestDirector(大而全) 2&…

什么是软件测试,软件测试究竟是做什么的

我犹豫了很久,想来想去还是写了一篇文章,这篇文章可以告诉你什么是软件测试? 来看看官方的回答: 软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话…

swiper自定义分页器使用

解决问题:不想使用swiper的自带的圆钮式的分页器,想使用自定义的分页器。 解决方案:利用swiper提供的paginationCustomRender()方法(自定义特殊类型分页器,当分页器类型设置为自定义时可用。) 下面的代码可…

element-ui 分页器的使用

1. ui组件 1.在element-ui找到Paginaion分页器 打开代码拷贝第四个组件 2. 在vue template里写 //分页区 <el-pagination size-change"handleSizeChange" current-change"handleCurrentChange":current-page"queryInfo.pagenum" :page-size…

分页器的使用-1 自己找的分页器插件

这个插件是自己网上找的&#xff0c;具体代码如下&#xff1a; 具体步骤&#xff1a;1. 先引入css和js2. 分页器放在请求成功之后&#xff0c;3. 最重要的中间件就是currentPage&#xff1a;当前页码。4. 具体代码详情都在里面写清楚了。用到的js文件&#xff1a; https://pa…

vue实战-分页器

vue实战-分页器 1.分页器静态组件 因为是公共全局组件&#xff0c;在components里新建文件夹Pagination&#xff0c;并将分页器的静态组件填入 静态组件 <template><div class"pagination"><button>1</button><button>上一页</b…