Python开发游戏?也太好用了吧

news2025/1/12 22:50:25

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store

当然可以啦!

现在日常能够用到和想到的场景,绝大多数都可以用Python实现。

效果怎么样暂且不提,但是得益于丰富的第三方工具包,的确让Python能够很容易处理各种各样的场景。

对于游戏开发也是这样,如果真的要想商业化,Python在游戏开发方面肯定没办法和C++相提并论,但是如果用于日常学习和自己玩一玩,Python绝对是够的。

今天,就来给大家介绍8个非常不错的Python游戏开源项目。

1. free-python-games

Star:2.6k

贪吃蛇、迷宫、吃豆人、扫雷、Flappy Bird…这些游戏可以是非常经典,甚至伴随着很多人的童年回忆。那么,你是否想过自己开发一款专属游戏?是否思考过开发这样一款游戏需要多少工作量?

img

free-python-games这个项目给出的答案是50-100行!

几年前,我姐就曾表达了希望我能够抽空教外甥学习编程的想法。对于这份嘱托,我一直放在心上,但是却迟迟找不到合适的方向。

  • 该从哪个方向着手教一个孩子学习编程?
  • 怎么提升一个小孩子对编程的兴趣?

即便是从事几年互联网行业的我来说都对编程都觉得枯燥乏味,何况一个一无所知的孩子呢?

但是,free-python-games这个项目让我眼前一亮,终于找到了一个合适的Python学习项目。当年,它对于成年人同样适用、有价值。

我之所以介绍这款项目,不单单是它实现了让人回到童年的经典游戏。更重要的原因是它能够作为一个Python学习、锻炼探索和理解能力的一款好工具。

free-python-games和我们接触的大多数Python库那样让人如同垒积木一样去实现一项功能不同,你需要去静下心来死锁一款游戏的主题,同时需要去实现游戏中的每一个策略。

img

我觉得这样比拿来即用的搬运工作要有趣很多,且更加具有挑战。

以我们熟知的贪吃蛇为例,当然我们目前对于这款游戏的主题和玩法已经非常清楚了,通过方向键控制蛇的移动,每当吃到一颗食物蛇就会变长,如果撞到墙则游戏结束…

img

那么,对这款游戏进行拆解,就需要思考几个问题:

  • 如何使蛇加速和减速?
  • 如何使蛇绕过边缘?
  • 如何分配新产生食物的位置?
  • 游戏中的蛇如何根据键盘操作做出相应的反应?

看到这里你就会发现,它并不像我们大多数情况下使用Python那样,np.linespace、plt.plot、tf.Session,它更像是LeetCode上面的算法题,需要你从零开始去实现一款游戏,用心去思考游戏实现过程中的每个细节。而在这个过程中对人的提升会非常迅速。

详细的内容可以看我另外一篇文章的介绍:

50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!186 赞同 · 5 评论文章img

2. CDDA-Game-Launcher

Star:401

img

这是游戏《大灾变:黑暗之日》的开源实现,并在原来的基础上增添了很多新特性。

这款开源项目已经实现了很多游戏模块,例如启动游戏、检测游戏版本号、模组管理、保存和自动备份等等。

3. fofix

Star:375

img

这是 Frets on Fire X,一款高度可定制的节奏游戏,支持最多四名玩家的吉他、贝斯、鼓和人声游戏的多种模式。 它是 Unreal Voodoo 对原始 Frets on Fire 进行的一系列修改的延续。

4. Lutris

Star:6k

img

严格来说,Lutris并不是一款单纯的游戏,它是一个开源的视频游戏平台,通过它可以安装和玩来自不同年代的大多数游戏。

Lutris通过利用和组合现有的模拟器、引擎重新实现和兼容不同平台。

客户端可以连接 Humble Bundle、GOG 和 Steam 等现有服务,使游戏库易于访问。 游戏下载和安装是自动的,可以通过用户制作的脚本进行修改。

5. pychess

Star:556

img

用Python实现的一款国际象棋客户端,适用于 Linux/Windows系统。

6. PySolFC

Star:366

img

一个全面的、功能丰富的、开源的、可移植的纸牌游戏合集,适用于Windows、Linux、macOS。

7. term2048

Star:798

img

曾经风靡一时的2048小游戏,这是用Python实现的一款终端下可以玩的2048游戏。

8. Unknown-Horizons

Star:1.3k

img

开源即时策略游戏《Unknown Horizons》(美丽新世界) 官方开源的代码,基于Python开发。

建议大家有空可以多浏览Github,有很多好用的开源免费工具。但是,目前Github上项目多如牛毛,而且刷榜现在也非常严重,想要找到优质的项目变得越来越难。这里,给大家推荐Github上一个非常不错的项目《DevWeekly》,这个项目每周都会精挑细选一些优质的开源项目,涵盖C++、JAVA、JavaScript、Python、Go等不同编程语言。此外,还有一些开源工具、优秀的技术文章,而且考虑到很多同学访问Github不方便的问题,我还特意同步到了Gitee,建议大家看一下:

https://gitee.com/sharetech_lee/DevWeekly

hello,大家好,我是Jackpop,重点大学本科毕业后保送到哈工大计算数学专业读研,有多年国内头部互联网、IT公司工作经验,先后从事过计算机视觉、推荐系统、后端、数据等相关工作。如果同学们在升学考研、职业规划、高考志愿、简历优化、技术学习等方面有困惑,欢迎大家前来咨询!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制包安装公有云版k8s

目录公有云版k8s的架构是怎样的公有云中创建k8s实例的过程如下二进制法创建k8s的一般过程Kubernetes的重要性check nodes每台服务器执行基线配置CA rootetcd HA cluster根据CA根证书创建etcd的专有CA证书将etcd注册成为systemd服务配置各master节点的etcd.confansible配置各个m…

4线SPI驱动OLED常规操作

拿到一块点阵屏幕,首先找卖家拿驱动例程 步骤 目录 1.void LCD_IO_Cfg(void) 2.void wr_cmd(u8 wrcmd) 3.void wr_data(u8 wrdata) 4.void init_lcd(void) 5.void disp_all(void) 6.void Fresh(void) 注:根据商家的时序图可以知道数据在上升沿/下降…

[附源码]Node.js计算机毕业设计高校学科竞赛报名系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

CBCC3 – A CBCC Algorithm with Improved Exploration/Exploitation Balance

0、论文背景 本文是在CBCC1和CBCC2的基础上提出了CBCC3。在本文中,证明了过度探索和过度开发是现有CBCC变体中性能损失的两个主要来源。在此基础上,提出了一种新的基于贡献的算法,可以在探索和开发之间保持更好的平衡。 Omidvar M N, Kazimi…

复现readme中的一个坑...

今天在运行一个项目的时候“Molecule Optimization via Fragment-based Generative Models”:GitHub - ninglab/Modof: The implementation of Modof for Molecule Optimization 然后妈的死活运行不出来,就是说在运行readme的时候都不行,我看…

Win10系统下与VMware中Ubuntu20.04建立共享文件夹

一、在VMware中设置 二、在Ubuntu中设置 1.在终端中输入下面命令,列出步骤一中设置的VMware共享文件夹名称,说明可以挂载 ~$ vmware-hgfsclient 返回 ubuntushare 2.执行下面命令,创建共享文件夹专用的挂载目录 ~$ sudo mkdir -p /mnt/hgfs …

基于ESP32-S3方案的2.1寸旋钮屏ZX2D10来了,同步分享ESP32应用功能技术之「WEB API接口」

启明智显基于ESP32-S3与国产芯高效开发平台8ms设计开发的一款磁编码结构的旋钮屏。结构紧凑、简单,外观精致;支持WIFI、蓝牙,语音交互等功能。 产品说明: 1. 使用乐鑫ESP32-S3 WI-FI SOC芯片,SOC提供WI-FI与BLE连接能力…

Java容器源码重点回顾——CopyOnWriteArrayList

1. CopyOnWriteArrayList概述 之前介绍过ArrayList,但是我们知道ArrayList是线程不安全的。如果多个线程同时写数据,就会抛出ConcurrentModificationException。然后我们又学过Vector,它的实现方式是在方法中都加入synchronized关键字&#…

selenium自动测试常用脚本

一、控制已经打开页面的浏览器(已登录状态) 1、简述: 自动化执行时,一些页面操作需要用户是登录状态才能进行访问。如果每次运行自动化脚本都需要重新登录、输入短信验证码,不利于自动化快速运行。因此,需…

[附源码]Python计算机毕业设计高校学生宿舍管理信息系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

C语言易错的选择判断题解析

有定义语句:int a10;,则表达式a的值是10。 ( A ) A.正确 B.错误 以下程序段完全正确的是( A ) A.int k, *p&k; scanf(“%d”,p); B.int k,*p: *p&k;scanf(“%d”,p); C.int *p;scanf(“%d”,p); D.51 以下程序段运行后,循环体运行…

Java发布和溢出简述

发布和溢出前言前置知识发布溢出简述类型案例环境发布溢出溢出类型1——未完全初始化就企图获取该对象中数据溢出类型2——在构造函数中调用非private和final的方法前言 回顾《Java并发编程实战》,这里附上一些总结和小案例加深理解。这里重点是对溢出的阐释。 前…

差分约束

前置知识: 最短路问题、SPFA判环,为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节! 引出 当我们遇到一个不等式组,比如下面这个 \begin{cases} x_{1}-x_{3} \leq 5 \\ x_{1}-x_{2} \leq 2 \\ x_{2}-x_{…

3.2 图像分类

文章目录LeNet(小图像)LeNet在手写数字识别上的应用LeNet在眼疾识别数据集iChallenge-PM上的应用数据集准备查看数据集图片定义数据读取器启动训练AlexNet(大图像)VGG(深度)GoogLeNet(深度兼广度…

苹果电脑怎么用移动硬盘ntfs?快速读取和编辑Mac外置移动硬盘

苹果电脑怎么用移动硬盘ntfs?如果你对电脑比较熟悉的话,可能知道NTFS磁盘格式。该格式专门为Windows系统设计的,也称为Windows NT文件系统。从Windows系统迁移到Mac可能是一项相当困难的任务,因为NTFS格式的硬盘在Mac上不能正常工…

音视频面试涨知识(一)

1 直播中为什么会出现花屏、黑屏、闪屏? 主播没有打开摄像头权限,推流端没有做好权限校验处理。 采集Camera数据,就要开始编码,如果编码失败,没有推送数据,那就会黑屏。 拉流段遇到不支持的视频格式&…

某讯滑块验证码反汇编分析-第二章

某讯滑块验证码反汇编分析-第二章反汇编难点分析反汇编帮助跟踪参数生成函数反汇编难点分析 首先就是上一章提到的,指令的顺序是会变的 假设某序号为1的指令为【I[I.length - 2] I[I.length - 2] I.pop();】 这个指令可能在下一次请求的时候,序号变…

C++ Reference: Standard C++ Library reference: Containers: map: map: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/end/ 公有成员函数 <map> std::map::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept;返回指向结束的iterator 返回一个指…

常用代码模板2——基础算法

构思算法&#xff1a;可以先想暴力解法&#xff0c;然后观察时间复杂度&#xff0c;如果超时&#xff0c;再考虑优化&#xff0c;优化的方向就是时间复杂度要下降&#xff0c;下表可以给出一些算法选择的参考&#xff1a; 暴力枚举 -> 枚举优化 -> 正解 数据范围时间复…

Qt扫盲-QTabWidget理论总结

QTabWidget理论总结1. 简述2. 用法流程3. 选项卡设置3. 页面信息3. 外观4. 扩展1. 简述 QTabWidget 提供一个选项卡栏和一个“页面区域”&#xff0c;用于显示与每个选项卡相关的页面。默认情况下&#xff0c;选项卡栏显示在页面区域上方&#xff0c;但可以使用不同的配置&…