|
/*
这是 我翻译的
语言特征
*/
//if语句
//===============================================
if(randomInt(1,3)==1)
{ //这个理大括号是必须的
Print("Good");//我不知道在这里Print()函数是什么作用
}
//================================
else if(Random(1,5)<4)//else if
{
Print("Averager");
}
//=======================================================
else
{
Print("Bad");
};
//=====================================================
//while语句
//=============================================
int i=0; //可以声明一个变量并且赋值
while(i<5)
{
Print(i);
i+=1;
}
//=================================================
//这里可以用"break"和"continue"控制循环,这里没有loop循环。
//变量(variables)
//变量的声明必须在函数的前面
int a;//变量的声明
int b=4;//变量的声明和赋值
const int c=2;//常变量的声明,常变量是不可以改变的
//下面是变量类型
//===========================================
//基本变量:
bool
byte
char
int
fixed
string
text
//结构
abilcmd
actor
actorscope
animtarget
bank
camerainfo
color
doodad
handle
marker
order
playergroup
point
region
revealer
sound
soundlink
timer
transmissionsource
trigger
unit
unitfilter
unitgroup
unitref
//AI部分
aifilter
wave
waveinfo
wavetarget
//具体的变量含义,以后再补充
//数组(array)
//=====================================================
const int array_count=5;//这里的变量下标必须是常数。
int i=0;
int[array_count] t;//这个[]是挨着类型的,这是和c语法不同的。
while(i<array_count)
{
t=1;
i=i+1;
};
//数组是储存(数目多且同一类型)值
int[10] list;
int i=0;
while(i<10)
{
list=i*i;
i+=i;
};
print(list[5]);//25
print(list[10])//错误了,越界了,0——9
//数组的长度必须是预定义的,也就必须是常数
//数组可以是任何类型的
struct MyType
{
int alpha;
fixed bravo;
};
MyType[5] list;
MyType*[2] listofpointers;
//这些变量都会别初始化为null
listofpointers[0]=&list[0];
listofpointers[0]->alpha=5;
print(list[0].alpha);//5
//数组不可以不可以被函数传递。而指针可以。
const int c_arraylength=5;
void FillArray (int[c_arraylength]* array)
//注意参数是指针类型的
{
int i=0;
while(i<c_arralength)
{
(*array)=10-1;
}
}
int[c_arraylength] numbers;//定义一个名为numbers的数组
FillArray(&unmbers);
//简易链表 即使栈
const int maxlength=100;
struct list
{
fixed[maxlength] data;
int length;
}
void ListAdd (list* self,fixed value)
//把值为value的元素加入链表list
{
self.data[self.length]=value;
self.length+=1;
}
fixd ListPop(list* self)
//把栈顶的元素退栈
{
fixd t=self.data[self.length];
self.data[self.length]=null
self.length-=1;
return t;
}
list list;//定义栈list
ListAdd(&list,5);
ListAdd(&list,10);
print(list.length);//2
print(list.data[0])//5
print(list.data[1])//10
//多维数组(Multidimensional Arrays)
//在编辑器里是可用的
int[4][2] matrix;//4*2的矩阵
int i=0;
int j;
while (i<4)
{
j=0;
while(j<2)
{
matrix[j]=i*j;
j+=1;
}
i+=1;
}
print(matrix[3][1];
//
//结构(struct)
//========================================================
struct point2d
{
int x;
int y;
};//不要忘了 ;
point2d A;//定义一个point2类型的变量A
A.x=2;
A.y=3;
print(A.x);
point2d* B=&A//定义一个指针
print(B->x);
//定义一个结构
//
//一个猴子的结构
struct Monkey
{
int numBaba;//拥有的香蕉
int pooFlung;//扔掉的大便
};//这里的分号;很重要
/*
这样我们定义了一个结构Monkey,有两个成员,numBana,pooFlung
*/
//创建一个Monkey的实例,只需这样做
Monkey myMonkey;
//不像其他的语言(c++,java,c#,python),Editor缺少构造函数的感念
//所以结构里的成员需要初始化默认的值
//我们可以这样做,伪造一个构造函数
void Monkey_Initialize(Monkey* self,int numBana)
{
self->numBaba=numBana;
self->pooFlung=0;
};
//这样我们定义一个函数,用给定的numBana初始化一个结构Monkey,
Monkey misterTeeny;
Monkey_Initialize(&misterTeeny,10);
//Mr.Teeny 是一个拥有10个香蕉的猴子了
print(misterTeeny.numBaba);
print(misterTeeny.pooFlung);
//==================================================================
//指针,参数,值
Monkey teenyclone=misterTeeny;
//错误,在Editor里,不支持大范围的复制(原文bulk copy not supported)
Monkey* teenyPointer=&misterTeeny;
//定义一个指针指向MisterTeeny,
Monkey* otherPointer=teeenyPointer;
//另一个指针,指针可以复制,同teenyPointer是一样,都是指向MisterTeeny
misterTeeny.numBana=5;
print(teenyPointer->numBaba);//5
otherPointer->numBana=15;
print(misterTeeny.numBaba);//15
//函数参数必须是简单的基本类型(int,string,etc)或者指针,才能传递到结构;
void Monkey_GiveBana(Monkey* self,int numBana)
{
self->numBaba+=numBana;
}
void Monkey_FlingPoo(Monkey* self)
{
print("猴子在拉屎");
self->pooFlung+=1;
};
Monkey bingo;
Monkey_Initialize(bingo,0);
print(bingo.numBana);//0
Monkey_GiveBana(&bingo,5);
print(bingo.numBana);//5
print(bingo.pooFlung);//0
Monkey_FlingPoo(&bingo);
print(bingo.pooFlung);//1
//一个重要的法则:不要用一个变化的值当做指针,我们不要这样做
Monkey* MakeMonkey()
{
Monkey monkey;
return &monkey;
}
print(MakeMonkey()->numBaba)//错误
//
//这个指针在一瞬间有效,当函数结束的时候,这个指针也就无效了
//这个指针在下一时刻就会被重新定义,任何通过这个指针的方法都会引起错误
//=====================================================
//结构的嵌套(Structs containing other structs)
//被嵌套的结构必须在这个结构之前定义。
//结构自己不能嵌套自己
struct Apple{
sting name;
};
struct Tree{
Apple apple;
};
Tree tree;
tree.apple.name="Gala";
//下面的例子是错误的
struct Tree{
Apple apple;
}//错误,Apple还没有定义
struct Apple{
sting name;
};
struct Tree{
Tree tree;//错误,不能自己嵌套自己
};
//然而这个是可以的,(为什么,我不知道)
struct Link{
int value;
Link* next;
};
//=========================================================
//函数(function)
int plus(int i,int j)
{
return i+j;
}
static void private()
{
//(This function can only be callde inside the
//file,because of "static")
//不能被其他的文件调用,因为他是静态的
}
//====================================
//函数原型(Function prototype)
native int AIGetRawGasNumSpots(int player,int town);
//=====================================
//include
include "Folder/File"
//=============================================
//语言的缺陷
/*
1,没有动态分配:没有New和malloc,这样指针就不好用了
2,大范围的复制时不支持的:没有指针,数组和结构是不能通过函数传递的
3,没有for循环
4,缺陷的编译错误输出
5,没有/*............*/
/*6,Single pass declarating scanning
7,/=,*=对于fixd的值不适合
8.
9.没有三角函数 |
|