zoukankan      html  css  js  c++  java
  • LPC 语言基础

    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)将代码载入内存

    1 eg:ob = Load_object(sort.c)
    2 ob->fun1();       // sort.c 中的Public函数 fun1
    3 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的所有键值,返回键值的数组

    1 mixed value_temp ;
    2 for(int i = 0; i<sizeof(key_arr); i++)
    3 {
    4 value_temp = map[key_arr[i]];
    5 }


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


     1 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的元素)
    ⑤ "&" 与操作
    看第一个集合中的每一个元素,是否在第二个中出现过,所以结果与两个操作几个的先后顺序有关

    1 eg: s1 = {123}     //    此时     s1 & s2 为 {1}
    2 s2 = {111}          //               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

  • 相关阅读:
    SharePoint 2013 文档库中PPT转换PDF
    Linux线程-互斥锁pthread_mutex_t
    利用Python,四步掌握机器学习
    linux 文件夹权限及umask
    Android.mk入门(一)
    《Linux性能及调优指南》----1.1 Linux进程管理
    从进程到线程
    从程序到进程
    Android源码解析系列
    嵌入式工程师必读100本专业书籍
  • 原文地址:https://www.cnblogs.com/kpxy/p/10170581.html
Copyright © 2011-2022 走看看