游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14377|回复: 42

Afflatus 1.0.0.51(源代码)

[复制链接]

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-9-9 18:12:00 | 显示全部楼层 |阅读模式
来这个论坛两年了,谢谢各位的帮助和支持。大后天就是我生日了,这是我生日前最后一次更新。我一直是支持开源的,方便大家学习交流,所以这次也和以前一样放出了源代码。

相比上一个版本,更新的地方有:
查找对话框支持通配符。
添加新的编译模式,将代码放在一个Loader里面,"虚拟机"外置,使得编译后的可执行文件大大减小。
新增编译选项对话框,可以设定编译选项和......打开Afflatus的时候程序做什么。
修改了下菜单,一些细节方面的调整。
SkipError开关,可以跳过错误提示。
新增几个内置常量,包括程序标题,线程ID等。
修正几个Bug
......

PS:以前做个那个RPG在战斗系统制作完毕,整合好Afflatus后也一并放出代码。

sf_200799181219.rar

158.08 KB, 下载次数:

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-9-9 18:21:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)

Afflatus 简介

什么是 Afflatus?

Afflatus 是一种强大的,简洁的,轻量级的,可嵌入的脚本语言。
Afflatus 语法简洁易懂,支持数组等特性,有动态调用库等强大的功能。Afflatus是一种动态语言,可以在各种环境加入虚拟机程序,也可以直接生成可执行文件,和其他的编译器一样制作出可执行文件。
Afflatus的意思是“一阵风,灵感”


为什么选择 Afflatus?

Afflatus是一种有潜力的语言
虽然Afflatus还是新生的一种语言,目前我只尝试将Afflatus嵌入到我的游戏的脚本系统中,它大大提高了我的游戏的开发效率。

Afflatus很快
Afflatus语法简洁,容易解析。而且Afflatus的设计过程中经过了大量的优化和测试,保证了Afflatus高效的性能。今后的开发工作中还会继续进行优化,相信Afflatus的性能将会有更好的表现。

Afflatus是可嵌入的
Afflatus 可以很容易的嵌入您原有的系统或游戏而不必使您原有的程序作出很大的改动。
您只需提供脚本程序给Afflatus然后设定好事件驱动等必要的事情后其他的就可以交给Afflatus处理了。

Afflatus简单而强大。
Afflatus的语法综合于 Delphi,Visual Basic, C等语言,而且语法保持一定的约定性,力求将Delphi的优雅Visual Basic的易用和C的强大综合在一起。Afflatus 支持动态调用API,这样在出现Afflatus不擅长处理的操作时可以通过其他速度更快的语言编写动态连接库以供调用。

Afflatus是免费的和开源的
Afflatus是免费的和开源的软件。当您要使用时,您只需下载它,然后加入您的系统中。如果您对他有什么不满意的地方,修改源代码就行了。

Afflatus是怎么来的?
Afflatus原本是设计给我的游戏用的,后来将源代码放出,供大家一起分享,设计,改进和使用。


编译环境

菜单

File -- 文件
  New -- 新建
  Open -- 打开
  Save -- 保存
  Save As -- 另存为
  Unload -- 关闭
  Properties -- 属性
  Exit -- 退出
Edit -- 编辑
  Undo -- 撤销
  Cut -- 剪切
  Copy -- 复制
  Paste -- 粘贴
  Select All -- 全选
Debug -- 调试
  Information -- 代码信息
  P-Code -- 中间代码
Compile -- 编译
  Make -- 生成可执行文件
Run -- 运行
  Start -- 开始运行程序
Help -- 帮助
  About -- 显示软件信息


变量类型

int :
存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。

float :
存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。

string :
字符串,最多可包含大约 20 亿 ( 2^31)个字符。String 之字符码的范围是 0 到 255。字符集的前 128 个字符(0 到 127)对应于标准的 U.S. 键盘上的字符与符号。这前 128 个字符与 ASCII 字符集中所定义的相同。后 128 个字符(128 到 255)则代表特殊字符,例如国际字符,重音符号,货币符号及分数。String 的类型声明字符为美元号 ($)。

函数与命令

调用文件
调用其他文件中的过程和函数
语法:
include(filename);
参数:
filename 必要参数。所调要用的文件的文件名。

声明函数
声明子程序的名称,参数以及构成其主体的代码。
语法:
procedure name[(parameters)];
[statements]
[return(expression);]
end procedure;
参数:
name 必要参数。函数的名称;遵循标准的变量命名约定。
parameters 可选参数。代表在调用时要传递给函数的参数变量列表。多个变量应用逗号隔开。
statements 可选参数。在函数体中执行的任何语句组。
expression 可选参数。函数的返回值。 不选返回0。

call 语句
调用子程序
语法:
call(name,parameters);

exit 语句
跳出当前子程序
语法:
exit;

doevents 语句
转让控制权,以便让操作系统处理其它的事件
语法:
doevents;

goto 语句
无条件地转移到过程中指定的行。
语法:
goto [label];
参数:
label 必要参数。可以是任意的行标签。

声明行标签
用来指示一行代码。行标签可以是任何字符的组合,以字母开头,以冒号 ( 结尾。行标签与大小写无关,必须从第一列开始。
语法:
[label]:;
label 必要参数。可以是任意的行标签。

return 语句
返回一个函数的值
语法:
return(expression);
参数:
expression必要参数。任何数值表达式或字符串表达式。

声明变量
声明变量并分配存储空间
语法:
type name[:=value][,name[:=value]];
参数:
type 必要参数。变量的数据类型;可以是 int , float,string。一个 type 可以应用于这条语句所声明的每个变量。
name 必要参数。变量的名称;遵循标准的变量命名约定。
value 可选参数。变量的初始值。

声明数组
声明数组并分配存储空间。
语法:
type name[bound11[,bound2][,bound3]];
type name[lbound1..ubound1[,lbound2..ubound2][,lbound3..ubound3]];
参数:
type 必要参数。数组的数据类型;可以是 int , float,string。一个 type 可以应用于这条语句所声明的每个数组。
name 必要参数。数组的名称;遵循标准的变量命名约定。
boundn 可选参数。如果用“..”分别指定了最小下标和最大下标则最小下标和最大下标分别为lboundn和uboundn,否则最大下标和最小下标分别为bound和0。
提示:最多可支持3维数组。

赋值
给变量赋予一个指
语法:
varname:=expression;
参数:
varname 必要参数。变量的名称;遵循标准的变量命名约定。
expression 必要参数。任何数值表达式或字符串表达式。

messagebox函数:
在对话框中显示消息,等待用户单击按钮,并返回一个int告诉用户单击哪一个按钮。
语法:
messagebox(prompt[,buttons][,title]);
参数:
prompt 必要参数。字符串表达式,作为显示在对话框中的消息。prompt 的最大长度大约为 1024 个字符,由所用字符的宽度决定。可以包含转义字符
buttons 可选参数。数值表达式是值的总和,指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。如果省略,则 buttons 的缺省值为 0。
title 可选参数。在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。

inputbox函数:
在一对话框来中显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的 String。
语法:
inputBox(prompt[, title] [, default] [, xpos] [, ypos] );
参数:
prompt 必要参数。字符串表达式,作为显示在对话框中的消息。prompt 的最大长度大约为 1024 个字符,由所用字符的宽度决定。可以包含转义字符
title 可选参数。在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。
default 可选参数。显示文本框中的字符串表达式,在没有其它输入时作为缺省值。如果省略 default,则文本框为空。
Xpos 可选参数。数值表达式,成对出现,指定对话框的左边与屏幕左边的水平距离。如果省略 xpos,则对话框会在水平方向居中。
Ypos 可选参数。数值表达式,成对出现,指定对话框的上边与屏幕上边的距离。如果省略 ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。

if..else..endif 语句
根据表达式的值有条件地执行一组语句。
语法:
if(condition);[statements][else;statements]endif;
if()...else...endif 语句的语法具有以下几个部分:
condition 必要参数。一个或多个具有下面两种类型的表达式:
statements 在块形式中是可选参数;每条语句以;分隔,它们在 condition 为 True 时执行。

switch 语句
根据表达式的值,来决定执行几组语句中的其中之一。
语法:
switch(testexpression);
[case(expressionlist-n);
[statements-n]] ...
[default;
[elsestatements]]
endswitch;
参数:
testexpression 必要参数。任何数值表达式或字符串表达式。
expressionlist-n 如果有 Case 出现,则为必要参数。
statements-n 可选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。
elsestatements 可选参数。一条或多条语句,当 testexpression 不匹配 Case 子句的任何部分时执行。
提示:执行完一个case后的语句后不会自动跳出switch结构,而是继续执行下面的case后的语句,因此,可以在执行完一个case分支后使用break;语句跳出switch结构。

do..loop 语句
当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。
语法
do [{while | until}(condition)]
[statements]
[break;]
[statements]
loop;
或者可以使用下面这种语法:
do
[statements]
[break;]
[statements]
loop [{while | until}(condition)];
参数:
condition 可选参数。数值表达式或字符串表达式,其值为 True 或 False。如果 condition 是 Null,则 condition 会被当作 False。
statements 一条或多条命令,它们将被重复当或直到 condition 为 True。

for...next 语句
按循环次数重复执行一个语句块中的命令.
语法
for(sentence1,condition,sentense2);[statements]next;
参数:
Sentence1 必要参数。循环变量赋初值。
LogicExpression 必要参数。执行循环的条件。
Sentense2 必要参数。循环变量改变。
statements 一条或多条命令,它们将被重复直到 condition 为 false。

break 语句
跳出for,do..loop循环结构或switch分支结构
语法:
break;

callapi 语句
调用其他语言制作的动态链接库
语法:
callapi(library,procedure,convertfromunicode,parameters);
参数:
library 必要参数。动态链接库的名字。
procedure 必要参数。函数的名字。
convertfromunicode 必要参数。在把字符串类型的参数传给动态链接库前是否从Unicode转换到ANSI,1为需要转换,0为不需要转换。对于类似名字带"A"的函数需要转换,其他的不用。
parameters 可选参数。根据所调用的函数所需参数而定,每个参数前要用"类型 值"的格式指定,中间要用空格隔开,每个参数之间用逗号","隔开,可以在类型前用"^"前缀作为参数指针的标记,这样就可以允许参数值被函数修改。

readfile 函数
读取文件内容并输出到一个变量中
语法:
readfile(filename);
参数:
filename 必要参数。文件的路径和名字。

writefile 函数
将一个字符串的指写入一个文件
语法:
writefile(filename,string);
参数:
filename 必要参数。文件的路径和名字。
string 必要参数。字符串表达式。

length 函数
返回一个字符串的长度
语法:
length(string);
参数:
string 必要参数。字符串表达式

ucase 函数
将一个字符串中的小写字母转换成大写字母
语法:
ucase(string);
参数:
string 必要参数。字符串表达式

lcase 函数
将一个字符串中的大写字母转换成小写字母
语法:
lcase(string);
参数:
string 必要参数。字符串表达式

trim 函数
将一个字符串的前导空白和尾随空白消除
语法:
trim(string);
参数:
string 必要参数。字符串表达式

instr 函数
指定一字符串在另一字符串中最先出现的位置。
语法:
instr(start,string1,string2);
参数:
start 必要参数。每次搜索的起点
string1 必要参数。接受搜索的字符串表达式
string2 必要参数。被搜索的字符串表达式

left函数
返回字符串中从左边开始指定个数的字符
语法:
left(string,length);
参数:
string 必要参数。字符串表达式
length 所取出的字符个数

right函数
返回字符串中从右边开始指定个数的字符
语法:
right(string,length);
参数:
string 必要参数。字符串表达式
length 所取出的字符个数

mid 函数
返回字符串中从指定位置开始指定个数的字符
语法:
mid(string,start[,length]);
参数:
string 必要参数。字符串表达式
必要参数。为 int。string 中被取出部分的字符位置。如果 start 超过 string 的字符数,mid 返回空字符串。
length 可选参数;为 int。要返回的字符数。如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。

string 函数
返回包含指定长度重复字符的字符串。
语法:
string(number,character);
参数:
number 必要参数。返回的字符串长度。如果 number 包含 Null,将返回 Null。
character 必要参数。为指定字符的字符码或字符串表达式,其第一个字符将用于建立返回的字符串。如果 character 包含 Null,就会返回 Null。

asc 函数
返回代表字符串中首字母的字符代码。
语法:
asc(string);
参数:
string 必要参数。字符串表达式。

chr 函数
返回包含有与指定的字符代码相关的字符。
语法:
chr(charcode);
参数:
charcode 必要参数。字符代码。

format 函数
返回含有一个根据格式表达式中的指令来格式化的表达式。
语法:
format(expression[, format[, firstdayofweek[, firstweekofyear]]]);
参数:
expression 必要参数。任何有效的表达式。
format 可选参数。有效的命名表达式或用户自定义格式表达式。
firstdayofweek 可选参数。常数,表示一星期的第一天。
firstweekofyear 可选参数。常数,表示一年的第一周。

varptr函数
返回一个变量在内存中的地址
语法:
varptr(varname);
参数:
varname 必要参数。变量名。

shell函数
执行一个可执行文件,并返回这个程序的任务ID,若不成功,则会返回 0。
语法:
shell(pathname[,windowstyle])
参数:
pathname 必要参数。要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
Windowstyle 可选参数。表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。

calcexpression函数
返回一个表达式的值
语法:
calcexpression(expression);
参数
expression 必要参数。表达式。

option 语句
开启或关闭编译器的内部功能
语法:
option(parameters1[+|-],[parameters1[+|-],]...);
参数:
parameters 必要参数。
可选值有:
transmeanchar 开启或关闭转义字符功能。
skiperror 开启或关闭自动跳过错误

语法
引用变量:在表达式中所引用的变量要用单引号括起来,如 'a', 'arr1[1,2]',数组参数如果有变量的话也要用引号括起来,如'arr1['i','j']'。
main 函数:所有的程序都是从main函数开始进行的。
每一条语句后都要加上分号“;”。


常数

内部常数
App_Path 程序的当前路径
Project_Name 工程的名字
App_ExeName 当前正运行的可执行文件的根名(不带扩展名)
Command 命令行的参数部分
App_PrevInstance 返回一个值,该值指示是否已经有前一个应用程序实例在运行
App_TaskVisible 返回或设置一个值,用来确定应用程序是否出现在窗口任务列表中
App_ThreadID 返回执行线程的 Win32 ID
App_Title 返回或设置应用程序的标题

以下内容要使用时需要包含:libmsgbox.lib
buttons 参数有下列设置值:
常数 值 描述
MB_OKOnly 0 只显示 OK 按钮。
MB_OKCancel 1 显示 OK 及 Cancel 按钮。
MB_AbortRetryIgnore 2 显示 Abort、Retry 及 Ignore 按钮。
MB_YesNoCancel 3 显示 Yes、No 及 Cancel 按钮。
MB_YesNo 4 显示 Yes 及 No 按钮。
MB_RetryCancel 5 显示 Retry 及 Cancel 按钮。
MB_Critical 16 显示 Critical Message 图标。
MB_Question 32 显示 Warning Query 图标。
MB_Exclamation 48 显示 Warning Message 图标。
MB_Information 64 显示 Information Message 图标。
MB_DefaultButton1 0 第一个按钮是缺省值。
MB_DefaultButton2 256 第二个按钮是缺省值。
MB_DefaultButton3 512 第三个按钮是缺省值。
MB_DefaultButton4 768 第四个按钮是缺省值。
MB_ApplicationModal 0 应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。
MB_SystemModal 4096 系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。
MB_MsgBoxHelpButton 16384 将Help按钮添加到消息框
MB_MsgBoxSetForeground 65536 指定消息框窗口作为前景窗口
MB_MsgBoxRight 524288 文本为右对齐
MB_MsgBoxRtlReading 1048576 指定文本应为在希伯来和阿拉伯语系统中的从右到左显示
第一组值 (0-5) 描述了对话框中显示的按钮的类型与数目;第二组值 (16, 32, 48, 64) 描述了图标的样式;第三组值 (0, 256, 512) 说明哪一个按钮是缺省值;而第四组值 (0, 4096) 则决定消息框的强制返回性。将这些数字相加以生成 buttons 参数值的时候,只能由每组值取用一个数字。
返回值
常数 值 描述
MB_OK 1 OK
MB_Cancel 2 Cancel
MB_Abort 3 Abort
MB_Retry 4 Retry
MB_Ignore 5 Ignore
MB_Yes 6 Yes
MB_No 7 No

以下内容要使用时需要包含:libshell.lib
windowstyle 参数有下面设置:
常数 值 说明
Shell_Hide 0 窗口被隐藏,且焦点会移到隐式窗口。
Shell_NormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
Shell_MinimizedFocus 2 窗口会以一个具有焦点的图标来显示。
Shell_MaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
Shell_NormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
Shell_MinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。


以下内容要使用时需要包含:libformat.lib
firstdayofweek 参数有下面设置:
常数 值 说明
Format_UseSystem 0 使用 NLS API 设置。
Format_Sunday 1 星期日(缺省)
Format_Monday 2 星期一
Format_Tuesday 3 星期二
Format_Wednesday 4 星期三
Format_Thursday 5 星期四
Format_Friday 6 星期五
Format_Saturday 7 星期六

firstweekofyear 参数有下面设置:
常数 值 说明
Format_UseSystem 0 使用 NLS API 设置。
Format_FirstJan1 1 从包含一月一日的那一周开始(缺省)。
Format_FirstFourDays 2 从本年第一周开始,而此周至少有四天在本年中。
Format_FirstFullWeek 3 从本年第一周开始,而此周完全在本年中。

说明

格式化 作法
数字 使用预先定义的命名数值格式或创建用户自定义数值格式。
日期和时间 使用预先定义的命名日期/时间格式或创建用户自定义日期/时间格式。
日期和时间序数 使用日期和时间格式或数值格式。
字符串 创建自定义的字符串格式。

转义字符
\n 换行且将当前位置移到开头
\t 水平制表
\b 退格,将当前位置移动到前一列
\r 回车,将当前位置移到开头
\f 换页,将当前位置移到下页开头
\\ 一个反斜杠(\)
\i 一个单引号(')
\d 一个双引号(")
\s 一个分号(;)
\a 一个左括号
\e 一个右括号
\c 一个逗号(,)
\u Null

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-9-9 18:57:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)


去申请一个开源项目svn。然后宣传。

16

主题

280

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
QQ
发表于 2007-9-10 07:33:00 | 显示全部楼层

Re: Afflatus 1.0.0.51(源代码)

支持支持!~

13

主题

66

帖子

86

积分

注册会员

Rank: 2

积分
86
QQ
发表于 2007-9-10 10:12:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)

祝你生日快乐,天天快乐!!!

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-9-10 12:31:00 | 显示全部楼层

Re: Re:Afflatus 1.0.0.51(源代码)

航天奇侠: Re:Afflatus 1.0.0.51(源代码)


去申请一个开源项目svn。然后宣传。

怎么申请??请详细解答,谢谢。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-9-10 15:44:00 | 显示全部楼层

Re: Re:Afflatus 1.0.0.51(源代码)

使命召唤: Re:Afflatus 1.0.0.51(源代码)

垃圾

哦,有什么意见和建议欢迎提出,谢谢。

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2007-9-10 15:51:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)

呵呵,世界真奇妙

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-9-10 16:11:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)

神奇的地球.

68

主题

228

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
QQ
发表于 2007-9-10 21:45:00 | 显示全部楼层

Re:Afflatus 1.0.0.51(源代码)

生日快乐!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 04:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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