本文节选自《LPC语言基础教程:从零学习游戏开发》,版权归@mudren,欢迎转载,但必须注明来源(mud.ren)。
第一节 LPC语言简介
LPC语言的起源
LPC(The LPMUD Creation Language),是一款从C语言衍生出来的面向对象编程语言,由 Lars Pensjö 于 1989 年开发,主要用来开发MUD游戏(但其能力不限于MUD游戏开发),使用LPC语言开发的MUD游戏统称 LPMUD。
MUD(/mʌd/),原指多用户地牢(Multi-User Dungeon)[1],后又被称为多用户空间(Multi-User Dimension)与多用户领土(Multi-User Domain),台湾用户通常直接称呼为MUD。通常将缩写字直译为“网络泥巴”或是简称“泥巴”(英文mud的意思为泥巴)。MUD是一款多人即时的虚拟世界,通常以文字描述为基础。MUD结合了角色扮演、砍杀、玩家与玩家对战、交互小说与在线聊天等元素,玩家可以阅读或查看房间、物品、其他玩家、非玩家角色的描述,并在虚拟世界中做特定动作。玩家通常会透过输入类似自然语言的指令来与虚拟世界中的其他玩家交互。
传统的MUD实现了一个在幻想的世界居住着虚构的种族与怪物的角色扮演游戏,玩家可以选择职业来获得特定的技能或力量。这种游戏的目标是要杀死怪物、探索幻想的世界、完成任务、去冒险、透过角色扮演来构成故事并升级已创建的角色。许多 MUD采用了龙与地下城系列游戏的职骰规则做为决定人物属性的基础。
使用幻想的背景设置对MUD来说是常见的,许多人使用了科幻小说的背景设置或以热门的书籍、电影、动画、历史、居住者拟人化动物的世界等等的题材。 并非所有的MUD都是游戏,有一部分MUD是设计做为教育用途的,有些则为纯聊天的环境。
LPC语言的特点
简单易学
LPC语言是一门类C语言,LPC语言的基础语法和C语言完全一致,但没有指针等复杂的操作,又比C语言简单,学习起来非常容易。很多没有任何编程基础的玩家参考现有的游戏源代码也能进行简单的二次开发。
很多开发者认为简单易学功能强大的两门编程语言php和python中的很多特色在LPC中都有类似的实现
免费开源
LPC语言的驱动FluffOS是免费开源的,你可以通过源代码学习这门语言的底层机制,而LPC语言开发的游戏也有大量开源的项目值得学习参考。
跨平台
作为一门解释型语言,驱动支持Ubuntu/windows/macos系统,你的程序在任意支持的平台上都能运行。
面向对象
LPC 既支持面向过程的编程又支持面向对象的编程。在面向过程的语言中,程序围绕着过程或者函数构建。在面向对象的语言中,程序围绕结合数据和方法的对象构建。LPC有一种非常强大又极其简单的 OOP 方法,特别是与 C++ 或者 Java 等大型语言相比而言。
解释执行
LPC 是解释型语言,脚本代码可以在运行时加载、修改和重新编译,非常适合动态更新游戏内容而不需重启服务器。
沙箱机制
LPC 代码运行在受限的“沙箱”中,安全性高。系统通过权限控制防止脚本破坏服务器或访问敏感资源。
支持多任务 / 多用户
由于是为多人在线游戏设计,LPC 天生支持事件响应、玩家交互、定时任务等机制。
另外LPC还可以直接调用外部系统命令,这样你可以直接使用Python、Lua、Javascript、php、bash等脚本扩展你的功能。
LPC语言和C语言
LPC语言和C语言一样,源文件使用.c后缀,但和C语言相比,主要有以下不同点:
- LPC语言在数据类型上有较大的调整,去掉了字符型、短整型、长整型等数据类型,也增加了字符串、混合、映射等数据类型,而且对整型、浮点型的取值范围也有调整。
- LPC语言引入面向对像特性,只是没有现代面向对象编程中明确的使用关键词
class定义类的概念,在LPC语言中有 class,但实际是C语言中的结构体(struct)。在LPC中就是每一个 .c 文件都是一个类,只是这个类兼具静态类和非静态类的特征,即可以直接调用也可以实例化,在LPMUD中,所有内容都是对象(角色、物品、房间……),这些对象都是类的实例或静态调用。 - LPC语言中没有主函数
int main(),虽然有一个功能类似的函数void create(),但这个函数也不是必须的,而是类的构造函数。 - LPC语言的系统函数(称为efun)全部是由游戏驱动提供,而不像C语言是由函数库提供,而且LPC语言的系统函数和C语言是完全不同的(有部分同名甚至功能也相同的函数如printf(),也有同名但功能有差异的函数如sscanf())。
- LPC语言中内存永远不会显式回收,垃圾回收机制上LPC语言和C语言不同。
- LPC语言严格意义上算是解释型语言,虽然在解释运行之前也有经过内部编译,但和C语言的编译型是完全不同的。
C语言发展到现在有很多版本的标准,如:ANSI C(C89)、C99、C11、C18,每个版本都有一些特性改进,因为LPC语言是1989年诞生的,在学习LPC时,如果说到LPC语言和C语言的不同,我们默认以C89为标准。
LPC语言中的面向对象编程
现代高级语言的面向对象编程都是定义类,而对象是类的实例。但是LPC语言中很非主流,没有明确声明类的概念,只有原始对象(也称蓝图对象 blueprint object)和对象的复制。但是在面向对象编程中,类就是对象的蓝图,在LPMUD中每一个 .c 文件(蓝图对象)都是一个类,游戏中每一个复制对象都是这个类的实例,具体内容后续章节会详细介绍。
LPC语言的前景
C语言是计算机入门必学的一门语言,只是C语言对专业程序员大神是神器,用来开发操作系统和服务器软件无往不利,但对小白来说,啥也不是,你会的那点C语言什么也做不了,工作都找不到。对多数人来说,学C语言只是用来掌握高级语言的入门工具,学完就丢了,好像啥也干不了。
但是LPC是一门类C语言,其实掌握了C语言,对LPC的语法也掌握了80%以上,反过来说,学会了LPC语言,对C语言的基础也掌握了大半。LPC语言除了做 lpmud 开发,用来做为C语言的实战是非常不错的,只要你能区分哪些是LPC语言独有的,通过LPC开发,也能快速积累大量C语言开发经验,单独用C语言你一点成就感也没有,但使用LPC你能轻易的开发一款网络游戏,不像图像游戏一样需要音效视觉处理,只要想好怎么用代码实现功能并用文字描述出来就好。
因为上手简单,LPC语言也适合做青少年编程入门实战的工具。目前少儿编程做为热点,一方面培养的是孩子的编程思维,另一方面通过趣味编程掌握开发语言,而LPC语言开发因为是纯文字的对少儿不太合适,但其简单又能快速开发互动游戏的特色,对青少年编程入门学习还是非常适合的。
虽然说LPC做为为游戏开发而诞生的语言,提供了this_player()、living()等针对游戏的特色函数,更适合游戏开发,但是毕竟是一款功能完善、语法先进的面向对象编程语言,LPC并不是只能开发MUD游戏,也十分适合作为服务端编程语言提供后台服务,比如作为手机游戏的服务端,还适合开发以文字为主的轻小说游戏。