百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Puzzlescript,一种开发H5益智游戏的引擎

zhezhongyun 2025-03-02 19:56 74 浏览

译者 | 陈峻

审校 | 孙淑娟

目前,在企业与客户(B2C)领域,无论是Web应用还是内部软件,通常可以被分为:发布、搜索、执行和对话四种类型。本文着眼于第五种类别:个人娱乐类。我将和您逐步探索一个开源式的HTML5益智游戏的开发过程和平台。

若干年前,著名的游戏制作人Stephen Lavelle为Increpare公司开发了Puzzlescript工具。它是专门针对推箱子式游戏,来制定游戏规则的脚本和平台。当然,此类推箱子式游戏,可能对您说过于原始,我们完全可以使用其Puzzlescript库开发出属于自己的各种有趣的变体小游戏。

1.定义游戏的规则、级别和块

让我们首先从创作者的角度来审视Puzzlescript平台:所有游戏都可以被分为不同的级别。玩家角色可以使用箭头键,或“W”、“A”、“S”和“Z”键来移动和操作。任何级别的关卡都是由像素较差的块对象所组成。这些对象的排列方式会逐渐变得复杂,并形成阻止您获胜的障碍。在原版的推箱子游戏中,可被推动的物体包括:墙壁、板条箱、以及带有圆点的地板。您只有完成一个关卡,才能进入下一个关卡。

有了前面的基础,咱们来讨论一下如何定义自己的游戏规则,设计关卡,绘制组件,以及使用Puzzlescript脚本来编写游戏代码。

首先,我们可以设定如下规则:如果玩家向某个板条箱移动,那么该板条箱本身也应朝着相同的方向移动:

[> Player | Crate] -> [> Player | > Crate]1.

这代表了推箱子中的标准交互逻辑。程序代码可以将其解读为“将左侧的模式(玩家移动到带有固定板条箱的正方形处)替换为右侧(玩家移动到正方形,板条箱移动到下一个正方形)”。在准备解读的过程中,您需要考虑游戏引擎如何去检查那些即将发生的动作,进而重新绘制游戏。如果您是一名Z时代的益智游戏玩家的话,可以参考“Baba is You”这款热门游戏的基本逻辑。

下面让我们详细讨论一个名为Manic Ammo的特殊Puzzlescript游戏的代码。该游戏基于某人被困在弹药掩体中的故事背景。当您点击底部的“hack”链接后,便可以看到屏幕被分成了三个窗口。

右上角的窗口允许您按照当前编译的方式运行游戏。因此,如果您单击它,并按下空格键,游戏会在此窗口中进行。而我们更感兴趣的是位于左侧的源代码窗口。您可以看到“对象”标题,以及下方一长串格式化的数据。它表示的是游戏将以5×5的方块的视觉效果予以呈现。而且,其基本颜色由带有数字代码所定义。

例如,下图中的“玩家”角色便是由黑色和粉红色的头部所组成,其腹部为黄色。

上述清单的其余部分按照不同的标题被区别开来,其中的“规则”部分就包含了您较为熟悉的Puzzlescript代码:

=====
RULES
=====
[Bang] -> [background]
[boom] -> restart
[> player][Droid] -> [> player][> Droid]
[> Player | Shell] -> [> Player | > Shell]
[> Droid | Shell] -> [> Droid | > Shell]1.2.3.4.5.6.7.8.

由上述代码可知,玩家可以像我们前面的例子那样,以推箱子的方式,去推动某个掩体。

通过这样的快速访问方式,其他游戏开发者能够通过对现有代码的增、删、调整,来迅速构建自己的游戏。例如,您可以通过在上述规则下,添加一行代码,来修改游戏的规则,并触发游戏并从头开始构建:

[> Player | target] -> [target | > Player]1.

可见,“Winconditions”是完成一个关卡所需要满足的单一规则。值得一提的是,黑客也可以运用上述方式,去破坏现有的游戏逻辑与运行。

==============
WINCONDITIONS
==============
All Player on Target1.2.3.4.

当然,这也是一种参与应用程序修改的直接方式。游戏开发者完全可以将应用代码上传到GitHub处,然后要求其他开发者将其克隆到本地运行,以避免Web状态对于游戏体验带来的实际影响。从理论上说,这是一种“低摩擦”的参与方法(例如:通过添加代码行,来查看同一个页面上发生的变化)将有助于将参与者逐步通过实际代码的调试,来提高游戏编程的水平,并最终成为全栈式游戏创造者。

2.Puzzlescript平台

使用Puzzlescript编写小游戏无疑是对开发和设计技能的一项很好的测试。当您在公司的实际项目中开发和支持某些应用或工具时,您可能会注意到这样一种实践逻辑:某个工具或应用只有拥有了专业的社区和广泛的用户,才能得到蓬勃的发展与迭代。Puzzlescript同样适用这个道理。经历了十来年的发展,Puzzlescript已经拥有了成熟的论坛,以及一大批忠实的拥护者,其中不乏内容创作者、设计师、黑客、玩家、维护者、以及策展人。就连Stephen本人也在持续对该平台进行补充与开发。

下面,我来看看如何在该平台上搜索和运行游戏。在展览库页面上,您可以通过游戏的名称或作者姓名来进行搜索。如果您比较熟悉该平台的话,也可以使用其他一些标签元数据。由于每个游戏都可以被表示为一个链接,因此其他网站可以根据自己的展示意愿,通过使用URL,进行有效的游戏策划。例如Philschatz网站便是按照游戏的大小和挑战难度来进行分类的。实际上,平台的所有当前游戏列表都会被保存在一个json文件中,便于您导出自己的索引,或是托管到itch.io之类的平台上。

3.小结

通过上文讨论,我们了解了什么是Puzzlescript,推箱子类游戏的基本原理,以及如何定义相关规则。同时,我们也讨论了用户该如何创建自己的游戏,如何修改他人的作品,以及如何通过论坛与其他开发者、乃至某个游戏的作者直接进行沟通与交流。鉴于该平台本身构建在开源的Github上,您何不自行设计一款小型游戏,来练习一下自己的全栈平台开发能力呢?

原文链接:
https://thenewstack.io/puzzlescript-a-devs-guide-to-an-html5-puzzle-game-engine/

译者介绍:

陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施控,专注传播网络与信息安全知识与经验。

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...