TC40教程Word格式.docx
《TC40教程Word格式.docx》由会员分享,可在线阅读,更多相关《TC40教程Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
哪些又是不能放哪的?
要点1:
所有的函数、变量(全局变量和局部变量)、条件语句(循环语句、如果语句、遍历语句、跳转语句)必须存放在空间之内。
要点2:
所有的局部变量、条件语句(循环语句、如果语句、遍历语句、跳转语句)必须存放在函数之内。
要点3:
区分局部变量和全局变量。
我们可以通俗的理解为:
在函数内的是局部变量,在函数外的是全局变量,而全局变量在整个空间都起作用,不管该变量是在函数前或函数后定义。
以上3个要点也就是在语言界被称为的一个作用域问题。
在后面我将通过一些例子来让大家更好的去理解。
刚才提到了命令语应该是在函数内,那么我们首先来看"
开始_点击"
函数,大家以后看到以"
xx_点击"
命名的函数一般来说都是TC的一个事件,也就是该函数和界面上的操作是有关系的。
下面我们按下F1或者点击软件右上方处的问题打开帮助文档。
点击目录--TCAPI说明--辅助空间--2messagebox-消息框,在右侧看到了该命令的使用说明。
如下:
中文命名空间:
辅助
英文命名空间:
help
函数功能:
弹出消息框
中文函数原型:
消息框(content,caption="
TC"
)
英文函数原型:
messagebox(content,caption="
参数:
content:
对话框的内容
caption:
对话框标题
返回值:
函数执行成功,返回真,否则返回假
举例:
辅助.消息框("
你好,我是消息框!
"
Example:
help.messagebox("
执行结果:
弹出消息框,显示"
我们可以理解为这是一个TC内部已经进行封装后的一个空间,而这个空间在内部已经连接好的,我们只要利用空间接口名点上函数名以及填写函数所带的参数就能用。
在此我们称它为命令语。
我们只看中文的说明,从说明中我们知道该空间提供的接口名为辅助,该函数执行后会弹出消息框,函数名为消息框,函数内含有2个参数,而我们需要填写的是实参,也就是实际我们要填写的内容,返回值是一个逻辑型(真假判断),我们将举例的这个命令语复制到刚才的开始函数中,如下:
辅助.消息框("
复制完了之后点击软件上面的运行,弹出界面之后,我们点击开始,发现消息框上面显示了一个"
,我们学会了这点,那么以后的鼠标移动鼠标点击等等操作我们都可以在此进行完成哦。
我们再来看以下这个命令的函数原型,上面提到了2个参数,一个是消息框的内容一个是消息框的标题。
而我们刚才仅仅是加入了一个参数,而根据TC语言这里也就是所谓的参数缺失,在缺失的情况默认第一个实参为第一个参数。
下面我们加入后面一个参数,如下:
"
温馨提示"
同样运行点击开始后你发现该消息框的标题改变了。
有了上面的基础后,那么我们想用什么命令语都可以再帮助文档中找到,并且能知道它是干什么用的,下面我们在开始函数里面加入其它的内容,以便更好的理解,如下:
例子1:
鼠标.移动(100,200)//[移动到100,200这个位置]
辅助.等待(2000)
//[移动中加入延时]
执行成功!
//执行后我们发现我们的鼠标被移动到了100,200的位置,并且等待2秒后弹出了以温馨提示为标题的执行成功消息框。
PS:
在数学中的坐标系和在电脑的坐标系是有区别的,那么在电脑中的坐标是以电脑屏幕左上角为原点(0,0),向左走时x坐标无限增大,向下走时y坐标无限增大(x,y)。
大家可以尝试更改(100,200)里面的数据进行测试理解。
例子2:
辅助.设置托盘("
我的托盘"
假)
窗口.隐藏(窗口.自身句柄())
//很多人都想给自己的脚本设置一个托盘,但大家刚接触的时候虽然托盘设置了,却忘记了窗口还需要隐藏,这样才是一个托盘的设置。
不妨复制代码试试?
经过上面的一些例子后,我们就明白想要什么命令语直接在函数里面加即可。
可是现在问题又来了,我想在界面上设置一个浏览框,让别人选择一个游戏路径,然后点击开始就会执行打开这个程序,那么我该如何制作呢?
如下图:
cese.png(5.40K)
2013-2-722:
52:
25
其实也很简单,大家跟着我的步骤,相信一会儿就制作出来了。
1、首先我们点击TC软件上的显示主窗口按钮,来到主界面,然后看下图
cesw22.png(10.32K)
2、点击最下面的工具箱,然后我们得到了下面的这个页面。
csee33.png(10.54K)
3、我们点击浏览框,然后托到界面上,随后再托入一个标签。
fff.png(6.28K)
4、随后我们左键点击一下标签,然后右键,会出现一些下拉数据,点击属性。
这时候看到右边属性页面,该页面显示了这个标签的一些内容,我们将文本为"
标签"
改为"
加载路径:
然后拖动标签的边上将标签稍微拉长一点,以便内容全部显示出来。
以及将界面拉小一点,2个按钮往上移动,调整为刚才最开始给出图的效果来。
这样界面我们就设计好了,下面我们开始编写代码:
同样的我们在开始函数里面编写我们需要的代码,首先我们要知道打开一个程序是需要通过进程来完成的,那么我们在TC帮助文档里面找到进程空间,随后找到打开命令。
帮助文档说明如下:
进程
process
打开一个进程
打开(
path,
type=0)
openprocess(path,
path:
进程路径
type:
0普通模式,1超级模式
打开进程返回打开进程的句柄,否则返回0
为什么我每次都要求大家看帮助文档呢?
因为帮助文档的说明也就告诉我们该如何去利用这个命令,而且根据它的返回我们还能对代码进行优化。
帮助文档说明了这里需要2个参数,一个是路径一个是类型,路径我们知道就是从浏览框获取的路径,而这个类型的话,其实它也就是针对一些无法打开一些进程的时候可以尝试另外一种。
那么代码应该如何写?
1、首先是获取浏览框的内容,同样在帮助文档里面找到界面控件说明--浏览框--gettext-获得。
2、其次使用打开进程命令。
虽然很简单的2个命令,可使用起来就是很多问题:
下面是我最初编写的代码:
内容=浏览框.获得("
浏览框0"
)
进程句柄=进程.打开(内容)
运行以后我们选择桌面上的随便选择一个EXE,然后点击开始,很快的,一个程序就被我们打开了。
有没有感到一丝的惊喜呢?
可现在问题又来,我假如没有选择程序直接去点击开始按钮,结果发现程序消失了,这是为什么呢?
原因很简单我们选择了一个无效的路径(也就是空路径),使得程序出错,那么我们进行优化一下吧!
进程句柄=0,内容="
//[定义变量的时候赋初始值以便后面进行判断,涉及到了if语句的用法,不知道的看帮助文档语法使用]
内容=浏览框.获得("
)
//[将获得的浏览框内容用一个内容变量接收]
如果(字符串.长度(内容)>
0)
//[用字符串长度判断内容是否大于0,大于0就是有内容]
进程句柄=进程.打开(内容)
//[前面已经介绍了,一个参数的时候就默认第一个,这里也就是路径了]
如果(进程句柄>
//[一般进程打开都是大于0的,所以判断是否大于0即可]
否则
执行失败!
如果结束
浏览框为无效内容!
二、为什么今天要提到绝对坐标和相对坐标,它们有什么用呢?
所谓的绝对坐标:
相对于坐标原点(0,0),而我们要知道的是以电脑左上角为原点(0,0),并非是数学意义上的那个坐标系。
并且要知道是向右为x坐标增加,向下为y坐标增加。
所谓的相对坐标:
相对坐标很好理解,也就是相对前一次鼠标的位置的坐标。
现在我们理解了它的含义后,我们不妨下载一个游戏体验以下,如:
梦幻西游。
我们可以尝试编写一段代码,在梦幻西游里面点击某个地点,如:
NPC,你会发现鼠标总是移动不到你截取的坐标位置。
这也就是被称为防止第三方程序的鼠标漂移。
每次我们要移动到某个地方,它会根据该地方随机的做一次相对移动,使得无法移动到你想要的地方,至于针对鼠标漂移的方法很多,大家可以到论坛搜索一下,很久没做回合制游戏了,拿个脚本做例子有的生疏,所以还是希望大家去看看别人的。
不过大家还得理解下为什么要绑定窗口后去解决鼠标漂移。
什么又是内置鼠标,什么又是外置鼠标,理解好了之后相信很快就突破了。
三、窗口坐标
现在使用插件来完成某项工作使得我们必须去学习它,那么我们使用插件一般都是需要绑定窗口的,绑定窗口后的坐标为窗口坐标,这时候我们可以理解为它的坐标是以该窗口左上角为原点,不再以屏幕坐标为原点。
在截取坐标的时候可以采用2种方案:
方案1:
将该窗口移动到屏幕的(0,0)处,然后再去截取坐标。
方案2:
利用大漠综合工具,将该窗口绑定后去截取坐标。
四、语法配对问题:
这里提到的配对也就是说有前必有后,在整个代码中他们是相辅相成、缺一不可的,那么常见的这些语法有哪些呢?
1、if(如果)语句、while(循环)语句、select(选择)语句、repeat(重复)语句、for(遍历)语句---(流程语句);
2、命名空间定义语句、函数。
在以上这些语句中他们的格式是必须要配对的,下面我们通过一个正反事例来进行说明:
正确语句:
1.intmark
2.if(mark==0)
3.
mark等于0"
4.else
5.
mark不等于0"
6.endif
7.
8.或
9.
10.整型标记
11.如果(标记==0)
12.
标记等于0"
13.否则
14.
标记不等于0"
15.如果结束
复制代码
错误语句:
6.
7.或
8.
9.整型标记
10.如果(标记==0)
11.
12.否则
13.
注:
在此缺少了if(如果)语句的结束语:
endif或如果结束,错误语句在启动调试会在输出框弹出错误信息:
发现没定义的字符’功能结束‘
总结:
从上面的例子可以看出流程语句的配对,在编程中是必不可少的一部分,一旦缺少则无法编译通过生成EXE。
他们就相当于有开始就有结束,再如:
命名空间定义语句,有namespace(空间)就有endnamespace(空间结束);
函数,有函数的定义就有函数的返回值以及函数的结束。
所以在以后的编程过程遇到了编译不通过就可以进行这方面的检查,看是否是由于粗心忘记写了,导致这一问题的发生。
五、层次问题:
很多新手,在初次学习的时候由于没有弄明白层次问题,导致各种问题的产生:
下面也通过一个实例说明:
1.空间教程//定义默认空间
2.整型标记
3.如果(标记==0)
4.
5.否则
6.
7.如果结束
8.功能逻辑型开始_点击()
10.
返回真//函数返回语句
11.功能结束
12.空间结束//空间结束语句
进行编译,错误提示:
发现没定义的字符'
如果(标记==0)'
,新手一看到这个错误就说,我这配对没有问题啊,怎么还提示这个呢?
从这个例子中我们可以看出,新手根本没有弄明白命令应该往什么地方写,导致将语句放置了函数外。
而正确的例子应该是这样的:
2.
3.功能逻辑型开始_点击()
整型标记
如果(标记==0)
7.
8.
9.
12.
13.空间结束//空间结束语句
函数应该在空间里面,而编写的命令应该在函数的里面,定义的变量应该在空间里面。
六、符号问题:
在TC编程中,我们知道TC是可以中英文进行编程的(即可英文编程又可中文编程),而在符号问题方面,TC依旧是采用了英文符号,并非是在中文输入法下输入的符号。
下面我们也通过一个例子说明:
如果(标记==0)
//这里出错了!
!
启动编译后,错误提示:
当前条件表达式'
(标记==0)'
没有用成对的括号括起来或者是'
('
(闭括号)后出现多余符号
从这一例子中我们得到正确的答案是括号应该是英文状态下输入的括号,若是中文输入则会直接报错,那么在以后编程中大家就需要注意区分符号是否用错了导致这一问题的发生,需要区分的常见符号有:
逗号(,)、小括号(())。
七、数据类型问题:
在我们进行数据的赋值以及定义函数时就需要考虑到数据类型的问题,他们可以说也是需要配对的,如:
1.
整型标记1=3,标记2=4
//[定义2个整型变量分别给赋值]
2.
字符型标记
//[定一个字符型变量]
标记=标记1+标记2
//[理想状态下认为:
标记1和标记2相加的值赋给标记这个变量]
'
标记=标记1+标记2'
等号两边数据类型不一致
从上面的代码中我们可以得知,当两个类型一样的数据进行相加时这是可以的,而将他们相加的值赋给一个数据类型是字符型的变量是不行的,会产生数据类型不一致。
前面提到了为什么数据类型相加是可以的,因为通过优先级可以知道,程序先运行了相加之后再赋值的,而在编译的时候提示的是赋值这里出错了,所以相加是没有问题的。
那么我们应该如果进行改正呢?
方法一:
(通过改变标记这个变量的数据类型达到了这一目的)
整型标记
//[定一个整型变量]
这里进行变换
//[标记1和标记2相加的值赋给标记这个变量]
方法二:
(通过将他们相加的值进行数据类型转换达到这一目的)
标记=转换.整型转字符型(标记1+标记2)
//[标记1和标记2相加的值进行转换后再赋给标记这个变量]
我们不仅仅在变量方面要注意到数据的类型,在函数我们也需要注意到这些问题,下面我们看一个函数的例子:
1.功能整型两数相加()
整型数据1,数据2,总数
//定义三个整型数据变量,前2个用于相加,后面这个用于接收他们的和
数据1=10//给数据1赋初始值,其默认值为0
数据2=15//给数据1赋初始值,其默认值为0
总数=数据1+数据2
//将数据1和数据2的值相加之后赋值给总数
辅助.消息框(转换.整型转字符型(总数))//由于总数是整型的,而消息框的参数需要字符型,所以需要进行转换。
8.功能结束
return语句的返回类型与函数声明的返回类型不一致。
当出现这个提示的时候,我们就直接看输出框给出的行数,找到这行后看接着看这个函数定义(也就是函数声明)的数据类型是什么,从这里我们可以看出,它是整型的数据,然后我们与刚提示行的返回的这个数据类型对比,它返回的是真,真假数据是属于逻辑型的范畴,所以我们知道返回的数据类型错了,那么我们应该如何改呢?
根据函数的整个运行来看,它是需要进行两个数相加后输出结果,应该是不需要返回任何数据,那么我们在这个返回上加可以随便填写数据了,返回的只要是整型的数据就可以,如:
返回0
、返回
总数
、返回118
这些都是可以的。
根据上面的问题大家就可能会想,那么它什么时候起到作用呢?
接着我们再来看一个例子:
3.功能整型两数相加()
返回?
//这里应该返回什么数据呢?
9.功能结束
10.
11.功能逻辑型开始_点击()
?
获取总数
//这里的数据类型是什么呢?
获取总数=教程.两数相加()
如果(获取总数>
15.
辅助.消息框(?
)//这里怎么填写呢?
16.
17.
调用不成功!
18.
19.
20.功能结束
21.
22.空间结束//空间结束语句
从上面的例子,我给出了几个问号需要大家进行完善,在我还没给出答案之前,大家先自己去完善好了,再接着往下看。
根据上面例子剖析:
首先我们看两数相加这个函数,函数和上面那个例子差不多,只是去掉了弹出消息框这个命令,返回的数据填写什么这个时候我们还不清楚,但我们知道这个相加的数的结果是整型数据,这个很关键,那么接着我们看开始这个函数,大家都知道,开始函数是一个点击事件函数,也就是所谓的入口函数,程序将从这里开始往下执行,到了这里根据数据类型配对问题,我们很显然就知道刚相加的数据类型是整型的,那么我们肯定也用一个整型的数据去接收它,那这里就应该填写一个整型。
其次,我们看到了这里是一个函数的调用,它调用了两数相加的函数,并用刚定义的这个整型变量接受它,那么我们就很快的知道,它是想通过调用相加函数返回的值给刚定义这个变量,那刚才的两数相加函数的返回值肯定就是总数。
最后,我们进行对这个返回的数据进行判断,用到了如果(if)语句,判断这个得到的数据是否大于0,下面也是一个问号,它应该是弹出就是两个数据和的消息框。
填写完善之后:
返回总数//这里应该返回什么数据呢?
整型获取总数
获取