Email:

Mama 脚本编程指导

你可以使用Mama编程语言在程序中编写脚本。 该语言的结构和语法非常类似Python,但是支持3D对象操作。 有两种方式输入脚本: 使用“脚本”程序块,或者使用自由脚本窗口(仅当“使用自由脚本编程”的配置参数设置为“真”)。 两种模式都允许你输入你需要的任何代码,其根本区别在于执行时间:
  • 根据程序的控制流 - 类似一般的代码行,程序块脚本在程序运行过程中执行。
  • 自由脚本在world程序启动时运行。
内容

基础知识

Mama允许你使用“打印”命令打印任何你需要的东西并输入到控制台:
 
打印 "哈喽 Mama!"	#打印“妈妈你好!”
 
 
写在“#”符号后面的文字都是注释。
你也可以定义一个持有上面字符串的变量,然后打印出来:
 
define s="哈喽 Mama!"
打印 s		#打印“妈妈你好!”
 
 
注意: 变量必须在使用之前通过“定义”关键字定义。 如果使用未定义的变量,会发生语法错误:
 
s="哈喽 Mama!"
打印 s
 
 
输出:
 
名称异常: 名称未定义
错误修复选项:
1. 验证名称拼写正确
2. 验证名称在使用前已定义
 


数学

下面一个程序向你展示Mama中的数学操作:
 
名称异常 - 名称's'没有定义
错误修复选项:
	1. 验证名称拼写正确
	2. 验证名称在使用前被定义
 
输出是:
 
12 5 17
12 5 60
12 5 2.4
 
我们可以用较短的形式编写上一个程序,并带有解释信息:
 
define 一=12, b=5, ç
ç = 一+b
打印 一,b,ç
ç = 一*b
打印 一,b,ç
ç = 一/b
打印 一,b,ç
 
 
输出是:
 
a= 12 b= 5 a+b= 17
a= 12 b= 5 a*b= 60
a= 12 b= 5 a/b= 2.4
 


列表

你可以有任何类型的列表 - 数字,字符串,对象等。 而且,列表可以包含不同类型的元素。
你可以通过括号操作符定义项的列表(“(” 和“)”)并使用下标访问它的元素 (“[]”):
 
12 5 17
12 5 60
12 5 2.4
 
 
数字列表可以通过范围操作符 ("..")创建:
 
define 一=12, b=5
打印 "一=",一,"b=",b,"一+b=",一+b
打印 "一=",一,"b=",b,"一*b=",一*b
打印 "一=",一,"b=",b,"一/b=",一/b
 
 
 
列表可以指派给变量:
 
一= 12 b= 5 一+b= 17
一= 12 b= 5 一*b= 60
一= 12 b= 5 一/b= 2.4
 
 


表/映射

表用来把键映射到对象。 例如:
 
define 字母=("一", "b", "ç", "Ð", "é", "f")
打印 字母[4]		#打印:电子
打印 字母[1,2,3]	#打印:(乙,丙,四)
打印 字母[1..4]		#打印:(二,三,四,五)
 
打印 字母.长度()	#打印:6
 
字母.("p")		#加上'p'来了列表的末尾
字母.移除("ç")		#删除'c'的从列表
打印 字母			#打印:(甲,乙,D和E,氟,磷)
 
字母.相反()		#הופכתאתסדרהאיבריםבסדרה
打印 字母			#打印:(磷,氟,电子,D组,B,1)
 
字母.分类()			#排序列表
打印 字母			#打印:(甲,乙,D和E,氟,磷)
 
 
 


控制流

如果/否则

条件陈述在Mama中使用关键字“如果”,“否则”和“否则如果”编写。
 
打印 2..5		 #创建列表(2,3,4,5),并打印它
打印 12..20 @ 3 #创建一个子列表(12,13,14,15,16,17,18,19,20),其中包含的元素(12,15,18),然后打印它
 
 

循环

Mama有3中循环:“对于”,“当”和“重复”。
“对于”循环可以用来循环列表中的元素: p
 
define 一,b,ç
一,b,ç=10,-2,"哈喽"
打印 一,b,ç				#打印:10 -2打招呼
 
 
注意: 打印命令末尾的","可以避免在变量后打印新的一行。
使用“当”循环你可以在给定的条件为真时进行迭代:
 
define 动物的高度 = ["狗":50, "马":170, "猫":30, "鼠标":6]
动物的高度["兔子"] = 20
打印 动物的高度	#打印:[猫:30,狗:50,马:170,鼠标:6,兔子:20]
声明 动物的高度.长度()==5
 
#创建一个副本
define 吨 = 动物的高度.复制()
打印#打印:[猫:30,狗:50,马:170,鼠标:6,兔子:20]
 
#保存到文件并从文件恢复
吨.写入("动物.的DAT")
吨.清理()
吨.读取("动物.的DAT")
打印 吨		#打印:[猫:30,狗:50,马:170,鼠标:6,兔子:20]
 
 
重复循环允许你编写运行n次的简单循环:
 
define 一=随意(),b=随意()
打印 "一=",一,"b=",b
如果(一 < b) 
    打印 "一<b"
elif(一>b)
    打印 "一>b"
其他的
    打印 "一==b"
 
 


函数

函数允许你通过分解任务为参数化可重用的部分,编写模块化的程序。 下面是计算给定数字因数的示例函数:
 
<code lang="mama">
 
函数可以通过设置默认值定义可选参数。 例如:
 
define 字母=("一", "b", "ç", "Ð", "é", "f")
for在里面 字母
    打印 信,	#打印:甲,乙,丙,丁,E,F型
 
 
 


类和对象

类通过使用“类”关键字定义,类方法通过使用“方法”关键字定义。 一个汽车类:
 
define 一=5
while(一>0)
    打印 一,			#打印:5 4 3 2 1
    一--
 
 
 
打印:
 
汽车对象已创建!
名称=Mustang,速度=100颜色=红色
汽车对象已创建!
名称=Ferrari,速度=200颜色=黑色
 

继承和多形态

类可以使用“继承”关键字继承另一个类:
 
repeat 3
    打印 "哈喽"		#打印3次“你好”
 
 


脚本编程: 操作场景中的3D对象

在Mama脚本中你可以通过直接调用它们的标准方法和定制方法操作3D对象。 例如,创建一个空world,然后从图库添加对象角色/小孩/Jock。 拖住“脚本”程序块然后输入下面内容:
 
函数 阶乘(ñ)
    如果 ñ==0
        返回 1
    define 结果=1
    for在里面 1..ñ
        结果=结果*我
    返回 结果
 
打印 阶乘(5) #打印:120
打印 阶乘(10) #打印:3628800
打印 阶乘(170) #打印:7.257415615307994E306
打印 阶乘(200) #打印:无限
 
 
运行程序 - Jock 确实会按照你的的要求行动!

画图应用

Mama不会限制你使用IDE 3D窗口 - 你可以使用Mama自己的用户图形界面库做你想做的事。 第一版:一个简单的画图应用- 允许你用鼠标在板上画画。
  • 我们将定义从窗口继承来的主类,以便可以在独立的窗口中打开它。
  • 我们将使用“乌龟”全局对象 - 这个对象简化了绘图,并且为重画,存储(连续)和恢复(反序)提供了简便的方法。 这是乌龟的一般方法:
    • 位置(x,y) - 乌龟所在 (x,y)的位置。
    • 到(x,y) - 从乌龟的当前位置划线到点(x,y),并且变化位置到新的点。
    • 清除() - 清除绘画。
    • 撤销()/重做() - 撤销/重做上一个改变。
    • 保存_内容(文件名) - 保存绘画内容到给定文件名。
    • 恢复(文件名) - 从给定文件中恢复绘画内容。
 
函数 打印车详情(名称,编号,速度=100)
    打印 名称,编号,速度
打印车详情("野马","红");
打印车详情("法拉利","黑", 200);
 
 
注释:
  • 为了访问脚本窗口,在启动应用之后你需要关闭3D窗口。
  • 要轻松的编辑Mama脚本,设置配置小旗“使用自由脚本编程”为真(参见mama/scripts/classes.mama)。