找回密码
 点一下
查看: 6585|回复: 22

Editor 语言语法整理(针对初学者)

[复制链接]
发表于 2010-8-20 20:20:48 | 显示全部楼层 |阅读模式




/*
              这是 我翻译的  





语言特征

*/



//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



//函数参数必须是简单的基本类型(intstringetc)或者指针,才能传递到结构;



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,没有动态分配:没有Newmalloc,这样指针就不好用了

  2,大范围的复制时不支持的:没有指针,数组和结构是不能通过函数传递的

  3,没有for循环

  4,缺陷的编译错误输出

  5,没有/*............*/

/*6Single pass declarating scanning

  7,/=,*=对于fixd的值不适合

  8.



  9.没有三角函数
 楼主| 发表于 2010-8-20 20:22:37 | 显示全部楼层
站一个位置,等一以后再补充
回复

使用道具 举报

发表于 2010-8-21 01:12:50 | 显示全部楼层
话说你翻译的原文在哪里啊?


另外三角函数可以用API里的。
回复

使用道具 举报

 楼主| 发表于 2010-8-21 07:51:49 | 显示全部楼层
原文在一个外国的网站上
http://wiki.sc2mapster.com/galaxy/main-page/
回复

使用道具 举报

发表于 2010-8-21 08:53:54 | 显示全部楼层
说真的,这页面的很多内容都没啥用。

首先不存在Print这么个函数,而且指针早已经被砍掉了。
回复

使用道具 举报

发表于 2010-8-21 11:38:13 | 显示全部楼层
指针被砍掉以后还怎么写struct为参数的函数?
感觉这语言基本和jass一样渣啊
回复

使用道具 举报

发表于 2010-8-21 11:41:12 | 显示全部楼层
实际情况是——它比Jass还渣。

因为它连隐试类型转换都没有,一个子类型的值无法赋给一个父类型的变量。

最重要的是,它无法H2I,没有GetHandleId这个函数啊。只能获得单位这一种类型的对象的id而已。



但是他的API也就是Native函数比Jass的强大N倍。算是部分弥补了语言本身的不足吧。
回复

使用道具 举报

发表于 2010-8-21 11:46:16 | 显示全部楼层
不能强制转换我就忍了。。。居然连隐式转换都没有? 果然渣啊
看来玻璃渣只准备让我们用native API和基本数据结构了
回复

使用道具 举报

发表于 2010-8-21 11:53:33 | 显示全部楼层
说起来几年前内部alpha版的galaxy比现在的强大N倍。不过后来war3不是爆出那个虚拟机漏洞嘛。


BLZ就慌了,于是把所有危险的功能都封印了。


其实要我说的话,地图能做成病毒又怎么样了呢,VS还啥都能做呢。也没见世界末日了啊。
回复

使用道具 举报

发表于 2010-8-21 12:01:36 | 显示全部楼层
放狗搜了下jass虚拟机漏洞,果然很强大。莫非指针取消也因为这个么

地图做成病毒确实挺危险的...但也不至于要把关联功能都干掉啊
回复

使用道具 举报

 楼主| 发表于 2010-8-21 12:16:33 | 显示全部楼层
我翻译这个,有两个目的:
第一:巩固自己的学习
第二:为了比我还渣的初学者
回复

使用道具 举报

发表于 2010-8-21 12:18:33 | 显示全部楼层
SC1的A.L.I.C.E系统也很强力

还可以用MID WMA这些音乐格式~
回复

使用道具 举报

发表于 2010-8-21 12:20:11 | 显示全部楼层
不要跟sc1比,sc2再怎么也不可能土到根sc1去比的。

SC1那脚本与其说是脚本不如说是渣渣啊。
回复

使用道具 举报

发表于 2010-8-21 12:27:09 | 显示全部楼层
引用第8楼麦德三世于2010-08-21 11:53发表的  :
说起来几年前内部alpha版的galaxy比现在的强大N倍。不过后来war3不是爆出那个虚拟机漏洞嘛。


BLZ就慌了,于是把所有危险的功能都封印了。

.......
那……有没有解开封印的办法呢?
回复

使用道具 举报

发表于 2010-8-21 12:33:09 | 显示全部楼层
不知道呀不知道~~
回复

使用道具 举报

发表于 2010-8-21 12:38:21 | 显示全部楼层
不过Galaxy明显优于Jass的地方到底还是那个Debug系统啊。

那个实在太好用了,而且所有的Native函数都会抛出详细的错误信息。
回复

使用道具 举报

发表于 2010-8-21 17:56:17 | 显示全部楼层
希望有高手写个星际2脚本与C语言的对照表T.T无处可学。。
回复

使用道具 举报

发表于 2010-8-21 19:54:48 | 显示全部楼层
再者说,现在的地图发布系统,谁敢使用galaxy漏洞,一经举报直接封号,真不知暴雪怕啥
回复

使用道具 举报

发表于 2010-8-22 04:21:04 | 显示全部楼层
引用第16楼zphskz于2010-08-21 17:56发表的  :
希望有高手写个星际2脚本与C语言的对照表T.T无处可学。。

3月初就写过了
http://bbs.islga.org/read-htm-tid-38654.html


这帖子里教程大堆的
http://bbs.islga.org/read-htm-tid-44358.html
回复

使用道具 举报

发表于 2010-8-22 09:03:02 | 显示全部楼层
头目好人啊....那啥有空的话在帮忙看一下这个http://bbs.islga.org/read-htm-tid-44508.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-23 18:15 , Processed in 0.061034 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表