LPC是一种基于C语言开发的编程语言

主要用于写MUD(多使用着迷宫)游戏

LPC是一种面向对象的语言,它有object的概念,但是没有class

LPC有四中函数类型
1> apply 只能被游戏主题(游戏驱动)呼叫的函数
2> efun 外部函数,定义在游戏主题中的函数
3> ifun 本地函数,MUDLIB中的object定义的函数
4> sefun 模拟外部函数,本质上是本地函数,多数是重写了efun(是游戏的核心函数)

LPC与C的差别
①LPC没有指针,没有结构
②存在新的数据类型:对象,映射
③字符串类型存在一定的差异

LPC的Object没有明显的开始和结束标志
LPC是编写“Object”,即LPC程序是由一个或多个“Object”组成,在外部先将代码
用Load_Object(object_name)将代码载入内存

 eg:ob = Load_object(sort.c)
ob->fun1(); // sort.c 中的Public函数 fun1
ob->fun2(); // sort.c 中的Public函数 fun2

在Object中 fun1、fun2 要事先声明 然后再定义0

在Object中 变量是私有的,需要通过函数操作
函数可私有、可共有
变量是Object的一种属性,函数则是对属性的一系列操作

LPC的数据类型(与C相比):

1> 浮点型与整形相加
先向宽字节的变量类型对齐,然后运算
最终结果转换为运算符左边的类型

2> 字符串类型 string
①可用下标 string str_eg = "abcdefg" 则str_eg[1] = "b";
②string相加 str1 = "我们" str2 = "和" + str1 + "大家";
或用 str1 = sprintf("和%s大家", str0);
③line[0..0]和line[0]的区别,linep[0..0]返回的是整个字符串

3> mapping 映射
①mapping a = ( ["ab" = 1], ["cd" = 2])(键值对)
②映射变量存储的是映射的地址、将映射a赋值给映射b: mapping b = a;
此时对b进行操作、a也会改变
③添加 直接加 map[kay] = Value; (会覆盖原有值)
使用 += : map += ([key : value]);
④ 遍历 * array key_arr = keys(map) // 取得map的所有键值,返回键值的数组

 mixed value_temp ;
for(int i = ; i<sizeof(key_arr); i++)
{
value_temp = map[key_arr[i]];
}

*(这种类似于lua的 x in pairs(map)).

loop(member in map); .

此时member包含{key, value, no}(键, 值, 在mapping中的序号)

4> mixed (混合类型) // 类似于C++11 中的auto
* 用于函数的返回值 :private mixed mixed text();
* 用于函数参数:private mixed text(mixed a);
* 不确定函数参数的个数、类型时 参数可以写成(...):
private mixed text(...)

5> 指定类型 var_type
其他类型 + ? : string?
作为函数返回值:
string? append_suffix (string? str)
此时这个类型可以是string类型 同时也可以是UNDEFINE(空类型)

6> array (数组)
① array({ 元素1, 元素2, ... })
元素可以任何类型,不用事先规定大小
② allocate_arry(size, x) 直接规定了数组的大小和数组内元素的初值
③ + a += ({4}) 右边数组的元素 + 到左边,位置在最后
④ - a -= ({2}) 从数组a中扣除右边数组包含的元素(所有值为2的元素)
⑤ "&" 与操作
看第一个集合中的每一个元素,是否在第二个中出现过,所以结果与两个操作几个的先后顺序有关

 eg: s1 = {,,}     //    此时     s1 & s2 为 {1}
s2 = {,,} // s2 & s1 为 {1, 1, 1}

⑥ mapping_array 函数
mapping_array (src, function fun)
mapping_array (src, ( :fun1: ));
将数组中的元素,一个一个作为函数的参数,作用后的结果放入新的数组中传出,数组作为函数的最后一个参数

LPC的运算符

* ".." 表示范围, "<:" 表示倒数
a[0..5]表示取数组的第0个到第5个构成的新数组
1> 左边 小于0,右边大于长度 则返回整个数组
2> 左边大于右边,返回
a[x..<y]
表示取数组的第x个数到数组的倒数第y个 数结束
所以 y最小为1
<< 左移 >> 右移
3 << 4 表示把3 转为2进制,左移4位, 再转为十进制 得出48     3 * 4^2

LPC 语言基础的更多相关文章

  1. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  3. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  4. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  5. 黑马程序员_ C语言基础(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述):   1.Hello W ...

  6. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...

  7. 【GoLang】GO语言系列--002.GO语言基础

    002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...

  8. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  9. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

随机推荐

  1. 微信小程序常见的坑

    wxml的标签跟html里面的一些标签是一样的,比如view标签相当于div标签,text标签相当于span标签. 在微信小程序中,表单元素都是原生组件,微信小程序中原生组件层级最高,所以在用inpu ...

  2. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  3. redis集群篇

    redis集群的搭建 1.为什么要搭建集群(解决单点问题) 通过对redis的简单了解,我们知道redis已经有两种持久化方案rdb和aof.在redis出现宕机后,可能会出现部分的数据损失,但是数据 ...

  4. python中的多线程和多进程编程

    注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...

  5. NB-IoT是怎么工作的,是否支持基站定位?【转】

    转自:http://www.elecfans.com/iot/779658.html 根据我国无线电管理相关要求,明确NB-IoT系统基站应到到属地无线电管理机构办理设台审批,领取无线电台执照.同时, ...

  6. AES加密解密算法

    class Aes { /** * AES加密 * @param $data * @param $secret_key * @return string */ public static functi ...

  7. Linux代理搭建TinyProxy

    操作系统:阿里云CentOS 7.4 64位 安装方法: yum install tinyproxy 配置: vi /etc/tinyproxy/tinyproxy.conf Port 8888 // ...

  8. .Net core----使用容联云短信推送

    一直在忙于写接口,也没有时间去好好的整理的一片文档,写一篇经常的用到的短信推送案例 还是比较喜欢干货  作为有个程序员 有时候复制粘贴习惯了   实在的还是比较实在 比如能用复制解决的为什么不用复制 ...

  9. h1-h3使用

    一个页面也就只允许出现一个h1标签.内容页文章的标题,是seo中使用最多的地方,基本的文章页面标题都是使用h1标签.一.<h1>用来修饰网页的主标题,一般是网页的标题 ,文章标题,< ...

  10. .net mvc的“从客户端中检测到有潜在危险的 Request.Form 值”问题解决

    第一种解决方案 : 在控制器调用的方法上添加[ValidateInput(false)] 第二种解决方案 : 在对应的asp.net web页面上加上ValidateRequest="fal ...