标签 游戏 下的文章

学习编程虽然对有些人来说是件乐事,但是对大多数人来说仍然是一件比较枯燥困难的事情。当然,面临这样困惑的人,并不是只有你一个,所以,这世界上就出现了许多寓教于乐的通过游戏的形式来教你编程的网站。

在这篇文章中,我们对 200 多个编程游戏网站的各个方面进行了评估,包括是否免费、是否自由开源、是面对菜鸟还是有经验的程序员、支持的编程语言等等,然后遴选出这 12 个上佳的免费的编程游戏网站,希望能让你或你的朋友(或者你的孩子)真正喜欢上编程。

CodinGame

这是一个需要编程一个 AI 机器人,然后由它来解决各种面临的问题的有趣游戏。支持各种编程语言。

网站: https://www.codingame.com/

Code Combat

CodeCombat 是一个在真正的游戏中教学生们学习计算机编程的平台。这是一个社区项目,有上百位玩家贡献者们创建了各种关卡。支持 Java、JavaScript、Python、Lua、CoffeeScript 等语言。

网站:https://codecombat.com/play

Screeps

在游戏中学习 JavaScript 编程。该游戏号称它是世界上第一个面向程序员的大型多人在线(MMO)战略沙盒游戏。

网站: https://screeps.com/

Check iO

Check iO 是一个基于浏览器的游戏,你需要使用 Python 或 JavaScript 来解决问题才能将游戏进行下去(需要登录)。

网站:https://checkio.org/

Vim Adventures

通过游戏来学习 Vim。

网站: http://vim-adventures.com/

Cyber DoJo

Cyber-dojo 是一个程序员实战编程的地方。支持 JavaScript、Java、Python、PHP、Ruby 等语言。

网站: http://www.cyber-dojo.org/

源代码:https://github.com/JonJagger/cyber-dojo

Code Monkey

通过尝试捕获香蕉来学习编程。可以用来教孩子们学习编程(付费的)。

网站: https://www.playcodemonkey.com/

Elevator Saga

电梯编程游戏,需要一步步解决问题过关。比如说第一关是在 60 秒内运输 15 个人。

网站: http://play.elevatorsaga.com/

源代码:https://github.com/magwo/elevatorsaga

Codewars

通过挑战来精湛编程技艺。在真实的编程挑战中提升技能。支持 JavaScript、Python、C#、Java、Python 等语言。

网站: http://www.codewars.com/

Ruby Quiz

Ruby Quiz 是一个面向 Ruby 程序员的每周编程挑战,当前已经有 156 个竞赛挑战。

网站: http://rubyquiz.com/

Git Games

git-game 是一个基于终端的游戏,它用来教授 git 中的那些非常酷的功能。游戏的主题内容是搜寻,通过 git 命令来找到线索,解开谜题。

网站: http://www.git-game.com/

Hacker Org

hacker.org 挑战赛是一系列的拼图、敲砖块、测试和智力题,用来测试你的黑客能力。要通过这一系列的考验,你需要破解加密、写出精巧的代码,揭开重重迷雾。

网站: http://www.hacker.org/

好了,以上就是我们挑选出来的 12 个编程游戏,何不试试?

在这个系列中,我们基于多人游戏 贪吃蛇 来制作一个异步的 Python 程序。上一篇文章聚焦于编写游戏循环上,而本系列第 1 部分则涵盖了如何异步化

4、制作一个完整的游戏

4.1 工程概览

在此部分,我们将回顾一个完整在线游戏的设计。这是一个经典的贪吃蛇游戏,增加了多玩家支持。你可以自己在 (http://snakepit-game.com) 亲自试玩。源码在 GitHub 的这个仓库。游戏包括下列文件:

  • server.py - 处理主游戏循环和连接。
  • game.py - 主要的 Game 类。实现游戏的逻辑和游戏的大部分通信协议。
  • player.py - Player 类,包括每一个独立玩家的数据和蛇的展现。这个类负责获取玩家的输入并相应地移动蛇。
  • datatypes.py - 基本数据结构。
  • settings.py - 游戏设置,在注释中有相关的说明。
  • index.html - 客户端所有的 html 和 javascript代码都放在一个文件中。

4.2 游戏循环内窥

多人的贪吃蛇游戏是个用于学习十分好的例子,因为它简单。所有的蛇在每个帧中移动到一个位置,而且帧以非常低的频率进行变化,这样就可以让你就观察到游戏引擎到底是如何工作的。因为速度慢,对于玩家的按键不会立马响应。按键先是记录下来,然后在一个游戏循环迭代的最后计算下一帧时使用。

现代的动作游戏帧频率更高,而且通常服务端和客户端的帧频率是不相等的。客户端的帧频率通常依赖于客户端的硬件性能,而服务端的帧频率则是固定的。一个客户端可能根据一个游戏“嘀嗒”的数据渲染多个帧。这样就可以创建平滑的动画,这个受限于客户端的性能。在这个例子中,服务端不仅传输物体的当前位置,也要传输它们的移动方向、速度和加速度。客户端的帧频率称之为 FPS( 每秒帧数 frames per second ),服务端的帧频率称之为 TPS( 每秒滴答数 ticks per second )。在这个贪吃蛇游戏的例子中,二者的值是相等的,在客户端显示的一帧是在服务端的一个“嘀嗒”内计算出来的。

我们使用类似文本模式的游戏区域,事实上是 html 表格中的一个字符宽的小格。游戏中的所有对象都是通过表格中的不同颜色字符来表示。大部分时候,客户端将按键的码发送至服务端,然后每个“滴答”更新游戏区域。服务端一次更新包括需要更新字符的坐标和颜色。所以我们将所有游戏逻辑放置在服务端,只将需要渲染的数据发送给客户端。此外,我们通过替换通过网络发送的数据来减少游戏被破解的概率。

4.3 它是如何运行的?

这个游戏中的服务端出于简化的目的,它和例子 3.2 类似。但是我们用一个所有服务端都可访问的 Game 对象来代替之前保存了所有已连接 websocket 的全局列表。一个 Game 实例包括一个表示连接到此游戏的玩家的 Player 对象的列表(在 self._players 属性里面),以及他们的个人数据和 websocket 对象。将所有游戏相关的数据存储在一个 Game 对象中,会方便我们增加多个游戏房间这个功能——如果我们要增加这个功能的话。这样,我们维护多个 Game 对象,每个游戏开始时创建一个。

客户端和服务端的所有交互都是通过编码成 json 的消息来完成。来自客户端的消息仅包含玩家所按下键码对应的编号。其它来自客户端消息使用如下格式:

[command, arg1, arg2, ... argN ]

来自服务端的消息以列表的形式发送,因为通常一次要发送多个消息 (大多数情况下是渲染的数据):

[[command, arg1, arg2, ... argN ], ... ]

在每次游戏循环迭代的最后会计算下一帧,并且将数据发送给所有的客户端。当然,每次不是发送完整的帧,而是发送两帧之间的变化列表。

注意玩家连接上服务端后不是立马加入游戏。连接开始时是 观望者 spectator 模式,玩家可以观察其它玩家如何玩游戏。如果游戏已经开始或者上一个游戏会话已经在屏幕上显示 “game over” (游戏结束),用户此时可以按下 “Join”(参与),来加入一个已经存在的游戏,或者如果游戏没有运行(没有其它玩家)则创建一个新的游戏。后一种情况下,游戏区域在开始前会被先清空。

游戏区域存储在 Game._field 这个属性中,它是由嵌套列表组成的二维数组,用于内部存储游戏区域的状态。数组中的每一个元素表示区域中的一个小格,最终小格会被渲染成 html 表格的格子。它有一个 Char 的类型,是一个 namedtuple ,包括一个字符和颜色。在所有连接的客户端之间保证游戏区域的同步很重要,所以所有游戏区域的更新都必须依据发送到客户端的相应的信息。这是通过 Game.apply_render() 来实现的。它接受一个 Draw 对象的列表,其用于内部更新游戏区域和发送渲染消息给客户端。

我们使用 namedtuple 不仅因为它表示简单数据结构很方便,也因为用它生成 json 格式的消息时相对于 dict 更省空间。如果你在一个真实的游戏循环中需要发送复杂的数据结构,建议先将它们序列化成一个简单的、更短的格式,甚至打包成二进制格式(例如 bson,而不是 json),以减少网络传输。

Player 对象包括用 deque 对象表示的蛇。这种数据类型和 list 相似,但是在两端增加和删除元素时效率更高,用它来表示蛇很理想。它的主要方法是 Player.render_move(),它返回移动玩家的蛇至下一个位置的渲染数据。一般来说它在新的位置渲染蛇的头部,移除上一帧中表示蛇的尾巴的元素。如果蛇吃了一个数字变长了,在相应的多个帧中尾巴是不需要移动的。蛇的渲染数据在主类的 Game.next_frame() 中使用,该方法中实现所有的游戏逻辑。这个方法渲染所有蛇的移动,检查每一个蛇前面的障碍物,而且生成数字和“石头”。每一个“嘀嗒”,game_loop() 都会直接调用它来生成下一帧。

如果蛇头前面有障碍物,在 Game.next_frame() 中会调用 Game.game_over()。它后通知所有的客户端那个蛇死掉了 (会调用 player.render_game_over() 方法将其变成石头),然后更新表中的分数排行榜。Player 对象的 alive 标记被置为 False,当渲染下一帧时,这个玩家会被跳过,除非他重新加入游戏。当没有蛇存活时,游戏区域会显示 “game over” (游戏结束)。而且,主游戏循环会停止,设置 game.running 标记为 False。当某个玩家下次按下 “Join” (加入)时,游戏区域会被清空。

在渲染游戏的每个下一帧时也会产生数字和石头,它们是由随机值决定的。产生数字或者石头的概率可以在 settings.py 中修改成其它值。注意数字的产生是针对游戏区域每一个活的蛇的,所以蛇越多,产生的数字就越多,这样它们都有足够的食物来吃掉。

4.4 网络协议

从客户端发送消息的列表:

命令参数描述
new\_player[name]设置玩家的昵称
join 玩家加入游戏

从服务端发送消息的列表:

命令参数描述
handshake[id]给一个玩家指定 ID
world[[(char, color), ...], ...]初始化游戏区域(世界地图)
reset\_world 清除实际地图,替换所有字符为空格
render[x, y, char, color]在某个位置显示字符
p\_joined[id, name, color, score]新玩家加入游戏
p\_gameover[id]某个玩家游戏结束
p\_score[id, score]给某个玩家计分
top\_scores[[name, score, color], ...]更新排行榜

典型的消息交换顺序:

客户端 -> 服务端服务端 -> 客户端服务端 -> 所有客户端备注
new\_player 名字传递给服务端
handshake 指定 ID
world 初始化传递的世界地图
top\_scores 收到传递的排行榜
join 玩家按下“Join”,游戏循环开始
reset\_world命令客户端清除游戏区域
render, render, ...第一个游戏“滴答”,渲染第一帧
(key code) 玩家按下一个键
render, render, ...渲染第二帧
p\_score蛇吃掉了一个数字
render, render, ...渲染第三帧
... 重复若干帧 ...
p\_gameover试着吃掉障碍物时蛇死掉了
top\_scores更新排行榜(如果需要更新的话)

5. 总结

说实话,我十分享受 Python 最新的异步特性。新的语法做了改善,所以异步代码很容易阅读。可以明显看出哪些调用是非阻塞的,什么时候发生 greenthread 的切换。所以现在我可以宣称 Python 是异步编程的好工具。

SnakePit 在 7WebPages 团队中非常受欢迎。如果你在公司想休息一下,不要忘记给我们在 Twitter 或者 Facebook 留下反馈。


via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/

作者:Kyrylo Subbotin 译者:chunyang-wen 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

(题图来自:wallpaperinhd.net-wallpaper.html))

最近,著名的测评网站 phoronix.com 进行了三个 Windows 和 Linux 性能方面的测评: Windows vs. Linux AMDGPU-PRO / RadeonSI testingGTX 1080 Windows vs. Linux resultsIntel Windows vs. Linux benchmarks,通过将这三个测评的数据使用 OpenBenchmarking.org 进行合并归一,可以得出一个令人伤心的结论:大部分游戏在 Linux 下的性能不及 Windows 。与原生的 Windows 游戏的性能相比,很多 Linux 移植版游戏的性能简直就是垃圾,或者说,就像垃圾一样。

以下是一些游戏在 Windows 下和 Linux 下的性能比较:

Phoronix 的老读者们都知道,Linux 版本的 虚幻引擎 Unigine 演示的效果与 Windows 相比差距不少,不过过去了这些年,虚幻引擎在 Linux 下的测试性能已经接近了 Windows 版本了,这主要是因为 Linux 下的 GPU 驱动问题越来越少了。这是一个不多的好消息。

《Xonotic》是一个开源的跨平台第一人称视角的射击游戏,在 Linux 下的 Intel 驱动的性能差的令我们吃惊,不过其它的驱动看起来还好。我们考虑这里肯定有一些需要特定优化的地方。

《古墓丽影》在 Linux 下的性能十分之糟,只有 Windows 下的一半左右。

超级房车赛:汽车运动 GRID Autosport 》在 Linux 下的性能只有 Windows 下的 60% 左右。

Valve 的《Dota 2》 / Source 2 引擎的性能不错!这应该是整个测试中唯二让人满意的结果了。

中土世界:暗影魔多 Middle-Earth: Shadow of Mordor 》的 Linux 下的性能要比其它的 Linux 游戏稍好一些,但是仍然不能同 Windows 下的相比。

《F1 2015》的性能也非常糟糕。

这简直太糟糕了,如此多的 Linux 游戏与其对应的 Windows 下的游戏相比性能差的不是一点半点,不管是什么显卡或驱动都是这样。希望过些时间下一代的游戏能够借助 Vulkan 提升其性能表现吧。

我能在 Linux 上玩游戏吗 ?

这是打算投奔 Linux 阵营的人最经常问的问题之一。毕竟,在 Linux 上面玩游戏经常被认为有点难以实现。事实上,一些人甚至考虑他们能不能在 Linux 上看电影或者听音乐。考虑到这些,关于 Linux 的平台的游戏的问题是很现实的。

在本文中,我将解答大多数 Linux 新手关于在 Linux 中打游戏的问题。例如 Linux 下能不能玩游戏,如果能的话,在哪里下载游戏或者如何获取有关游戏的信息。

但是在此之前,我需要说明一下。我不是一个 PC 上的玩家或者说我不认为我是一个在 Linux 桌面游戏玩家。我更喜欢在 PS4 上玩游戏并且我不关心 PC 上的游戏甚至也不关心手机上的游戏(我没有给我的任何一个朋友安利糖果传奇)。这也就是你很少能在 It's FOSS 上很少看见关于 Linux 上的游戏的原因。

所以我为什么要提到这个主题?

因为别人问过我几次有关 Linux 上的游戏的问题并且我想要写出来一个能解答这些问题的 Linux 游戏指南。注意,在这里我不只是讨论在 Ubuntu 上玩游戏。我讨论的是在所有的 Linux 上的游戏。

我能在 Linux 上玩游戏吗 ?

是,但不是完全是。

“是”,是指你能在Linux上玩游戏;“不完全是”,是指你不能在 Linux 上玩 ‘所有的游戏’。

感到迷惑了吗?不必这样。我的意思是你能在 Linux 上玩很多流行的游戏,比如反恐精英以及地铁:最后的曙光等。但是你可能不能玩到所有在 Windows 上流行的最新游戏,比如实况足球 2015

在我看来,造成这种情况的原因是 Linux 在桌面系统中仅占不到 2%,这样的占比使得大多数开发者没有开发其游戏的 Linux 版的动力。

这就意味指大多数近年来被提及的比较多的游戏很有可能不能在 Linux 上玩。不要灰心。还有别的方式在 Linux 上玩这些游戏,我们将在下面的章节中讨论这些方法。但是,在此之前,让我们看看在 Linux 上能玩的游戏的种类。

要我说的话,我会把那些游戏分为四类:

  1. Linux 原生游戏
  2. Linux 上的 Windows 游戏
  3. 浏览器里的游戏
  4. 终端里的游戏

让我们以最重要的一类, Linux 的原生游戏开始。

1. 在哪里去找 Linux 原生游戏 ?

原生游戏指的是官方支持 Linux 的游戏。这些游戏有原生的 Linux 客户端并且能像在 Linux 上的其他软件一样不需要附加的步骤就能安装在 Linux 上面(我们将在下一节讨论)。

所以,如你所见,有一些为 Linux 开发的游戏,下一个问题就是在哪能找到这些游戏以及如何安装。我将列出一些让你玩到游戏的渠道。

Steam

Steam 是一个游戏的分发平台。就如同 Kindle 是电子书的分发平台, iTunes 是音乐的分发平台一样, Steam 也具有那样的功能。它提供购买和安装游戏,玩多人游戏以及在它的平台上关注其他游戏的选项。其上的游戏被 DRM 所保护。”

两年以前,游戏平台 Steam 宣布支持 Linux ,这在当时是一个大新闻。这是 Linux 上玩游戏被严肃对待的一个迹象。尽管这个决定更多地影响了他们自己的基于 Linux 游戏平台以及一个独立 Linux 发行版 Steam OS ,这仍然是令人欣慰的事情,因为它给 Linux 带来了一大堆游戏。

我已经写了一篇详细的关于安装以及使用 Steam 的文章。如果你想开始使用 Steam 的话,读读那篇文章。

GOG.com

GOG.com 是另一个与 Steam 类似的平台。与 Steam 一样,你能在这上面找到数以百计的 Linux 游戏,并购买和安装它们。如果游戏支持好几个平台,你可以在多个操作系统上安装他们。你可以随时游玩使用你的账户购买的游戏。你也可以在任何时间下载。

GOG.com 与 Steam 不同的是前者仅提供没有 DRM 保护的游戏以及电影。而且,GOG.com 完全是基于网页的,所以你不需要安装类似 Steam 的客户端。你只需要用浏览器下载游戏然后安装到你的系统上。

Portable Linux Games

Portable Linux Games 是一个集聚了不少 Linux 游戏的网站。这家网站最特别以及最好的点就是你能离线安装这些游戏。

你下载到的文件包含所有的依赖(仅需 Wine 以及 Perl)并且他们也是与平台无关的。你所需要的仅仅是下载文件并且双击来启动安装程序。你也可以把文件储存起来以用于将来的安装。如果你网速不够快的话,我很推荐你这样做。

Game Drift 游戏商店

Game Drift 是一个只专注于游戏的基于 Ubuntu 的 Linux 发行版。但是如果你不想只为游戏就去安装这个发行版的话,你也可以经常去它的在线游戏商店去看哪个游戏可以在 Linux 上运行并且安装他们。

Linux Game Database

如其名字所示,Linux Game Database是一个收集了很多 Linux 游戏的网站。你能在这里浏览诸多类型的游戏并从游戏开发者的网站下载/安装这些游戏。作为这家网站的会员,你甚至可以为游戏打分。 LGDB 致力于成为 Linux 游戏界的 IMDB 或者 IGN。

Penguspy

此网站由一个不想用 Windows 玩游戏的玩家创立。Penguspy 聚集了一些 Linux 下最好的游戏。在这里你也能分类浏览游戏,如果你喜欢这个游戏的话,你可以跳转到游戏开发者的网站去下载安装。

软件源

看看你自己的发行版的软件源。其中可能有一些游戏。如果你用 Ubuntu 的话,它的软件中心里有一个游戏的分类。在一些其他的发行版里也有,比如 Linux Mint 等。

2. 如何在 Linux 上玩 Windows 的游戏 ?

到现在为止,我们一直在讨论 Linux 的原生游戏。但是并没有很多 Linux 上的原生游戏,或者更准确地说,火的不要不要的游戏大多不支持 Linux,但是都支持 Windows PC 。所以,如何在 Linux 上玩 Windows 的游戏?

幸好,由于我们有 Wine 、 PlayOnLinux 和 CrossOver 等工具,我们能在 Linux 上玩不少的 Windows 游戏。

Wine

Wine 是一个能使 Windows 应用在类似 Linux , BSD 和 OS X 上运行的兼容层。在 Wine 的帮助下,你可以在 Linux 下安装以及使用很多 Windows 下的应用。

在 Ubuntu 上安装 Wine或者在其他 Linux 上安装 Wine 是很简单的,因为大多数发行版的软件源里都有它。这里也有一个很大的 Wine 支持的应用的数据库供您浏览。

CrossOver

CrossOver 是 Wine 的增强版,它给 Wine 提供了专业的技术上的支持。但是与 Wine 不同, CrossOver 不是免费的。你需要购买许可。好消息是它会把更新也贡献到 Wine 的开发者那里并且事实上加速了 Wine 的开发使得 Wine 能支持更多的 Windows 上的游戏和应用。如果你可以接受每年支付 48 美元,你可以购买 CrossOver 并得到他们提供的技术支持。

PlayOnLinux

PlayOnLinux 也基于 Wine 但是执行程序的方式略有不同。它有着更好用的,不同的界面。与 Wine 一样,PlayOnLinux 也是免费使用。你可以在开发者自己的数据库里查看它支持的应用以及游戏

3. 网页游戏

不必说你也应该知道有非常多的基于网页的游戏,这些游戏都可以在任何操作系统里运行,无论是 Windows ,Linux ,还是 OS X 。大多数让人上瘾的手机游戏,比如帝国之战就有官方的网页版。

除了这些,还有 Google Chrome 在线商店,你可以在 Linux 上玩更多的这些游戏。这些 Chrome 上的游戏可以像一个单独的应用一样安装并从应用菜单中打开,一些游戏就算是离线也能运行。

4. 终端游戏

使用 Linux 的一个附加优势就是可以使用命令行终端玩游戏。我知道这不是最好的玩游戏的方法,但是在终端里玩贪吃蛇或者 2048 很有趣。在这个博客中有一些好玩的的终端游戏。你可以浏览并安装你喜欢的游戏。


如何保证游戏的版本是最新的 ?

当你了解了不少的在 Linux 上你可以玩到的游戏以及你如何使用他们,下一个问题就是如何保持游戏的版本是最新的。对于这件事,我建议你看看下面的博客,这些博客能告诉你 Linux 游戏世界的最新消息:

  • Gaming on Linux:我认为我把它叫做 Linux 游戏专业门户并没有错误。在这你可以得到关于 Linux 的游戏的最新的传言以及新闻。它经常更新, 还有由 Linux 游戏爱好者组成的优秀社区。
  • Free Gamer:一个专注于免费开源的游戏的博客。
  • Linux Game News:一个提供很多的 Linux 游戏的升级的 Tumbler 博客。

还有别的要说的吗?

我认为让你知道如何开始在 Linux 上的游戏人生是一个好事。如果你仍然不能被说服,我推荐你做个双系统,把 Linux 作为你的主要桌面系统,当你想玩游戏时,重启到 Windows。这是一个对游戏妥协的解决办法。

现在,这里是你说出你自己的想法的时候了。你在 Linux 上玩游戏吗?你最喜欢什么游戏?你关注了哪些游戏博客?

请在下面发表你的评论,你怎样在 Linux 上玩游戏?

  1. 我玩原生 Linux 游戏,也用 Wine 以及 PlayOnLinux 运行 Windows 游戏
  2. 我喜欢网页游戏
  3. 我喜欢终端游戏
  4. 我只玩原生 Linux 游戏
  5. 我用 Steam
  6. 我用双系统,要玩游戏时就换到 Windows
  7. 我不玩游戏

via: http://itsfoss.com/linux-gaming-guide/

作者:Abhishek 译者:name1e5s 校对:PurlingNayuki

本文由 LCTT 原创编译,Linux中国 荣誉推出

在2014年和2015年,Linux 涌入了一堆流行的付费游戏,例如备受欢迎的无主之地(Borderlands)、巫师(Witcher)、死亡岛(Dead Island) 和 CS 系列游戏。虽然这是令人激动的消息,但玩家有这个支出预算吗?付费游戏很好,但更好的是由了解玩家喜好的开发者开发的免费的替代品。

前段时间,我偶然看到了一个三年前发布的 YouTube 视频,标题非常的有正能量 5个不算糟糕的开源游戏。虽然视频表扬了一些开源游戏,我还是更喜欢用一个更加热情的方式来切入这个话题,至少如标题所说。所以,下面是我的一份五大超酷开源游戏的清单。

Tux Racer

Tux Racer

Tux Racer

《Tux Racer》是这份清单上的第一个游戏,因为我对这个游戏很熟悉。最近,我的兄弟和我为了参加玩电脑的孩子们项目,在去墨西哥的路途中,Tux Racer 是孩子和教师都喜欢玩的游戏之一。在这个游戏中,玩家使用 Linux 吉祥物——企鹅 Tux——在下山雪道上以计时赛的方式进行比赛。玩家们不断挑战他们自己的最佳纪录。目前还没有多玩家版本,但这是有可能改变的。它适用于 Linux、OS X、Windows 和 Android。

Warsow

Warsow

Warsow

《Warsow》网站介绍道:“设定是有未来感的卡通世界,Warsow 是个完全开放的适用于 Windows、Linux 和 Mac OS X平台的快节奏第一人称射击游戏(FPS)。Warsow 是跨网络的尊重和体育精神的的艺术。(Warsow is the Art of Respect and Sportsmanship Over the Web. 大写回文字母组成 Warsow。)” 我很不情愿的把 FPS 类放到了这个列表中,因为很多人玩过这类的游戏,但是我的确被 Warsow 打动了。它对很多动作进行了优先级排序,游戏节奏很快,一开始就有八个武器。卡通化的风格让玩的过程变得没有那么严肃,更加的休闲,非常适合和亲友一同玩。然而,它却以充满竞争的游戏自居,并且当我体验这个游戏时,我发现周围确实有一些专家级的玩家。它适用于 Linux、Windows 和 OS X。

M.A.R.S——一个荒诞的射击游戏

M.A.R.S. - A ridiculous shooter

M.A.R.S.——一个荒诞的射击游戏

《M.A.R.S——一个荒诞的射击游戏》之所以吸引人是因为它充满活力的色彩和画风。支持两个玩家使用同一个键盘,而一个在线多玩家版本目前正在开发中——这意味着想要和朋友们一起玩暂时还要等等。不论如何,它是个可以使用几个不同飞船和武器的有趣的太空射击游戏。飞船的形状不同,从普通的枪、激光、散射枪到更有趣的武器(随机出来的飞船中有一个会对敌人发射泡泡,这为这款混乱的游戏增添了很多乐趣)。游戏有几种模式,比如标准模式和对方进行殊死搏斗以获得高分或先达到某个分数线,还有其他的模式,空间球(Spaceball)、坟坑(Grave-itation Pit)和保加农炮(Cannon Keep)。它适用于 Linux、Windows 和 OS X。

Valyria Tear

Valyria Tear

Valyria Tear

Valyria Tear 类似近年来拥有众多粉丝的角色扮演游戏(RPG)。故事设定在奇幻游戏的通用年代,充满了骑士、王国和魔法,以及主要角色 Bronann。设计团队在这个世界的设计上做的非常棒,实现了玩家对这类游戏所有的期望:隐藏的宝藏、偶遇的怪物、非玩家操纵角色(NPC)的互动以及所有 RPG 不可或缺的——在低级别的怪物上刷经验直到可以面对大 BOSS。我在试玩的时候,时间不允许我太过深入到这个游戏故事中,但是感兴趣的人可以看 YouTube 上由 Yohann Ferriera 用户发的‘Let’s Play’系列视频。它适用于 Linux、Windows 和 OS X。

SuperTuxKart

SuperTuxKart

SuperTuxKart

最后一个同样好玩的游戏是 SuperTuxKart,一个效仿 Mario Kart(马里奥卡丁车)但丝毫不逊色的好游戏。它在2000年-2004年间开始以 Tux Kart 开发,但是在成品中有错误,结果开发就停止了几年。从2006年开始重新开发时起,它就一直在改进,直到四个月前0.9版首次发布。在游戏里,我们的老朋友 Tux 与马里奥和其他一些开源吉祥物一同开始。其中一个熟悉的面孔是 Suzanne,这是 Blender 的那只吉祥物猴子。画面很给力,游戏很流畅。虽然在线游戏还在计划阶段,但是分屏多玩家游戏是可以的。一个电脑最多可以供四个玩家同时玩。它适用于 Linux、Windows、OS X、AmigaOS 4、AROS 和 MorphOS。


via: http://fossforce.com/2015/08/five-super-cool-open-source-games/

作者:Hunter Banks 译者:H-mudcup 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

当我在这里提到了 ZX81 电脑时,我已经暴露了我的年龄。ZX81 是一个由英国开发者(Sincilair 研究所)生产的家庭电脑,它拥有"高达" 1KB 的内存!上面的 1KB 并不是打印错误,这个家庭电脑确实只配置有 1KB 的板载内存。但这个内存大小上的限制并没有阻止爱好者制作种类繁多的软件。事实上,这个机器引发了一代编程奇才的出现,这让他们掌握了让程序在该机上运行起来的技能。这个机器可以通过一个 16 KB 的内存卡来进行升级,这就提供了更多的编程可能。但未经扩展的 1KB 机器仍然激励着编程者们发布卓越的软件。

1K ZX Chess

我最喜爱的 ZX81 游戏有: 模拟飞行(Flight Simulation), 3D 版怪物迷宫(3D Monster Maze), 小蜜蜂(Galaxians), 以及最重要的 1K ZX Chess。 只有最后一个程序是为未扩展版的 ZX81 电脑设计的。事实上,David Horne 开发的 1K ZX Chess 只使用了仅仅 672 字节的 RAM(LCTT 译注:如果读者有兴趣,可以看看这里对该程序的代码及解释)。尽管如此,该游戏尽力去实现大多数的国际象棋规则,并提供了一个计算机虚拟对手。虽然一些重要的规则被忽略了(如:王车易位,兵的升变,和吃过路兵) (LCTT 译注:参考了这里这里),但能够和人工智能相对抗,这仍然令人惊讶。这个游戏占据了我逝去的青春里的相当一部分。

1K ZX Chess 保持了在所有计算机上国际象棋的最小实现的地位长达 33 年之久,直到今年由 BootChess 打破了该记录,紧接着由 Toledo AtomChess 打破。这三个程序都没有实现所有的国际象棋规则,所以为了完整性,我介绍了我最喜爱的那些实现了所有国际象棋规则的极小的国际象棋。

Linux 有着一系列极其强大的国际象棋引擎,如 Stockfish, Critter, Togo II, Crafty, GNU Chess 和 Komodo 。 在这篇文章精选的国际象棋程序虽敌不过这些好的国际象棋程序,但它们展示了使用微不足道的代码库究竟可以实现多少东西。


Toledo Atomchess

你可能已经看到了大量有关 BootChess 新闻报道,这个只用 487 字节写就的国际象棋程序,一举打破了先前最小的国际象棋程序 1K ZX Chess 的记录。所以,Óscar Toledo Gutiérrez 挽起袖子自己编写了一个更加紧凑的国际象棋游戏。Toledo Atomchess 是仅有 481 字节的 x86 汇编代码,都能放到引导扇区里。 在难以置信的代码大小下,这个引擎实现了一个可玩的国际象棋游戏。

特点包括:

  • 基本的棋子移动
  • 用 ASCII 文本表现的棋盘
  • 以代数形式来输入移动(注:如 D2D4)
  • 3 层的搜索深度

显然,为了将这个国际象棋程序压缩到 481 字节中,作者必须做出某些牺牲,这些局限包括:

  • 没有兵的升变
  • 没有王车易位
  • 没有吃过路兵
  • 没有移动确认

该作者也使用 C,JavaScript 和 Java 来写这个国际象棋程序,每种实现都非常小。


BootChess

BootChess 是一个国际象棋的极其小巧的计算机实现。这个程序被塞进到仅仅 487 字节里,并可运行在 Windows, Mac OS X 和 Linux 等操作系统。BootChess 的棋盘和棋子单独用文本表示,其中 P 代表兵, Q 用来代表王后,以及“点”代表空白格子。

特点包括:

  • 象棋棋盘和用户输入的形象的文本表示
  • 引导扇区大小(512 字节)的可玩的象棋游戏
  • 只需 x86 bios 硬件引导程序(没有软件依赖)
  • 所有主要的正规移动包括双兵开局
  • 兵升变为王后(与 1k ZX Chess 相反)
  • 名为 taxiMax > minMax half-ply 的 CPU 人工智能
  • 硬编码的西班牙白子开局

同样,它也存在一些重要的限制。这些遗漏的功能包括:

  • 兵的低升变(升变为非王后的棋子)
  • 吃过路兵
  • 没有王车易位
  • 3 次位置重复和局规则(注:下一步之前,同样的移动出现了两次;可以参考这里
  • 50 步移动和局规则(注:在连续的50个回合内,双方既没有棋子被吃掉,也没有兵被移动过,则和局;可以参考这里
  • 没有开放式和封闭式布局
  • 一个或多个 minMAX/negaMax 全层人工智能
  • 网站: www.pouet.net/prod.php?which=64962
  • 开发者: Olivier "Baudsurfer/RSi" Poudade
  • 协议: WTFPL v2
  • 版本号: .02

Micro-Max

Micro-Max 是一个用 133 行 C 语言写就的象棋源程序。

作者实现了一个 hash 变换表,该引擎检查输入移动的合法性,以及支持 FIDE(注: World Chess Federation 缩写,参见其官网) 的全部规则,除了低升变。

特点包括:

  • 递归的 negamax 搜索
  • 反夺的静态搜索
  • 反夺规则的扩展
  • 迭代深化
  • 最佳移动优先的 排序
  • 存储分数和最佳移动的 Hash 表
  • 完整的 FIDE 规则(除了低位升变)和移动合法性检查

还有一个 1433个字符的较大版本,但允许你使用完整的 FIDE 规则的低升变。


via: http://www.linuxlinks.com/article/20150222033906262/ChessBytes.html

作者:Frazer Kline 译者:FSSlc 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出