当前位置:文档之家› Jass基础教程

Jass基础教程

Jass基础教程
Jass基础教程

Greedwind教学Jass基础教程一

这个教程假设你已经比较熟练地使用Trigger并有一定的逻辑基础和程序设计基础, Knowning engish is preferable

首先问个问题: 为什么要学JASS?

先看下面的例子:

以下例子可以实现在单位死亡的位置显示5秒的死亡信息(漂浮文字)后并清除死亡信息吗?

例子:

Events:

A unit dies

Conditions:

Actions:

-Floating Text - Create floating text at ((position of (Triggering Unit))

with the message (("A "+(name of (Triggering Unit))) + " dies") with size 20 , red 100, green 100, blue 0, alpha 100.

-Wait 5.00 seconds

-Destroy (last created floating text)

象以上例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字. 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了!) 要达到目的, 必须对JASS有些了解. 教程将对此TRIGGER作进一步的分析.

jass基础教程之变量篇

学新的程序设计语言, 要先学它的变量类型.

首先提醒大家: Jass2是区分大小写的, 如ABcd和ABCD是不一样的.

Jass2 变量类型

变量相当于物件的储存箱子, JASS2很多的变量类型只是个指针(变量地址).

使用变量前必须要首先声明变量类型和变量名称.

看个简单的例子:

local string my1stvar //声明1个字符型局部变量, 起名为my1stvar

set my1stvar = "GreedWind" //把"GreedWind"赋值给变量my1stvar

以后的程序中就可以直接引用/重新赋值my1stvar

变量(除了数组变量)可以在声明语句中初始化, 上面可以简化成:

local string my1stvar = "GreedWind" //声明字符型局部变量my1stvar并赋值为"GreedWind"

JASS2有哪些变量类型呢?

我们用WORLD EDITOR和Jass2变量类型做对照便一目了然了

WORLD EDITOR和JASS变量类型对照表:

World Editor 变量名Jass变量类型

Boolean boolean 布尔型(用于真/假判断)

Destructible destructable 可破坏物

Dialog dialog 对话

Dialog Button button 按钮

Floating Text texttag 漂浮文字

Integer integer 数值

Item item 物品

Leaderboard leaderboard 排行榜

Player player 玩家

Player Group force 玩家组

Point location 位置(点)

Real real 真值型数字

Region rect 地区

Special Effect effect 特效

String string 字符串

Terrain Deformation terraindeformation 地形

Timer timer 计时器

Timer Window timerdialog 计时器窗口

Unit unit 单位

Unit Group group 单位组

Player Score playerscore 积分(1.13版新类型)

World Editor中的Order(命令) , Ability(技能) , Unit Type(单位类型), Destructible type(可破坏物类型) 和 Item type(物品类型) 在JASS中对应的变量类型实际上是integer。

可以用单引号'Xxxx'(Xxxx为在World Editor用View as raw data(以行数据查看)中看到的代码)表示这些类型的值

Jass基本变量类型

integer

integer(数值)是的范围在 -2147483648 和 2147483647 之间的整数, 不能有小数位

在Jass中Integer的几中特殊形式:

1.'xxxx' 单引号加字符形式,该形式为256进制整数,每个字符代表其AscII码值,区分大小写,一般用来表示单位、物品、技能等代码。比如对战单位里剑圣的代码是 'Obla'(在物编中按Ctrl+D可以看到)

2.0xxx 8进制数字,首位为0表示8进制数字

3.0Xaa 16进制数字,以0x开头的表示16进制数字

real

real是范围很大的32字节数字, 可以有小数位, 123456.33就是real

小数点前或后是0的话,可以省略这个0;比如0.34=.34 4.0=4. 0.0可以写成0.或.0,但不能都省略boolean

boolean的值只有true(真)和false(假), 多用于条件判断语句

if (条件==true)

then

(符合条件做某事)

else

(不符合条件就做另一件事)

endif

string

string是字符串变量, 可以是null(空值). 注意Jass的字符串是大小写区分的, 赋值时用双引号 "" 引用

handle

handle句柄, 可以是null(空值). 是用于指向Warcraft III定义的数据结构的指针. 比如上表中的location/player等除了integer/real/boean/string外的的变量实际上就是handle类型的子变量code

code(程序代码), 可以是null(空值). 函数可以有code类型的传递参数, 表示该函数必须要有其他函数作为参数, 如:

function RunFunctionForAllPlayers takes code theFunction returns nothing

我们可以这样调用函数: call RunFunctionForAllPlayers(function someFunction) //先运行someFunction

也可以: call RunFunctionForAllPlayers(null) //不运行其他函数

用户定义变量类型

正如上面所说, 上表中location/player等除了integer/real/boean/string外的类型实际上就是handle类型的子类型, 这些变量就是用户类型变量, 实际就是一个数据结构的指针.

数组

是指一组同类型的有序列的变量. 数组中包含的元素可以用[n]来指明(n 表示第n + 1个元素, 从 0 算起).

以上所说的变量类型中除了code类型, 其他类型的变量都可以定义数组变量, 如

locate integer array dropitems

set dropitems[0] = 'Xxxx'

......

set dropitems[18] = 'Xbbb'

dropitems[18]指dropitems中第19个变量.

注意:

1) 数组所有元素初始值是"空", 比如integer类型的数组初始值为0, handle类型初始值的为null

2) 数组不能直接再次初始化, 只能数组按元素赋值, 如:

locate string array playername = "Greedwind" //数组非法赋值

locate string array playername //数组元素只能逐个赋值

set playername[1] = "Greedwind"

set playername[2] = "Greedwind's girlfriend"

unit array myUnits

unit array yourUnits

...

set myUnits = yourUnits // 非法

set myUnits[0] = yourUnits[10] // 合法

3) 数组在函数间不能互相传递. 即是不能把数组作为函数参数, 而且函数也不能返回数组类型的变量.

4) 数组元素域在 0 和JASS_MAX_ARRAY_SIZE = 8192 之间, 即是最多有JASS_MAX_ARRAY_SIZE + 1 个元素. JASS_MAX_ARRAY_SIZE是在common.j中定义的常数

有问有答

1)什么是全局变量和局部变量, 怎样声明和使用变量?

首先要了解, 从作用范围来区分, 变量有全局变量和局部变量.

全局变量作用于Jass程序的全部分, 即是如果全局变量abc在某个函数中改变了值, 这个值也将影响其他引用了abc变量的函数.

全局变量声明格式:

globals

变量类型变量名称 = 初始值 //有初始化的全局变量

变量类型变量名称 //无初始化的全局变量

变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值

...

endglobals

局部变量只作用于函数内部, 即是如果在函数内部定义了局部变量abc, abc的值只影响该函数内部, 不影响全局变量abc的值.

局部变量声明格式:

local 变量类型变量名称 = 初始值 //有初始化的局部变量

local 变量类型变量名称 //无初始化的局部变量

local 变量类型 array 变量名称 //数组局部变量, 不能再次初始化赋值

注意:

1) 不论是全局变量还是局部变量, 必须在程序开始部分首先声明.

即是全局变量声明总是在程序文件的最前端,

而局部变量声明总是在函数的最前面.

2) 在Trigger Editor用变量管理器(Ctrl + B)中定义的变量都是全局变量

3) 在Trigger Editor的循环GUI语句 For Loop (Integer A)和For Loop (Integer B)中的(Integer

A)(Integer B)都是全局变量

实例:

globals

integer abc = 5188

endglobals

.......

function myfunc1 takes nothing returns nothing

local integer abc

set abc = 1233

endfunction

function myfunc1 takes nothing returns nothing

local integer myint

set myint = abc

set abc = 0

endfunction

如果按顺序调用函数myfunc1 和 myfunc1, 那么在函数myfunc2中的myint的值是多少呢, abc最终值又是多少?

答案是: int = 5188, abc 最终值为 0

2)怎样在Trigger Editor(GUI)中使用局部变量?

(有关在Trigger Editor(GUI)中使用局部变量详细方法请参看我的签名中的链接 - 3c的内存泄漏)

GUI中不能直接引用局部变量,但是我们可以使用全局变量作为中介

首先声明定义变量类型。声明定义变量类型的语句只能放在TIGGER的开头,不然会出现编译错误声明定义变量类型:

要用:Custom Script - Action

语法:

Custom Script: local <变量类型> <变量名>

变量类型请参看WORLD EDITOR和JASS变量类型对应表

例如:

--单位变量

Custom Script: local unit u

--单位组变量

Custom Script: local group g

然后将它们赋值给临时全局变量就可以在GUI里调用该值了,注意全局变量要加前缀"udg_"

Custom Script: set udg_TempUnit=u

局部变量的使用:

在变量表(Control + B)中先定义好同类型临时变量(不要加前缀udg_)的变量,该变量可以在多个触发里重复利用

(在变量表中定义此变量是为了方便TIGGER EDITOR引用该变量。)

以下例子实现了在单位死亡的位置显示5秒的死亡信息(漂浮文字)

(象这种例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字(-Destroy (diesmessage)). 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了 )

例子:

Events:

A unit dies

Conditions:

Actions:

-Custom Script: local texttag diesmessage

-Custom Script: set udg_TempTextTag = diesmessage //注意要添加"udg_"前缀

-Floating Text - Create floating text at ((position of (Triggering Unit))

with the message ((A+(name of (Triggering Unit))) + "dies") with size 20 , red 100, green 100, blue 0, alpha 100.

-Set TempTextTag= (last created floating text)

-Wait 5.00 seconds

-Custom Script: set udg_TempTextTag = diesmessage

-Destroy (TempTextTag)

注意:不要利用同名覆盖的方法在GUI中使用局部变量!(即以udg_开头的局部变量与已定义全局变量名字相同)

该方法在触发内该类同名变量数量>=2时会出现严重Bug!

jass基础教程之常见问题篇

1)什么是全局变量和局部变量, 怎样声明和使用变量?

首先要了解, 从作用范围来区分, 变量有全局变量和局部变量.

全局变量作用于Jass程序的全部分, 即是如果全局变量abc在某个函数中改变了值, 这个值也将影响

其他引用了abc变量的函数.

全局变量声明格式:

globals

变量类型变量名称 = 初始值 //有初始化的全局变量

变量类型变量名称 //无初始化的全局变量

变量类型 array 变量名称 //数组全局变量, 不能再次初始化赋值

...

endglobals

局部变量只作用于函数内部, 即是如果在函数内部定义了局部变量abc, abc的值只影响该函数内部, 不影响全局变量abc的值.

局部变量声明格式:

local 变量类型变量名称 = 初始值 //有初始化的局部变量

local 变量类型变量名称 //无初始化的局部变量

local 变量类型 array 变量名称 //数组局部变量, 不能再次初始化赋值

注意:

1) 不论是全局变量还是局部变量, 必须在程序开始部分首先声明.

即是全局变量声明总是在程序文件的最前端,

而局部变量声明总是在函数的最前面.

2) 在Trigger Editor用变量管理器(Ctrl + B)中定义的变量都是全局变量

3) 在Trigger Editor的循环GUI语句 For Loop (Integer A)和For Loop (Integer B)中的(Integer

A)(Integer B)都是全局变量

实例:

globals

integer abc = 5188

endglobals

.......

function myfunc1 takes nothing returns nothing

local integer abc

set abc = 1233

endfunction

function myfunc1 takes nothing returns nothing

local integer myint

set myint = abc

set abc = 0

endfunction

如果按顺序调用函数myfunc1 和 myfunc1, 那么在函数myfunc2中的myint的值是多少呢, abc最终值又是多少?

答案是: int = 5188, abc 最终值为 0

2)怎样在Trigger Editor(GUI)中使用局部变量?

(有关在Trigger Editor(GUI)中使用局部变量详细方法请参看我的签名中的链接 - 3c的内存泄漏) GUI中不能直接引用局部变量,但是我们可以使用全局变量作为中介

首先声明定义变量类型。声明定义变量类型的语句只能放在TIGGER的开头,不然会出现编译错误声明定义变量类型:

要用:Custom Script - Action

语法:

Custom Script: local <变量类型> <变量名>

变量类型请参看WORLD EDITOR和JASS变量类型对应表

例如:

--单位变量

Custom Script: local unit u

--单位组变量

Custom Script: local group g

然后将它们赋值给临时全局变量就可以在GUI里调用该值了,注意全局变量要加前缀"udg_"

Custom Script: set udg_TempUnit=u

局部变量的使用:

在变量表(Control + B)中先定义好同类型临时变量(不要加前缀udg_)的变量,该变量可以在多个触发里重复利用

(在变量表中定义此变量是为了方便TIGGER EDITOR引用该变量。)

以下例子实现了在单位死亡的位置显示5秒的死亡信息(漂浮文字)

(象这种例子, 如果不使用用局部变量, 将无法准确销毁临时漂浮文字(-Destroy (diesmessage)). 因为在等待5秒后(-Wait 5.00 seconds), 最近创建的漂浮文字(last created floating text)可能已经不是原来的那个了 )

例子:

Events:

A unit dies

Conditions:

Actions:

-Custom Script: local texttag diesmessage

-Custom Script: set udg_TempTextTag = diesmessage //注意要添加"udg_"前缀

-Floating Text - Create floating text at ((position of (Triggering Unit))

with the message ((A+(name of (Triggering Unit))) + "dies") with size 20 , red 100, green 100, blue 0, alpha 100.

-Set TempTextTag= (last created floating text)

-Wait 5.00 seconds

-Custom Script: set udg_TempTextTag = diesmessage

-Destroy (TempTextTag)

注意:不要利用同名覆盖的方法在GUI中使用局部变量!(即以udg_开头的局部变量与已定义全局变量名字相同)

该方法在触发内该类同名变量数量>=2时会出现严重Bug!

jass基础教程之四[函数篇]

如果你仔细读完并读懂前面两章, 应该对Jass函数并不陌生了. 也许我在前两章写的太过综合紧凑, 所以写到这觉得没什么好写了. 不管怎样, 还是需要进一步深入了解Jass函数规范和注意事项.

注意, 在此章中不是教你动手写Jass函数, 而是让你基本可以读懂别人写的Jass脚本-->如果你英文足够好而且不傻(这是Jass中布尔并立条件, 上一章提到过).可以在Trigger Editor中把一些简单的触发器(Trigger)转化成自定义脚本, 因为事先知道程序逻辑, 这样读起来也比较容易.

1)函数定义要素

语法格式

function 函数名 takes 参数表 returns 返回类型

局部变量声明

局部变量声明

...

表达式

表达式

表达式

...

return 返回表达式

endfunction

其中:

a) 定义函数的关键字有: function ... endfunction, takes, returns

b) 函数名的首个字母不能是数字, 函数名中不能有第2章中所说的操作符, 特殊字符和多数非字母符号(如: 空格~`!@#$%^&*()-+=|\{}[];:'"<>?,./), 也不能使用中文. 函数命名要尽量简明易懂, 突出函数功能.

c) 参数表是规定传递入函数的数据类型和参数数量, 作用是函数间的数据交换(输入), 参数之间用逗号( , )分开. 不能定义数组作为参数, 这点在的第一章已经做了说明.

参数必须规定数据类型或者是无参数, 如

function myfunction1 takes nothing returns nothing

endfunction

function myfunction2 takes integer creatnum, unit myunit returns boolean

call CreateNUnitsAtLoc(creatnum, GetUnitTypeId(myunit), Player(1),

GetUnitLoc(GetTriggeringUnit()), bj_UNIT_FACING )

return true

endfunction

myfunction1为无参数的函数, 调用时不需要传递参数, 即是用 call myfunction1()

myfunction1为2参数函数, 参数类型规定为 integer 和 unit. 调用myfunction2时必须同时传递数据类型分别integer和unit的参数, 或者传递入空值(参看第二章的举例).

注意: 数字的空值为 0, handle(句柄)类型及其子类别的空值为 null. 关于handle类型请参看第一章. 我在本章背后会列出各数据类型所对应的空值.

d) 返回类型是规定函数返回的数据类型, 作用同样是函数间的数据交换(输出), 可以用returns nothing 说明没有返回参数

e) 局部变量声明必须写在函数开始部分. Jass总是先声明, 再使用. 如:

function myfunction3 takes nothing returns nothing

local integer i = 5

local integer j = 10

call myfunction2(i,美女 )

sleep(360)

call myfunction2(j,美女 )

endfunction

下面的函数是错误的:

function myfunction3 takes nothing returns nothing

local integer i = 5

call myfunction2(i,美女 )

local integer j = 10

sleep(360)

call myfunction2(j,美女 )

endfunction

f) 表达式是函数的骨干, 是逻辑的实现部分. 写好这部分, 需要对common.j, blizzar.j,commond.ai有一定的了解.

g) 返回表达式的值必须和该函数声明时的返回类型一致, 不要声明返回为恐龙类型, 却偷梁换柱返回个美女. 返回值不能是数组.

2) 程序执行入口函数

每个Jass脚本文件都需要定义执行程序的入口函数

在触发器脚本文件war3map.j中, config()和main()是入口函数.

config()函数作用是在开始游戏之前初始化地图, 如按设计时指定点放置单位/可破坏物,初始化单位状态等.

main()函数在游戏开始才执行.

在AI脚本文件中, 用户需自定义main()函数作为该脚本文件的程序入口.

脚本文件执行入口函数的固定格式:

function main takes nothing returns nothing //触发器和AI脚本均使用

function config takes nothing returns nothing //触发器脚本使用

注意: 一张地图中只能有1个触发器脚本文件war3map.j, 此文件包含在w3m或w3x中

一张地图中可以包含多个AI脚本文件, 输入AI脚本文件的目录为: \scripts\

有问有答:

1) 什么是空值? 不同数据类型的空值是什么?

当变量声明时, 如果在声明语句中不直接赋值, 则该变量的初始化值为空值, 表示没有赋值. 如: local unit myunit

在上句声明中, myunit没有直接赋值, 那么myunit在声明后值是null

以下是数据类型的空值对应表

WORLD EDITOR和JASS变量类型对照表:World Editor

变量名 Jass变量类型空值

Boolean boolean 布尔型(用于真/假判断) false

Destructible destructable 可破坏物 null

Dialog dialog 对话 null

Dialog Button button 按钮 null

Floating Text texttag 漂浮文字 null

Integer integer 数值 0

Item item 物品 null

Leaderboard leaderboard 排行榜 null

Player player 玩家 null

Player Group force 玩家组 null

Point location 位置(点) null

Real real 真值型数字 null

Region rect 地区 0

Special Effect effect 特效 null

String string 字符串 null

Terrain Deformation terraindeformation 地形 null

Timer timer 计时器 null

Timer Window timerdialog 计时器窗口 null

Unit unit 单位 null

Unit Group group 单位组 null

Player Score playerscore 积分(1.13版新类型) null

由上表可以看出, 除了integer, real的空值为 0 和 boolean 的空值为false以外, 其他数据类型的空值都是null. 原因很简单: 除了integer, real, boolean外, 其他数据类型都是handle(句柄)的子类型, handle类型的空值为null, 它的儿子们也跟着null到底了.

2) 什么是common.j, Blizzard.j, common.ai?

这3个文件都是支持War3 Jass的公共库文件, 文件里面包含和声明了所有(几乎是所有)Jass可以调用的函数和全局变量.

common.j 是最基础的API库文件, 在Trigger Jass和AI Jass中都可以调用.

Blizzard.j 包含使用Trigger Editor时生成的Trigger Jass中经常调用的库函数/全局变量, 实际上是基于common.j写的子函数. Blizzard.j只能在Trigger Jass中调用.

common.ai 只能在AI Jass中调用, 它有AI中需要使用的函数和全局变量.

注意: 在Trigger Jass中, 不能调用common.ai中的函数和全局变量; 同样地, 在AI Jass中, 也不能使用Blizzard.j的函数和全局变量.

3) 如何获得最新的common.j, Blizzard.j, common.ai?

在war3.mpq/war3x.mpq/war3patch.mpq都有common.j/Blizzard.j/common.ai, 要获得最新版本的文件, 可以用WINMPQ打开war3patch.mpq, 在WINMPQ右上方的输入框中输入: scripts\* ,如果你的war3patch.mpq没有"加密"过, 那么可以找到这3个文件. 如果是"加密"过的, 则需要把war3patch.mpq的文件全部解压到临时目录, 然后用Ultra-Edit中的在文件中搜索字符的功能寻找这3个文件.

4) 可以在自己的地图中使用自定义的common.j, Blizzard.j, common.ai吗?

可以. 用输入管理器输入自定义的common.j, Blizzard.j, common.ai, 输入目录应为\scripts\. 这样, 运行地图中的脚本时, War3就不会到war3patch.mpq寻找这3个文件了而直接从地图中的\scripts\目录调用. 这样做的好处就是可以使库文件的同步一致. 通常, 版本相同的WAR3, 其库文件也相同, 所以多数时候不需要在地图中输入这3个文件. 但如果你更改了这3个基本文件来支持你的Jass, 或者确保为了库文件的一致性, 便可以在地图中输入基础库文件.

5) 怎么解读公共库文件(common.j, Blizzard.j, common.ai)的函数/全局变量?

Blizzard对函数/全局变量的命名是相当规范简明易懂的(当然需要一定的英文基础), 它定义的函数/全局变量的名基本上是英语语句. 我举些例子:

native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit 本地函数CreateUnit() 即是Create Unit, 意思为创建单位, 从参数表(takes 和 returns之间的声明)来看, 这个函数需要输入玩家, 单位编码, 坐标x, 坐标y, 方向角度, 返回值是单位类型变量.

从函数的名字和参数表, 可以猜测/确认CreateUnit()是用来在地图的x/y坐标中为指定玩家创建指定单位, 并且使创建单位面向所定义的角度, 返回值是创建单位.

在地图入口函数main()中, CreateUnit()被大量调用, 用来重现地图设计时用WORLD EDITOR(GUI)放置的单位.

注意: 就如前面所说过, integer可以用单引号括起4个英文字母/数字来表示. 所以CreateUnit()中integer unitid参数可以用 'Xxxx'来表示. 如:

set u = CreateUnit( Player(5), 'ndgt', -2944.0, -3136.0, 270.000 )

上句意思是为玩家5在地图坐标(-2944.0, -3136.0)中创建编码为'ndgt'的单位, 并使创建单位面向角度为270度, 然后把创建单位保存在变量u中.

总结下Blizzard函数名/全局变量名的规律:

a) 前坠Get 取得某属性, 此类函数一般有返回值

b) 前缀Set 设置某属性

c) 前缀Is 是否判断, 此类函数返回类型都是boolean, 返回true或false

d) 中间有2 数据类型转化函数, 如S2I(), I2R, I2S()等

e) 有Item/Unit/... 肯定是与物品/单位/...相关的函数

f) 后缀BJ 此函数肯定是在Blizzard.j中定义的, 不能在AI中使用.

g) 前缀bj_ 在Blizzard.j中定义声明的全局常量(常量是指定义并赋值后不能再改变的值)

h) 前缀Create 创建

i) 前缀Remove 移除

k) 全部大写在common.j中定义声明的全局常量

6) 实用问题: 如何创建外观随机可变的地图?

上面说过, main()是地图入口函数, 在main()调用了一些再现地图设计时原貌的子函数如CreateAllUnits(). 因此, 我们可以在CreateAllUnits()中加入随机函数GetRandomInt()来控制单位/物品/可破坏物等初始化过程.

我们可以用WINMPQ打开要修改的地图, 提取war3map.j来修改main()函数及其相关函数. 修改完war3map.j后, 再用WINMPQ导入修改后的war3map.j.

a) 函数修改/增加方法:

这是3C地图中的CreateAllUnits()函数

function CreateAllUnits takes nothing returns nothing

call CreateNeutralPassiveBuildings() //用户自定义函数

call CreatePlayerBuildings() //用户自定义函数

call CreateNeutralHostile() //用户自定义函数

call CreateNeutralPassive() //用户自定义函数

call CreatePlayerUnits() //用户自定义函数

endfunction

注意: CreateAllUnits()也不是库函数, 是用户自定义函数):

我们可以根据CreateAllUnits()创建另一个函数:

function CreateAllUnitsRandom takes nothing returns nothing

// randomint 是 1,2,3中的随机数

local integer randomint = GetRandomInt(1, 3)

call CreateNeutralPassiveBuildingsRandom(randomint)

call CreatePlayerBuildingsRandom(randomint)

call CreateNeutralHostileRandom(randomint)

call CreateNeutralPassiveRandom(randomint)

call CreatePlayerUnitsRandom(randomint)

endfunction

因为原来调用的函数都是无参数函数, 所以相应的函数应该做些修改, 如:

//创建玩家单位, 以CreatePlayerUnits()为蓝本增加新函数

function CreatePlayerUnitsRandom takes integer randomint returns nothing

//此函数以CreateUnitsForPlayer0为蓝本增加新函数

call CreateUnitsForPlayer0Random(randomint)

......

endfunction

//创建中立敌对单位

//此函数以CreateNeutralHostile为蓝本增加新函数

function CreateNeutralHostileRandom integer randomint returns nothing

local player p = Player(PLAYER_NEUTRAL_AGGRESSIVE)

local unit u

local integer unitID

local trigger t

local real life

//加入条件控制, 根据随机数创建不同单位组合.

if randomint == 1 then

//可掉宝物的单位

set u = CreateUnit( p, 'nC26', -6533.2, 445.1, 220.680 )

set t = CreateTrigger( )

call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_DEATH )

call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_CHANGE_OWNER )

call TriggerAddAction( t, function Unit000012_DropItems )

//不掉宝物单位

set u = CreateUnit( p, 'nelb', -373.5, 3533.4, 44.518 )

set u = CreateUnit( p, 'nomg', -233.6, 3436.2, 140.871 )

elseif randomint == 2 then

//不掉宝物单位

set u = CreateUnit( p, 'a001', -373.5, 3533.4, 44.518 )

set u = CreateUnit( p, 'a002', -233.6, 3436.2, 140.871 )

else

......

endif

endfunction

别忘了修改main()

function main takes nothing returns nothing

........

//call CreateAllUnits() //原版的单位初始化函数, 不再使用

call CreateAllUnitsRandom() //使用新的单位初始化函数

........

endfunction

b) 初始设置复制方法:

问题的关键就是, 这么多初始单位, 怎么样修改起来不累人?

这里介绍一种方法:

1. 先把要修改的地图复制

2. 修改复制地图初始单位的类型/位置/宝物等, 删除所有TRIGGER, 并保存

3. 用WINMPQ打开复制地图, 提取war3map.j

4. 复制war3map.j中对应函数中创建单位的语句

5. 把复制的语句粘贴在原地图中相应函数的适当位置

6. 重复1-5, 复制更多的随机初始化设置

注意: 如果用World Editor再次修改并保存, main()将使用GUI默认生成的call CreateAllUnits(), 而不是call CreateAllUnitsRandom(). 此时还需要打开war3map.j修改main()函数.

同样, 使可破坏物等初始设置有随机变化也可以用此方法.

jass基础教程之五[库函数]

这章是Jass基础教程中最难的部分, 也是最实用的部分.

Jass的关键字有26个, 跟英文字母一样多. 我们来回顾一下:

and, array, call, constant, else, elseif, endfunction, endglobals, endif, endloop, exitwhen, extends, function, globals, if, local, loop, native, not, or, return, returns, set, takes, type, then

以此看来, Jass是语法结构最简单的一种准计算机语言. Jass实现功能基本依靠调用common.j, blizzad.j, common.ai中的库函数.

本章所述内容不属于Jass语法部分, 最主要讲述:

触发器(Triggers)

跨脚本通讯(Inter-Script Communication)

队列(Enumerations)

队列过滤器(Filters)

线程(Threads)

1) 触发器(Triggers)

触发器用于地图触发器脚本(Trigger Jass), 用于响应特定事件. 它是种响应信号(callback), 触发器不能应用于AI, 即是说AI Jass中不能有触发器的语句.

触发器包含创建触发器, 设置触发条件, 设置动作.

a)创建触发器

触发器的数据类型为trigger(触发器), 是handle(句柄)的子类型.

创建触发器的函数在common.j中的声明:

native CreateTrigger takes nothing returns trigger

参数:

nothing //无参数

返回:

trigger //返回创建的触发器

使用格式: set 表达式 = CreateTrigger()

其中表达式是trigger类型的变量

新数据类型:

trigger类型: 是handle的子类型, 用于调用和处理触发器

b)触发事件

触发事件的数据类型为event(事件). 可以引起触发响应的触发器必须先在游戏中注册触发事件, 用于监视游戏事件发生.

注册触发事件的函数在common.j中的声明:

native TriggerRegister*Event takes

trigger whichTrigger, ... returns event

函数名:

根据事件对象的不同, 有不同的事件响应. TriggerRegister*Event中的 * 号为对象名, 如: TriggerRegisterUnitEvent, TriggerRegisterEnterRegion 等, 注册不同对象的事件要求传递相应指定对象作为参数, 有些事件注册要求传递下面所说的过滤器(Filters)

参数:

trigger whichTrigger //触发器变量

... //相应指定对象的变量

返回:

event //返回该事件

使用方法(举注册单位事件的例子):

call TriggerRegisterUnitEvent(哪个触发器, 哪个单位, 哪种类型的单位事件)

新数据类型:

event //事件

c)触发条件

触发条件是一组布尔表达式(boolexpr)数据, 它的数据类型为条件函数(conditionfunc), 是布尔表达式(boolexpr)类型的子类型.

建立触发条件的函数在common.j中的声明:

native Condition takes code func returns conditionfunc

参数:

code func //函数代码作为参数

返回:

conditionfunc //返回建立的条件

其中takes code func是指需要函数代码func作为参数, 参数函数 func 必须的声明格式必须是: takes nothing returns boolean. 即是说, 用作参数的函数本身应该是无参数且返回值为布尔型(boolean).

使用格式: set 表达式 = Condition(function 布尔型函数名)

其中表达式是条件函数(conditionfunc)

新数据类型:

boolexpr 布尔表达式

conditionfunc 条件函数, 是布尔表达式的子类型

比如:

function Girl1 takes nothing returns boolean

...

return true

endfunction

function Girl2 takes integer i returns boolean

...

return true

endfunction

function Girl3 takes nothing returns nothing

...

return

endfunction

// 假设 c 为conditionfunc类型变量

set c = Condition(function Girl1) //(A)

set c = Condition(function Girl2) //(B) 本身要求参数

set c = Condition(function Girl3) //(C) 返回值不是boolean类型

解释: Girl1() 是无参数且返回为boolean的函数, 可以用作 Condiction() 中的参数函数code func. 而Girl2() - 本身要求参数, Girl3() - 返回值不是boolean类型, 所以(B)(C)函数不可作为Condiction()的参数.

在第一章变量篇中我没有详细说明code类型的数据, 因为怕读者不能理解. 现在我说明下code类型数据. 我们用例子说明, 比如:

call myfuction1(IsGirl()) //(A)

call myfuction2(function IsGirl()) //(B)

(A)和(B)之间有什么不同呢? 按我的理解: (A)(B)都把IsGirl()运行返回后的值当作myfunction1()/myfunction2()的参数. IsGirl()在(A)中是一次性的处理过程. 而(B)是创建了一个运行IsGirl()逻辑的监视线程, 只要线程没给清除/终止, IsGirl()将一直监视变化. 注意这里所说的线程跟下面要说的AI线程是两码事.

d) 增加触发条件:

触发条件可以用TriggerAddCondition()增加

增加触发条件的函数在common.j中的声明:

native TriggerAddCondition takes trigger whichTrigger,

boolexpr condition returns triggercondition

参数:

trigger whichTrigger //触发器变量

boolexpr condition //触发条件变量

返回:

triggercondition //返回该触发条件的handle(句柄)

使用格式:

set tc = TriggerAddCondition(触发器, 触发条件)

其中 tc 为triggercondition类型变量

新数据类型:

triggercondition 触发条件句柄

(注意: 触发条件和上面要说的触发事件是不一样的!!!)

例:

这是增加/移除/改变触发条件的例子

//文件头声明个全局变量tc

globals

...

triggercondition tc = null

trigger mytrigger = null

...

endglobals

function Girl takes nothing returns boolean

...

return true

endfunction

function notGirl takes nothing returns boolean

...

return false

endfunction

//为 mytrigger 增加触发条件

function addcondition takes nothing returns nothing

...

set mytrigger = CreateTrigger()

set tc = TriggerAddCondition(mytrigger, Condition(function Girl))

...

endfunction

//因为tc是mytrigger触发条件的句柄, 把tc清空便清除了指向的触发条件.

function removecondition takes nothing returns nothing

...

set tc = null

..

endfunction

//改变 mytrigger 的触发条件

function modifycondition takes nothing returns nothing

...

set tc = null //先把原来的触发条件移掉

set tc = TriggerAddCondition(mytrigger, Condition(function noGirl))

...

endfunction

e)触发器动作

触发器动作是当指定事件发生并符合触发条件的执行的语句.

增加触发器动作的函数在common.j中的声明:

native TriggerAddAction takes trigger whichTrigger,

code actionFunc returns triggeraction

参数:

trigger whichTrigger //触发器变量

code actionFunc //执行函数

注意: 执行函数必须是无参数无返回值(takes nothing returns nothing)的函数返回:

triggeraction //触发动作

新数据类型:

triggeraction //触发动作, handle字类

把有关触发器主要函数糅合在一起, 我们来看个例子, 研究下触发器是怎么创建的: //文件头声明全局变量mytrigger

//假设mytrigger是监视单位死亡事件的触发器

globals

...

trigger mytrigger = null

...

endglobals

//判断是否掉物品

function isDrop takes nothing returns boolean

local boolean conditcion

...

if conditcion = true then

return true

else

return false

endif

endfunction

//掉物品

function DropItems takes nothing returns nothing

//获得触发单位

local unit trigUnit = GetTriggerUnit()

....

call UnitDropItem( trigUnit, 'IC21' )

...

endfunction

function ThisIsMyTrigger takes nothing returns nothing

local unit u

//在-5630.5, -4723.1坐标为玩家5创建单位'n00I', 面向90.260度

set u = CreateUnit(Player(5), 'n00I', -5630.5, -4723.1, 90.260 )

//创建触发器(相当于mytrigger的初始化)

set mytrigger = CreateTrigger()

//为mytrigger注册触发器事件, 让游戏系统监视所创建单位u的死亡事件

//EVENT_UNIT_DEATH是common.j中定义的常量

call TriggerRegisterUnitEvent( mytrigger, u, EVENT_UNIT_DEATH )

//为mytrigger增加触发条件

//isDrop是无参数返回为布尔值的函数

set tc = TriggerAddCondition(mytrigger, Condition(function isDrop))

//为mytrigger增加触发器动作 - 掉宝物

//DropItems是无参数无返回值的函数

call TriggerAddAction(mytrigger, function DropItems )

...

endfunction

可以看出, 创建触发器顺序是:

1. 触发器初始化 - CreateTrigger()

2. 触发器事件注册 - TriggerRegister*Event()

3. 定义触发条件(可选) - TriggerAddCondition()

4. 触发器动作 - TriggerAddAction()

注意:

1. 创建触发器必须先用CreateTrigger()初始化.

2. 没有注册事件的触发器只是个处理过程, 不会响应事件执行程序

3. 触发器可以不加触发条件, 因为可以用触发动作调用的函数来控制逻辑.

2)线程(Threads)

(这部分属于AI部分, 作为入门者做一般性了解就行了, 因为AI都是纯JASS写的, 也没有真正好的AI EDITOR. 本人也对此一知半解, 关于AI的文章也不多, 没什么好参考的.)

线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass). 通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用comman.j的本地函数:

native StartThread takes code func returns nothing

调用 call StartThread(function myfunc) 将创建一个从函数myfunc开始执行的线程.

每个玩家最多可以拥有6个线程, 包括一开始执行的主线程. 当一个玩家有6个线程数时, 调用StartThread()的语句将被忽略. 线程不能回收, 当你为某玩家创建了5个自定义线程, 将无法为该玩家创建更多的线程.

当新线程创建时, 线程立即生效. 当线程让步执行时, 创建此线程的父线程将继续执行.

在同一玩家中的所有线程都共享全局状态(包括变量). 即是修改某个全局变量, 修改后的值在此玩家的所有线程中都是可见的.

线程在以下的情况让步执行, 返回父线程

a) 当线程中的操作码(opcode)超出限制, 线程会自动休眠 1 秒

b) 当线程中用使用 Sleep(n), 线程将休眠 n 秒, 然后继续执行.

线程在以下情况会中止, 返回父线程

a) 如果 call StartThread(null)中, 线程中止

b) 当线程的主函数返回, 线程中止.

(StartThread()中之间调用的函数就是主函数.)

c) 当线程中使用没有声明的变量, 线程中止. 在使用之前, 变量必须声明.

d) 当线程中出现零为被除数时, 线程中止

e) 线程主函数出现语法错误.

注意: 虽然AI脚本可以使用大部分common.j的库函数, 但有些类型的函数在AI不能正常工作, 如:

a) 返回字符串类型(string)的本地函数, 如I2S(), SubString()等

b) 需要以code, trigger, boolexpr 等类型数据为参数的本地函数, 如触发器函数, 队列函数(ForGroup, 等)

注意: AI中不可以使用Blizzard.j的函数, 触发器中也不可以使用common.ai的函数, AI和触发器都可以使用common.j的函数(当然, 对于AI, 还受上面所说的限制)

common.ai和common.j是写AI时可以调用和参考库文件, 要研究AI, 先去读这2个文件.

3) 跨脚本通讯(Inter-Script Communication)

在游戏中, 可能会有多个独立的Jass脚本文件同时运行. 比如在对战地图中的游戏, 运行触发器脚本文件的同时, 也可能运行了每个电脑玩家的AI脚本文件. 每个脚本文件之间的全局变量不是共享的. 所以, 一个电脑玩家的AI脚本中设置的全局变量不会影响另一个电脑玩家的AI脚本的执行.

触发器脚本也不可以和AI脚本共享全局变量. 但可以用传递命令的方法进行脚本之间的数据交换. 命令由一对数值型数据(integer)组成: 命令值(command value)和数据值(data value).

从触发器脚本向AI脚本发出通讯命令, 可以使用common.j中定义的以下本地函数:

native CommandAI takes player num,

integer command, integer data returns nothing

参数:

player num //玩家

integer command //命令

integer data //命令数据

以下是AI中使用的common.j函数, 注意: 每个电脑玩家都会有独立的AI脚本, 所以, 以下函数都没有要求玩家作为函数参数.

每个电脑玩家都有命令堆来堆放接受到的命令. 想知道有多数个命令堆放在命令堆, 可以用下面的函数:

native CommandsWaiting takes nothing returns integer

参数: 无

返回: 命令堆的命令数(integer)

获得存放在命令堆中最顶端的命令():

//返回命令

native GetLastCommand takes nothing returns integer

//返回命令数据

native GetLastData takes nothing returns integer

上面2个函数都不会移除命令堆中的命令, 要移除堆中的命令, 可以用:

native PopLastCommand takes nothing returns nothing

4) 队列(Enumerations)

虽然JASS不能自定义数据结构(因为JASS缺少指针操作符), 但API库中提供了一些实现队列操作的函数. 如一组单位为单位组(group), 一组玩家为势力(force), 虽然一组可破坏物没有明确定义它的数据类型, 但也可以用API函数来操作.

单位组和势力的操作函数很类似.

单位组处理函数

// 初始化单位组

native CreateGroup takes nothing returns group

// 在指定单位组中增加指定单位

native GroupAddUnit takes group whichGroup, unit whichUnit returns nothing

// 在指定单位组中移除指定单位

native GroupRemoveUnit takes group whichGroup, unit whichUnit returns nothing

势力处理函数

// 初始化势力

native CreateForce takes nothing returns force

// 在指定势力中增加指定玩家

native ForceAddPlayer takes force whichForce, player whichPlayer returns nothing

// 在指定势力中移除指定玩家

native ForceRemovePlayer takes force whichForce, player whichPlayer returns nothing JASS不能直接操作队列里面的元素, 它是通过callback类型的函数来实现对队列的操作:

// 对指定单位组中的每个单位都运行指定callback函数callback

// (对应GUI语言的For Each Unit in )

native ForGroup takes group whichGroup, code callback returns nothing

// 对指定势力中的每个玩家都运行指定callback函数callback

// (对应GUI语言的For Each Player in )

native ForForce takes force whichForce, code callback returns nothing

输入上面两个函数的callback函数必须是无参数无返回值函数(takes nothing returns nothing) 同样, 操作可破坏物也可以用在区域内的可破坏物作为队列, 可以以用类似的方法:

// 在指定区域r内符合指定过滤器filter的都运行指定callback函数actionFunc

// (过滤器见下节的讲解)

native EnumDestructablesInRect takes rect r,

boolexpr filter, code actionFunc returns nothing

在callback函数, 可以用下面的函数获得队列中的下一个元素:

// 获得单位组中的下一个单位

// (对应GUI语言的Pick Every Unit in )

constant native GetEnumUnit takes nothing returns unit

// 获得势力中的下一个玩家

// (对应GUI语言的Pick Every Player in )

constant native GetEnumPlayer takes nothing returns player

// 获得可破坏物组中的下一个可破坏物

// (对应GUI语言的Pick Every Destructables in )

constant native GetEnumDestructable takes nothing returns destructable

注意: AI中不支持队列函数的使用.

这是杀死单位组中所有单位的实例:

// 这是callback函数, 无参数并无返回值

function KillGroupCallback takes nothing returns nothing

// 获得单位组中的下一个单位

local unit nextUnit = GetEnumUnit()

// 杀死该单位

call KillUnit(nextUnit)

endfunction

// 调用ForGroup

// 对单位组groupToKill中的每个单位都运行函数KillGroupCallback

call ForGroup(groupToKill, function KillGroupCallback)

另一个经常是用的例子是在队列中查找特定条件的元素. 不幸的是, 因为JASS只支持callback函数来处理队列中的元素, 所以只有用全局变量来保存不同单位的属性. 下面是找出单位组里生命最高的单位的例子:

//定义全局变量

globals

//用于储存两单位比较后较高的生命值, 初始化为 0

real mostLifeSoFar

//用于储存两单位比较后有较高生命值的单位, 初始化为 null

unit unitWithMostLifeSoFar

endglobals

//比较单位生命值的callback函数

function MostLifeCallback takes nothing returns nothing

//获得单位组中的下一个单位

local unit nextUnit = GetEnumUnit()

//获得单位属性 - 生命

//UNIT_STATE_LIFE是common.j中定义的常量

local real life = GetUnitState(nextUnit, UNIT_STATE_LIFE)

//比较生命值

if life > mostLifeSoFar then

//把较大的生命值储存

set mostLifeSoFar = life

//把有较大生命的单位储存

set unitWithMostLifeSoFar = nextUnit

endif

endfunction

...

//初始化全局变量的值为空值

天正建筑TArch2014从入门到提高视频教程

江西省南昌市2015-2016学年度第一学期期末试卷 (江西师大附中使用)高三理科数学分析 一、整体解读 试卷紧扣教材和考试说明,从考生熟悉的基础知识入手,多角度、多层次地考查了学生的数学理性思维能力及对数学本质的理解能力,立足基础,先易后难,难易适中,强调应用,不偏不怪,达到了“考基础、考能力、考素质”的目标。试卷所涉及的知识内容都在考试大纲的范围内,几乎覆盖了高中所学知识的全部重要内容,体现了“重点知识重点考查”的原则。 1.回归教材,注重基础 试卷遵循了考查基础知识为主体的原则,尤其是考试说明中的大部分知识点均有涉及,其中应用题与抗战胜利70周年为背景,把爱国主义教育渗透到试题当中,使学生感受到了数学的育才价值,所有这些题目的设计都回归教材和中学教学实际,操作性强。 2.适当设置题目难度与区分度 选择题第12题和填空题第16题以及解答题的第21题,都是综合性问题,难度较大,学生不仅要有较强的分析问题和解决问题的能力,以及扎实深厚的数学基本功,而且还要掌握必须的数学思想与方法,否则在有限的时间内,很难完成。 3.布局合理,考查全面,着重数学方法和数学思想的考察 在选择题,填空题,解答题和三选一问题中,试卷均对高中数学中的重点内容进行了反复考查。包括函数,三角函数,数列、立体几何、概率统计、解析几何、导数等几大版块问题。这些问题都是以知识为载体,立意于能力,让数学思想方法和数学思维方式贯穿于整个试题的解答过程之中。 二、亮点试题分析 1.【试卷原题】11.已知,,A B C 是单位圆上互不相同的三点,且满足AB AC → → =,则A BA C →→ ?的最小值为( ) A .1 4- B .12- C .34- D .1-

PSCAD简单入门教程

PSCAD 使用说明 1.PSCAD安装 PSCAD / EMTDC常见4.0.2 ctacked版本或版本,这个版本PSCAD被封装成一个ISO文档,如图1-1,可用虚拟光驱或winrar打开。下面使用winrar将其解包。 图1-1PSCAD封包形式 在系统安装了以上版本后,可以直接双击这个iso文档,然后点击“解压到”图标,如图1-2,就可以对其进行解包。 如图1-2 使用winrar解PSCAD的封包 解压后可以得到三个文件夹,如下图1-3所示: 图1-3 PSCAD须按以下步骤安装,否则,装好后可能不运行。另外,操作系统最好

使用WinXP专业版,曾在WinXP Home版本上出现过不明原因的PSCAD不能运行情况。 安装步骤: (1)首先,运行PSCAD 目录下的,一路按OK或者NEXT在选择安装列表时选中“PSCAD(all Editions)”,如图1-4,不要选择License Manager和Real Time Playback (它需要硬件采集设备支持,否则只是评估版)这两项。使用附带的EGCS/GNU Fortran77编译器就选中“GNU Fortran Compiler”,如果要使用之前自行安装的Fortran90编译器就不要选这一项。 图1-4 2、当License Manger选择对话框出现时,如图1-5,选择“I will only be using Single-user/single-machine licenses.”或“professal”这一项,随后一路OK即可。 注意:选the Student Edition 版本,模型只允许15个结点。

钢琴入门:汤普森简易钢琴教程

钢琴入门:汤普森简易钢琴教程

钢琴入门教程:小汤(汤普森简易钢琴教程》 《小汤》的学习目的是:通过对中央C附近的音符进行反复认音练习,掌握五线谱基础知识,并将线谱与键盘有机地联系起来;通过数拍子,培养正确的节奏感。为下一步的学习打下一个良好的基础 第一册涵盖的音域有意识地作了限制。只介绍中央C以上的五个音和以下的五个音,时值也从全音符到四分音符为止,不再扩展,这样就有可能包括许多以复习形式出现的曲例,不必另找补充教材。总之,本教程的每一册课本都保持各自的完整性,都有各自的书写练习、视谱练习和复习曲目,在以后的各册中还将增加技巧练习。 伴奏: 书中大部分曲例,配有供教师和家长用的伴奏谱。它们都经过精心的创作,使那些简易的小曲听起来尽可能像结构庞大的乐曲的片断。这样做有很多好处,不仅有可能用不同的调弹奏,避免总是徘徊在C大调上,令人生厌;而且可以用自己严格的速度和鲜明的节奏对学生施加影响,特别是他们在弹奏中带有充满活力的节拍重庆,能使学生一开始就“感觉”到节奏的存在。 第一册:《约翰.汤普森简易钢琴教程一》 A 音符节奏:(图 1) (图2) B 音域:中央C为中心,上下五个音(见图2) C 节拍:4/4 、2/4、 3/4 D 调性:C调 重点:主要以认识五线谱、手指编号,一拍二拍三拍四拍音符组合。 《小汤1》: 1.严格地只在白键上弹奏。 2.在附点前较早引入了切分节奏(《雷格泰姆舞》、《弗吉尼,我的故乡》、《摘棉花的老人》、《我的忧愁谁知道》) 3.三拍子的巧妙进入。《小矮人进行曲》紧接《小矮人舞曲》。 4.逐渐增加手指数量。 第一学时

内容:从钢琴键盘至练习题 本课时的知识点:1.音名、五线谱、全音符、二分音符、四分音符、中央C 2.钢琴键盘、基本弹奏姿势、基本手型 本课时的重点:1.中央C在五线谱与钢琴键盘上的位置、四个音符的不同形状及时值 2.正确手型中手指支撑与手腕放松的平衡感觉 本课时的难点:1.音符时值在弹奏中的把握、唱名与音名的本质区别 2.大指弹奏中央C的正确手型 练习把握:1.反复确认键盘上中央C在高音谱表与低音谱表上的不同位 置、 2.四个音符长短时值的练习:我采用一个比喻方法,叫数苹果法,具体做法是,在一个相同距离内(比如学生放在钢琴上的书的长短为例)学生拍一下,嘴数一拍,节拍器响一次等于手拍一下的时间,而我就告诉他们,拍一次一个苹果。这个方法对于年龄小(4-5周岁,下同)的初学学生掌握拍子、用节拍器练习节奏非常适用。 3.大指弹奏中央C时虎口的开度、手指支撑时力的均衡。 时间安排:各年龄段不同,我这里以年龄小的学生为例。开始每天以15-20分钟为基点,然后循序渐进逐步增加时间。 第二学时 学习内容:火车、玛丽有只小羔羊、海军工兵、伞兵。注:1.年龄小的学生,可把内容分为两次上课和练习。2.根据学生的心里特点,老师可把课本内容顺序做一定调整,便于学生集中学习和记忆。 知识点:1.高音谱表D、E音名的位置、低音谱表B、A音名的位置 2.键盘上D、E、B、A的位置 3.左右手2、3手指在键盘上的站立练习 4.曲子四拍子、三拍子中强拍的弹奏 重点:1.高音谱表、低音谱表中新学音名的位置 2.键盘上新学音名位置的确认

(完整版)cad制图初学者基础教程

Cad基本教程 要基本熟悉工程制图cad,从标准、绘图、标注、打印四个方面入手比较简单,适于讲解教程的制作和方便个人理解,算不上全面。另外因自己的水平一般,我尽量讲细一点,以便于更好理解。 一、标准(简单了解就行,不太重要,知道有这就行。) 工程制图大概包括设备图,流程图,布置图三种。一般设备图有包含设备主视图和俯视图。布置图必须标明方位。 标准主要说的是制图标准,包括国标,行业制图标准等等。比如说国标规定焊缝的标注等。又比如说我们化工制图标题栏,明细栏等的制作标准。还有像绘图过程中物料管道线用 0.9mm粗线,仪表圆一般规定直径10mm这样的死规定。 但一般这些都不太重要,实际操作过程中,只要图纸表达清晰,内容表达明确的简略图即可。 二、绘图 cad绘图主要借助cad中绘图工具栏和modify修改工具栏中工具。(先了解就行,不用死记)

绘图工具的使用过程中,结合状态栏的辅助操作,可以更快的完成图纸的制作。 一般常用的状态有正交,极轴,对象捕捉。其他不常用就不一一介绍了。 正交:用于直线的绘制,复制移动的垂直或水平方向的移动。再不需要时可取消。 极轴:有助交点终止处的绘图。也可用于直线的绘制。 对象捕捉:主要是对交点处或中心点的捕捉显示。 完成各种绘图用具的教学,会是一种比较枯燥的工作。要一一讲解起来既费时又费力,感觉完全没有必要。所以我先讲解几个常用工具操作,然后根据相近相通原理,撇一叶而知秋。介绍这之前首先先说下一些常识: 1、关于鼠标的应用 Cad中鼠标滚轮具有三个功能,1、转动滚轮可以放大缩小绘图界面,但不能缩小扩大绘图的实际尺寸和比例。2、单机滚轮后可做抓取工具,任意控制所要绘图地点居于中心位置。3、左单击选择操作选项,并接后续操作的进行。 2、选项里的部分操作 和word类似,我一般学会一个软件后,首先会了解选项里的一些操作,以方便和简化后续绘图工作中肯可能带来的不便。 在“工具”栏里最下面打开“选项”

十分钟晨会分享正能量(30篇汇总)

阴影是条纸龙 ――人生中,经常有无数来自外部打击,但这些打击究竟会对你产生怎样影响,最终决定权在你手中。 祖父用纸给我做过一条长龙。长龙腹腔空隙仅仅只能容纳几只蝗虫,投放进去,它们都在里面死了,无一幸免!祖父说“蝗虫性子太躁,除了挣扎,它们没想过用嘴巴去咬破长龙,也不明白一向向前能够从另一端爬出来。因而,尽管它有铁钳般嘴壳和锯齿一般大腿,也无济于事。” 当祖父把几只同样大小青虫从龙头放进去,然后关上龙头,奇迹出现了仅仅几分钟,小青虫们就一一地从龙尾爬了出来。 正能量分享 命运一向藏匿在我们思想里。许多人走不出人生各个不一样阶段或大或小阴影,并非正因他们天生个人条件比别人要差多远,而是正因他们没有思想要将阴影纸龙咬破,也没有耐心慢慢地找准一个方向,一步步地向前,直到眼前出现新洞天。

乐观者与悲观者 ――乐观者在每次危难中都看到了机会,而悲观人在每个机会中都看到了危难。 父亲欲对一对孪生兄弟作性格改造,正因其中一个过分乐观,而另一个则过分悲观。一天,他买了许多色泽鲜艳新玩具给悲观孩子,又把乐观孩子送进了一间堆满马粪车房里。 第二天清晨,父亲看到悲观孩子正泣不成声,便问为什么不玩那些玩具呢? “玩了就会坏。”孩子仍在哭泣。 父亲叹了口气,走进车房,却发现那乐观孩子正兴高采烈地在马粪里掏着什么。 “告诉你,父亲,”那孩子得意洋洋地向父亲宣称,“我想马粪堆里必须还藏着一匹小马呢!” 正能量分享

乐观者与悲观者之间,其差别是很搞笑乐观者看到是油炸圈饼,悲观者看到是一个窟窿。 十分钟晨会分享正能量第3篇 好学不倦 ――仅有一个洞穴老鼠很快被捉。 在一个漆黑晚上,老鼠首领带领着小老鼠出外觅食,在一家人厨房内,垃圾桶之中有很多剩余饭菜,对于老鼠来说,就好像人类发现了宝藏。 正当一大群老鼠在垃圾桶及附近范围大挖一顿之际,突然传来了一阵令它们肝胆俱裂声音,那就是一头大花猫叫声。它们震惊之余,各自四处逃命,但大花猫绝不留情,不断穷追不舍,最终有两只小老鼠走避不及,被大花猫捉到,正要向它们吞噬之际,突然传来一连串凶恶狗吠声,令大花猫手足无措,狼狈逃命。 大花猫走后,老鼠首领施施然从垃圾桶后面走出来说我早就对你们说,多学一种语言有利无害,这次我就因而救了你们一命。 正能量分享

钢琴基础教程(五线谱)37747

五线谱钢琴基础教程(1) 基础 篇 1 键盘知识中央C 五线谱入门线上线间八度 2 线上音符线间音符白键7个音符 3 (一)你用的键盘乐器 无论你是拥有一个真正的钢琴,还是一个电钢琴、电子琴或风琴,这里的教程都会教你认识键盘,弹奏五线谱曲子,并学习基本的五线谱知识。 简单说来,钢琴的学习包括认识键盘,将手放到合适的位置,如何控制运用你的手指,如何用双手而不是单单右手来共同弹奏,当然还有如何看懂五线谱钢琴曲谱。 你是用哪种键盘乐器来学习的呢?一共有多少个键盘?我建议你最好使用有61个键盘的那种。如果你的键盘有重力感觉(垂重感键盘)的就更好了,就更接近真实钢琴的机械装置和触感。一般来说简易低档的电子琴的键盘没有重力感设计,键盘的按下时没有什么阻力(比较真实的钢琴键盘就会知 道)。 (二)白键盘黑键盘从哪里开始呢? 看到键盘可能一开始会迷惑:这么多的键盘---88个键我如何能记住呢?

不过你很快就可以总结出黑键的分布规律:即三个黑键和两个黑键规律性的排列,而且间隔是完 全一样的。 你还会发现上图的白键上有规律的标出绿色的字母C,这个C是出现在两个黑键左面的白键上的。至于这个为何叫C以后会详细介绍。另一个你要注意记忆的是键盘中央的C位置,既所谓的中央C。这是一个需要牢记的位置,你以后会发现这个标志性的C的很多意义。而下面的中央C位置是真实钢琴的 键盘位置。 (三)钢琴键盘的分组五线谱基本要素

上图最上面的就是你经常看到的钢琴的五线谱,中间那个空心圆在短横线的位置---线间就是中央C。这个中央C位置是你弹奏任何一个钢琴曲子都要参考的键盘。 五线谱是记录音乐的一种语言,就象英语、汉语一样,它同样有自己的规则,告诉你弹什么和如何弹奏。最明显的特征就是左端的谱号形式-----高音谱号和低音谱号一起成联合谱表,这是一个标准的钢琴五线谱形式。音符(后面还要讲)在线间或线上。 将中央C的一组白色键盘灰颜色填充,你会发现以C为一个组,七个白色琴键加上五个黑色键盘(两个黑色和三个黑色的)构成一12个键盘组,而且这个C组不断重复。随便用左手或右手弹奏这些不同的 组会发现越往右侧的声音越高,越往左声音越低。 (四)C 和八度 上面的图示显示出在中央C右面和左面的其他的C在五线谱上面的位置。从中可以看出,在键盘上有规律的C的位置排列到了五线谱上面就没有什么规律可循。换句话说,不同C组的键盘位置在五线谱位置上没有什么联系,你只能通过大量的练习和不断的记忆来逐渐掌握。 线上音符

CAD基础教程_从入门到施工图(配图)

. . Word格式第一章 Auto CAD的基础操作 1.1 启动Auto CAD 在实际的应用过程中, Auto CAD的启动方法有很多,下面介绍两种比较常用的启动方式。1.1.1 利用“开始”菜单启动Auto CAD 2006。(如图1-1所示) 图1-1 利用“开始”菜单启动Auto CAD 2006 1.1.2 利用桌面快捷方式启动Auto CAD 如果桌面上有Auto CAD 2006 快捷图标,只需双击桌面快捷图标启动Auto CAD 2006。如果桌面上没有快捷图标,则可以在桌面上创建Auto CAD 2006 的快捷方式。操作过程如下:Step1:单击“开始”按钮,执行“程序”|“Autodesk”|“Auto CAD 2006-Simplified Chinese”|“Auto- CAD 2006” Step2:在“Auto- CAD 2006”命令上单击鼠标右键,弹出快捷菜单,在快捷菜单中选择“发送到”|“桌面快捷方式”命令,在桌面上即可生成Auto CAD 2006的快捷菜单。如图1-2所示 图1-2 创建桌面快捷方式 1.2 Auto CAD 的用户界面 启动Auto CAD 2006 之后,就进入了Auto CAD 2006 的工作环境,如图1-3所示。其中主要包括了以下组成部分:标题栏、菜单栏、工具栏、绘图窗口、命令行文本窗口等部分。

. . Word 格式 图1-3 Auto CAD 的工作界面 1.2.1标题栏 标题栏位于绘图窗口的最上方,包括控制图标以及窗口的最大化、最小化和关闭按钮,并且显示了图形文件的名称和路径。 1.控制图标:包括最大化、最小化、还原、关闭等按钮。 2.程序名:AUTO CAD 1)Automatic 自动地 2)Computer 计算机 3)Aided 辅助 4)Design 设计 3.当前程序的版本号:2006 4.图形文件的名称:Drawing1.dwg (:如文件已保存,则在显示名称的同时,显示路径。) 5.窗口的最大化、最小化和关闭按钮

CAD绘图简易入门教程

CAD绘图简易入门教程 第1章基础 1.设备绘图界限 一般来说,如果用户不作任何设置,系统对作图范围没有限制,可以将绘图区看作是一幅无穷大的图纸。 格式-图形界线 命令:limits 出现四个选项:开、关、指定左下角点、指定右下角点。 2.设备绘图单位 格式-单位 命令:ddunits 长度、角度、插入比例、方向 3.对象选择 三种方式选择: ①直接选择②窗口选择(左选)③交叉选择(右选)。 当对象处于选择状态时,在其上会出现若干个带颜色的小方框,称为夹点。 工具-选项-选择集 未选中:兰色 选中:红色 暂停:绿色 夹点大小可调整。 4.快速缩放平移视图 命令:zoom ①全部缩放 ②范围缩放 ③比例缩放 ④窗口缩放 ⑤实时缩放 标准工具栏中的“实时平移”按钮 视图-缩放-范围 5.设备捕捉和栅格 ①捕捉 隐含分布在屏幕上的栅格点,当鼠标移动时,这些栅格点就像有磁性一样能够捕捉光标,使光标精确落到栅格点上。 利用栅格捕捉功能,使光标按指定的步距精确移动。 ②栅格 在所设绘图范围内,显示出按指定行间距和列间距均匀分布栅格点。 栅格是按照设置的间距显示在图形区域中的点,类似于纸中的方格的作用,栅格只能在图形界限内显示。 6.设置正交和极轴 ①正交 类似丁字尺的绘图辅助工具,光标只能在水平方向的垂直方向上移动。

正交模式和极轴追踪是不能同时使用的。 ②极轴追踪 F10 工具-草图设置-极轴追踪 极轴角设置:5、10、15、18、22.5、30、45、90 极轴角测量:绝对、相对上一段。 7.设置对象捕捉、对象追踪 ①对象捕捉 在绘图过程中,可以使用光标自动捕捉到对象中特殊点,如端点、中点、圆心和交点等。是使用最为方便和广泛的一种绘图辅助工具。 对象捕捉有两种方式: 单点捕捉、对象捕捉 单点捕捉执行过程中,对象捕捉不起作用。 对象捕捉模式设置: F3或工具-草图设置-对象捕捉-相应设置,以选择合适的对象捕捉模式。 在工具栏上空白区域单击鼠标右键,在弹出的快捷菜单中选择对象捕捉命令。②对象追踪 使用对象捕捉追踪,可以沿着基于对象捕捉点的对齐路径进行追踪。默认情况下,对象捕捉追踪将设置为正交。对齐路径将显示在始于已获取的对象点的 0 度、90 度、180 度和 270 度方向上,但是,可以使用极轴追踪角代替。 第2章基本二维图形绘制 1.绝对坐标系 ①笛卡尔绝对坐标: 以坐标原点(0,0,0)为基点定位所有的点。各个点之间没有相对关系,只是和坐标零点的有关。 ②绝对极坐标: 以坐标原点(0,0,0)为极点定位所有的点,通过输入相对于极点的距离和角度来定义点的位置。 使用格式: 距离〈角度 2.相对坐标系 ①笛卡尔相对坐标: 以某点相对于另一已知点的相对位置来定义该点的位置。相对已知点坐标点(x,y,z)的增量为(Δx, Δy,Δz)的坐标点的输入格式为(@Δx, Δy, Δz),其中@表示输入的为相对坐标值。 ②相对极坐标: 以某一特定的点为参考极点,输入相对于极点的距离和角度来定义一个点的位置,其使用格式为:@距离〈角度 3.点 ①点的设置 格式—点样式-设置点样式 ②绘制点 命令:绘图-点-单点、多点

十分钟看懂分享经济

公司组织了一次分享活动,我被分到了共享经济的主题。于是翻箱倒柜两天去了解这个最近很火的概念。觉得只稍懂了皮毛,之后继续去学习吧,这次分享也只能算是1.0(笑)。 今天给大家分享的主题是共享经济,人人分享的时代。 好,在开始之前先给大家讲个故事。 故事的主角是我的一个哥们,他也是做互联网方面的工作,他有一辆车,他原来每天都会一个人开车上下班,最近他发现顺风车,专车很火,他想着啊,反正来回来去也是自己开,车上空着的座位空着也是空着,何不赚点油儿钱呢?于是他也下了软件,成为了一名“司机师傅”。 现在他上下班都会打开顺风车软件看看有没有同路的人,好赚点外快。你知道,结了婚的人都没啥钱。不过你也知道北京有尾号限行的,这时候他也会打开软件作为一名乘客去搭别人的车,他觉得也挺方便。 有一次他加班很晚,下班的时候打了顺风车回家,接他的人是个中年男的,他那天挺累的就没主动说话,然后那个中年男子就开始跟他聊起天来,后来两个人一路上聊的很好,他们竟然发现两个人竟然有很多相同的爱好和观点,更没有想到的是两年前,他们竟然在一家公司上班? 故事到这里就结束了,说这个故事是什么意思? 其实我们可以从故事中听出几个关键点。

1.闲置。我哥们的车子上座位是闲置的,对不对? 2.赚钱,他通过打车软件,来做顺风车出行。 3.他既是拥有者也是使用者。他用车子给自己创造了价值,同时他也做别人的车子, 让别人获得价值。 4.他通过这样的方式认识了陌生人。 这是一个平凡的故事,却反映着我们当下的生活状态,而这种状态就是今天我们要讲的主题——共享经济。共享经济 那究竟什么是共享经济呢? 共享经济就是将你闲置的资源共享给别人,提高资源利用率,并从中获得回报。 共享经济的理念就是:共同拥有而不占有。

早会分享小故事

早会分享小故事 篇一:早会激励小故事 1、死路与活路 一次,我到河边钓鱼,遇到一个捕蟹的老人,身背一个大蟹篓,但没有上盖。我出于好心,提醒老说:“大伯,你的蟹篓忘了盖上。” 老上慈祥地看了我一眼,说:“小伙子谢谢你的好意,但我想告诉你:蟹篓可以不盖。要是有蟹爬出来,别的蟹就会把它钳住,结果谁都跑不掉。”有人就很像蟹。 记得某地发生大地震,有个小煤矿的工人谁也不甘落后,争先恐后往外挤。由于坑道口太小,把出口堵死了,结果也无法逃生。而在附近也有一个小煤矿,队长当时很镇定,他大声咸道:“大家不要挤,一个一个来人来!”他自己并不急不逃生,而是留在后面指挥,结果二十多个矿工会都安全逃了出来,他自己也脱离了险境。 生活往往就是这样:你不给别人活路,最终将会自断生路;你给别人机会,其实也等于给自己机会。 2、表演大师 有一位表演大师上场前,他的弟子告诉他鞋带松了。大师点头致谢,蹲下来仔细系好。等到弟子转身后,又蹲下来将鞋带解松。 有个旁观者看到了这一切,不解地问: "大师,您为什么又要将鞋带解松呢?" 大师回答道:"因为我饰演的是一位劳累的旅者,长途跋涉让他的鞋事松开,可以通过这个细节表现他的劳累憔悴." "那你为什么不直接告诉你的弟子呢?" "他能细心地发现我的鞋带松了,并且热心地告诉我,我一定要保护他这种热 情的积极性,及时地给他鼓励,至于为什么要将鞋带解开,将来会有更多的机会教他表演,可以下一次再说啊。" 【心得】保有生命的热情比了解生存的技巧更加重要。 3、语言的伤害 曾有人讲述过这么一故事。 在茂密的山林里,一位樵夫救了一只小熊,母熊对樵夫感激不尽。有一天,樵夫迷路借宿到熊窝,母能便安排他住宿,还以丰感的晚宴款待了他。第二天一大早,樵夫对母熊说:“你招待得很好,但我惟一不喜欢的地方就是你身上的那股臭味。母熊心里不乐,但嘴上说:“作为补偿,你用斧头砍我的头吧。”樵夫按要求做了。 若干年后,樵夫又遇到了母熊,问她头上的伤口好了没有。母熊说:“噢,那次痛了一阵了,伤口愈合后我就忘记了,不过你说过的话,我一辈子也忘不了。” 没错,真正伤害人心的不是刀子,而是比刀子更厉害的东西---语言。 4、选择 有三个人要被关进监狱三年,监狱长给他们三个一人一个要求。美国人爱抽雪茄,要了三箱雪茄。法国人最浪漫,要一个美丽的女子相伴。而犹太人说,他要一部与外界沟通的电话。 三年过后,第一个冲出来的是美国人,嘴里鼻孔里塞满了雪茄,大喊道:"给我火,给我火!"原来他忘了要火了。

十分钟之内的励志文章精选

十分钟之内的励志文章精选 人总是要和挫折、成功交朋友的。在你面对挫折的打击时,你是选择知难而进,还是选择退缩不前。知难而进会给你带来成功的喜悦!而退缩不前,只会使你沉浸在失败的痛苦中! 下面由小编与大家分享十分钟之内的励志文章,希望你们喜欢!欢迎阅读! 励志文章1:成大事者争百年 1 读者小欣是大四的学生,去年连续九个月都在准备一场考试,压力太大,导致内分泌失调。 她说,每天都不开心,起初是吃不下饭,去医院看过之后也没得到好转,后来又莫名其妙地开始暴饮暴食,每天都要吃很多东西。备考那段时间,她从不和外界交流,每天都不停地逼着自己读书复习,最后竟然发现自己的记忆力和反应能力都变迟钝了。 临近考试,她整个人几乎是崩溃的。我不敢问她考试结果,只是安慰她,尽力就好。小欣说,她是个农村姑娘,家庭条件不太好,上大学靠了不少亲戚朋友接济,所以,在学业上只能成功,不能失败。 我的高中同学阿枝也曾有过类似的经历。阿枝一直很努力,成绩也一直很好,但她在高二的时候就得了一种怪病,一学习就头疼,去医院看,医生说,她给自己的压力太大了,建议休学。不得已,阿枝放弃了高考。 但是,阿枝在工作后参加自学考试的过程却异常顺利,看书学习丝毫不会头疼。有一次我们聊起她退学这件事,她说:当时太看重得失了。 有句话说:“你执着于什么,便会被什么所伤。” 人的能量需要循环,不能持续消耗。如果一味地消耗自己,身体和精神上都会不堪负荷,那些让你太过在意的东西,反而会更快地失去。 所以说,得失心太重,不是一件好事。心平气和下的努力,才更有效率。 2 小柔是我在写作班上碰到的学生,她学习的劲儿,可以用“拼命”来形容,

钢琴入门:汤普森简易钢琴教程

钢琴入门教程:小汤(汤普森简易钢琴教程》 《小汤》的学习目的是:通过对中央C附近的音符进行反复认音练习,掌握五线谱基础知识,并将线谱与键盘有机地联系起来;通过数拍子,培养正确的节奏感。为下一步的学习打下一个良好的基础 第一册涵盖的音域有意识地作了限制。只介绍中央C以上的五个音和以下的五个音,时值也从全音符到四分音符为止,不再扩展,这样就有可能包括许多以复习形式出现的曲例,不必另找补充教材。总之,本教程的每一册课本都保持各自的完整性,都有各自的书写练习、视谱练习和复习曲目,在以后的各册中还将增加技巧练习。 伴奏: 书中大部分曲例,配有供教师和家长用的伴奏谱。它们都经过精心的创作,使那些简易的小曲听起来尽可能像结构庞大的乐曲的片断。这样做有很多好处,不仅有可能用不同的调弹奏,避免总是徘徊在C大调上,令人生厌;而且可以用自己严格的速度和鲜明的节奏对学生施加影响,特别是他们在弹奏中带有充满活力的节拍重庆,能使学生一开始就“感觉”到节奏的存在。 第一册:《约翰.汤普森简易钢琴教程一》 A 音符节奏:(图 1) (图2) B 音域:中央C为中心,上下五个音(见图2) C 节拍:4/4 、2/4、 3/4 D 调性:C调 重点:主要以认识五线谱、手指编号,一拍二拍三拍四拍音符组合。 《小汤1》: 1.严格地只在白键上弹奏。 2.在附点前较早引入了切分节奏(《雷格泰姆舞》、《弗吉尼,我的故乡》、《摘棉花的老人》、《我的忧愁谁知道》) 3.三拍子的巧妙进入。《小矮人进行曲》紧接《小矮人舞曲》。 4.逐渐增加手指数量。 第一学时

内容:从钢琴键盘至练习题 本课时的知识点:1.音名、五线谱、全音符、二分音符、四分音符、中央C 2.钢琴键盘、基本弹奏姿势、基本手型 本课时的重点:1.中央C在五线谱与钢琴键盘上的位置、四个音符的不同形状及时值 2.正确手型中手指支撑与手腕放松的平衡感觉 本课时的难点:1.音符时值在弹奏中的把握、唱名与音名的本质区别 2.大指弹奏中央C的正确手型 练习把握:1.反复确认键盘上中央C在高音谱表与低音谱表上的不同位置、 2.四个音符长短时值的练习:我采用一个比喻方法,叫数苹果法,具体做法是,在一个相同距离内(比如学生放在钢琴上的书的长短为例)学生拍一下,嘴数一拍,节拍器响一次等于手拍一下的时间,而我就告诉他们,拍一次一个苹果。这个方法对于年龄小(4-5周岁,下同)的初学学生掌握拍子、用节拍器练习节奏非常适用。 3.大指弹奏中央C时虎口的开度、手指支撑时力的均衡。 时间安排:各年龄段不同,我这里以年龄小的学生为例。开始每天以15-20分钟为基点,然后循序渐进逐步增加时间。 第二学时 学习内容:火车、玛丽有只小羔羊、海军工兵、伞兵。注:1.年龄小的学生,可把内容分为两次上课和练习。2.根据学生的心里特点,老师可把课本内容顺序做一定调整,便于学生集中学习和记忆。 知识点:1.高音谱表D、E音名的位置、低音谱表B、A音名的位置 2.键盘上D、E、B、A的位置 3.左右手2、3手指在键盘上的站立练习 4.曲子四拍子、三拍子中强拍的弹奏 重点:1.高音谱表、低音谱表中新学音名的位置 2.键盘上新学音名位置的确认 3.左右手2、3指断奏练习的力量感觉

10分钟励志演讲稿3分钟精选

10分钟励志演讲稿3分钟精选 我还要说,为了生命的过程而学习。其实,学习就是成长过程之关键。成长中一定需要学习,人都要在学习中成长。当国家和你们的家庭为你们提供如此好的学习条件的时候,你们更应该珍惜这个机会。下面给大家分享关于10分钟励志演讲稿,方便大家学习。 10分钟励志演讲稿1 题记:这是一个真实的故事,说的是哑妮在决定命运的关键时刻所作的抗争。一个人在成长中难免会被生活的阴影笼罩,这阴影,有个人的,有家庭的,有时是来自社会的……是听凭命运的安排,还是与命运抗争?读完这个故事将会对你的人生有所启迪,特别将能感悟到,在人生的开端,学习将是多么的重要…… 我和老赵是同村,所以对老赵家里的事比较了解。老赵祖宗八代都是农民,而当儿女俩同时拿到了大学录取通知书时,老赵却急着逼女儿出嫁。这是为什么呢? 原来老赵的女儿自幼不会说话,去过很多医院,医生都说她的声带跟什么长在了一块儿,需要动手术,可老赵一直拿不出几千元的医疗费,所以她就成了哑巴,村里的人都叫她哑妮。

哑妮相貌俊俏,心灵手巧。乡下没有聋哑学校,她就平日里跟着弟弟小宝在乡里上小学、上初中。打从她会写字时,她就用纸笔与人“说话”。人人都夸哑妮的字工整,像刻的一样好;作文写得特棒,还多次在作文报上发表呢;学校举办书法绘画大赛,她还得过特等奖呢;学习成绩年年优秀;她还会剪纸艺术,剪出的花草树木、飞禽走兽活灵活现,栩栩如生,村里人都说她像古代故事里的刘兰芝,谁家结婚办喜事,还请她剪“喜喜”字剪“鸳鸯”呢。 哑妮初中毕业后,老赵劝她在家喂猪喂牛,种地养蚕,当个农民。可她还想上学,就是愁着没有学校收她。小宝听说县城刚办了一个聋哑学校,不收费,就劝她继续上学,说将来可以报考残疾人艺术学院,照样上大学、找工作。老赵一听不收费,就同意了,哑妮又高高兴兴地上学去了。 这三年的求学生活很快就过完了,小宝收到了名牌大学的录取通知书,哑妮也考上了残疾人艺术学院。接到录取通知书的当天,老赵对女儿说:“我没钱供你们姐弟俩一齐上大学,你就别上了。一来你是个哑巴,二来你又是个女孩,也快到了要嫁人的年龄了,我想尽快给你找个婆家,另外也好趁此向男方要几千元彩礼,留作供你弟弟上完大学,你看咋样?”哑妮咬紧嘴唇直摇头。老赵要挟说:“除非你能说出一句流利的话来”。哑妮哑口无言了。 老赵托媒婆一连介绍了几个,都没答应,原因是都不愿意拿出那么多的彩礼。就在八月份的一天,终于有一个40多岁的木

建筑、结构、路桥、造价、CAD等免费视频教程

建筑软件视频: 3d3s视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/3d3s/ 广厦视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/guangxia 理正视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/lizheng/ SAP2000 教程视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/CSI/ TSSD探索者教学视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/tansuozhe/ TEKLA视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/TEKLA/ PS2000视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/PS2000/ 网架视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/wangjia/ Midas视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/Midas/ 清华TUS视频:https://www.doczj.com/doc/cb9307122.html,/jzrj/TUS/ ETABS视频教程:https://www.doczj.com/doc/cb9307122.html,/ETABS/ 公路软件视频 CARD/1视频:https://www.doczj.com/doc/cb9307122.html,/glrj/Card1/ 海地视频:https://www.doczj.com/doc/cb9307122.html,/glrj/haidi/ 纬地视频:https://www.doczj.com/doc/cb9307122.html,/glrj/weidi/ 海德视频:https://www.doczj.com/doc/cb9307122.html,/glrj/haide/ PCVX视频:https://www.doczj.com/doc/cb9307122.html,/glrj/PCVX/ 同望视频:https://www.doczj.com/doc/cb9307122.html,/glrj/tongwang/ Eicad视频:https://www.doczj.com/doc/cb9307122.html,/glrj/Eicad/ 挡墙视频:https://www.doczj.com/doc/cb9307122.html,/glrj/dangqiang/ 桥梁软件视频: MIDAS视频:https://www.doczj.com/doc/cb9307122.html,/qlrj/MIDAS/ 桥梁通视频:https://www.doczj.com/doc/cb9307122.html,/qlrj/qiaoliangtong/ 桥梁博士:https://www.doczj.com/doc/cb9307122.html,/qlrj/qlbs/ 桥梁大师:https://www.doczj.com/doc/cb9307122.html,/qlrj/qlds/ GQJS视频:https://www.doczj.com/doc/cb9307122.html,/qlrj/GQJS/ 造价软件视频: 神机妙算视频:https://www.doczj.com/doc/cb9307122.html,/zaojia/sjms/ 斯维尔视频:https://www.doczj.com/doc/cb9307122.html,/zaojia/siweier/ 鲁班视频:https://www.doczj.com/doc/cb9307122.html,/zaojia/luban/ 南方cass视频:https://www.doczj.com/doc/cb9307122.html,/CASS/ 鸿业视频:https://www.doczj.com/doc/cb9307122.html,/hongye/ 家园视频:https://www.doczj.com/doc/cb9307122.html,/jiayuan/ 广联达视频:https://www.doczj.com/doc/cb9307122.html,/guanglianda/ 3DS Max 7.0中文版视频教程:https://www.doczj.com/doc/cb9307122.html,/3d/ 装饰装修设计师超级宝典:https://www.doczj.com/doc/cb9307122.html,/zszx/ AutoCAD 2007中文版标准教程:https://www.doczj.com/doc/cb9307122.html,/cad/ AutoCad 2010 中文版实用教程:https://www.doczj.com/doc/cb9307122.html,/cad2010/

钢琴入门教程之手指操

钢琴入门教程之手指操 钢琴入门教程之手指操 如何提高儿童的兴趣,是当今幼儿钢琴教学中的一个难题.下面就钢琴入门教程中手指操的相关知识点传授给大家,希望对你们有益。 一手臂放松操 面对钢琴零起点的孩子,在开始正规的课程之前,我总是先让他们信识身体的哪一部分是手臂,手臂可以怎样活动,怎样才能找到手臂 的重量,重量又是如何落下.于是编了以下三节手臂放松操,由易到难,邮简到繁,让孩子们在游戏中轻松愉快地认识了手臂以及手臂在演奏 钢琴时的规范动作.为钢琴演奏的第一步"非连音的弹奏"学习做好了 准备. 1.手臂放松的练习 通过长期观察,我发现孩子们在弯腰的时候比站立时更容易找到 手臂放松的感觉,于是编了以下的练习操,让他们看着自己的手臂放 松的甩动,在教他们认识手臂的同时也找了手臂的重量. "大象甩鼻子:小朋友们请站好,两腿稍微分开,距离与肩宽.弯腰 九十度,手臂放松垂直.手臂像大象鼻子一样,左右服起来. 2.手臂用力的练习 通过前一节前一节"手臂放松操"的练习,有朋友们能够在弯腰的 状态下顺利地找到手臂的重量.此时马上站立起来做以下的第二节操,还象前一节那样前后服甩动.把刚才的整党带过来,就能比较方便的 找到站立状态下的手臂重量.随着摆动幅度的加大,小朋友们还能体 会到重量的由小到大,由轻到重,在找到重量的同时学会如何运用,为"非连音的弹奏"打下扎实的基础.

"小猴荡秋千"小朋友们请站好,两腿稍微分分开,距离与肩宽.两个手臂同时向前后摆动,就象小猴在荡秋千一样越摆越大,越甩越高. 3.手臂协调的练习 第三节操"手臂放松操"可以有多种练习方法:单干手向前甩动,单手向后甩动,双手同时向前甩动,双手同时身后甩动以及双手反向甩动. "荷兰大风车"小朋友们请站好,双手顺时针甩手臂,双手逆时针甩手臂.右手顺时针甩手臂,左手逆时针甩手臂,做两个荷兰大风车. 能过以一一系列的练习,小朋友们已经完全了解手臂的重量,能够熟练地运用重量,并且在用力的同时能够感觉到腰部的支持和身体的平衡,身体的协调能力也得到了很大的锻炼. 二五指练习操 通过第一部分三节操的训练,小朋友们已经能够在弯腰和站立的状态下顺利地找到手臂的重量,并能放松自如的运用,可以说这是个很好的开始.现在我们要训练坐着的状态下找到手臂的重量,让这个重量完全放松,自然地掉在大腿上.这样就可以非常方便地把手臂的重量掉在钢琴上了. 1.手臂重量垂落的练习 在做这个练习时要注意检查坐姿是否端正,手臂弯曲的角度和手掌的方向是否正 确.手臂重量掉在腿上时,是用手腕落下而不是手掌拍打. "宝宝抱大熊"请小朋友们坐在琴凳上,双脚放平,自然分开.两个手臂慢慢抬起,与肩同高,做抱大熊的姿势.手掌向下,手臂自然垂落在腿上.重复抬起--落下的动作. 2.手指关节的练习 为了让小朋友们在弹钢琴时能够拥有比较漂亮的手型和比较独立的手指,需要一些手掌肌肉和手指各关节的练习.此时可以做以下的

十分钟晨会分享正能量30篇

十分钟晨会分享正能量30篇 鲁迅的铁笔柔心,巴金的平淡真情,用不一样的方式诠释生命的刚强,把钢铁熔铸成信念,把血液沸腾成勇气。海伦凯勒生命的辉煌是一双手抚摸世界,一颗心打量人生写下了不朽的著作《假如给我三天光明》。贝多芬把琴声融化成柔情,把信念塑造成乐章,谱写命运交响曲,令人震撼,令人折服。 在大自然中踏寻生命的真谛,你能够在山山水水中感受淡泊的心境,寻找平和的自我;你能够在大漠孤烟直,长河落日圆自然之下下寻找自我;在杨柳岸晓风残月寻找自我;在泰山之巅、黄山之顶的绝顶登高处寻找自我--------人生是一曲别样的歌谣,生命是一个跃动的过程,成长是一次烦恼的体验,在大自然中寻找自我,扣人心弦!生活是探索与发现的旅程,自我也会因坚强大气而呈现不一样的光彩,不一样的人生!跌到了,爬起来,用微笑感动整个世界。 不要在站在人生的十字路口,彷徨,无奈……抽刀断水水更流,举杯消愁愁更愁。记住,我们也会奏起《命运交响曲》。记住,我们不仅仅有三天的光明。画出一个美丽的抛线,不惑之年的天空万里无云,将来的天空依旧明明朗媚。 雄鹰振翅奋飞能够登上金字塔顶,而我心飞翔,依旧能够在金字塔顶徜徉。 世界是一个绚丽的舞台,生活每一个人都是主角,每个人都演绎着自我的故事,或许,你的故事并不是很精彩,也许,你的故事很不

成功,但也要记得为自我鼓掌,为自我喝彩。成功不是偶然,失败不是终结,请再为自我鼓掌,再为自我喝彩,为自我的勇气、梦想、执着留下掌声,为演绎更完美的明天留下掌声。掌声是对人的一种激励是一种真挚热情的鼓励。掌声是给与人的巨大动力,让绝望的人见到期望的曙光。所以,请永远给自我鼓掌吧!记住,主角,永远是我们自我! 十分钟晨会分享正能量(八): 成功者自救 某人在屋檐下躲雨,看见观音正撑伞走过。这人说:观音菩萨,普度一下众生吧,带我一段如何 观音说:我在雨里,你在檐下,而檐下无雨,你不需要我度。这人立刻跳出檐下,站在雨中:此刻我也在雨中了,该度我了吧观音说:你在雨中,我也在雨中,我不被淋,因为有伞;你被雨淋,因为无伞。所以不是我度自我,而是伞度我。你要想度,不必找我,请自找伞去!说完便走了。 第二天,这人遇到了难事,便去寺庙里求观音。走进庙里,才发现观音的像前也有一个人在拜,那个人长得和观音一模一样,丝毫不差。 这人问:你是观音吗 那人答道:我正是观音。 这人又问:那你为何还拜自我 观音笑道:我也遇到了难事,但我明白,求人不如求己。

【佳作推荐系列】课堂十分钟演讲稿

课堂十分钟演讲稿 课堂十分钟演讲稿 发布时间:2020-05-27 玩得酷靠得住的我们,上了演讲台怎么能怂,不就是即兴的课堂演讲吗,今天第一范文网小编给大家分享一些课堂十分钟演讲稿,希望对大家有所帮助。 课堂十分钟演讲稿篇一 你是谁,读者,百年之后读着我的诗? 一个头缠白布、身着素衣的老者向我走来,默默微笑着,我无法从春天的财富里为你送来一朵鲜花,无法从远方的云彩里为你送来一缕金霞,打开门向四周看看,从繁花盛开的园里采撷百年前消失的鲜花的芬芳记忆,让欢愉的声音穿越百年时光 泰戈尔就这样一步一步向我走近,在我的耳边低语,告诉我奉献的美丽它如一抹春日的阳光,亲吻着每一个生灵。 在熹微的晨光里,叶儿轻轻晃动,飘摇在秋风里。落叶在泥土里迷失自己的时候,才融入到森林的生命里去了。你说着,用手托住一片黄叶。叶儿一生的意义便在于此,在深秋的晚风中,用一种辉煌的告别方式来终结自己的生命,为大地奉献自己微薄的力量。零落成泥,不奢求什么回报,它只是记住了大地对它的哺育之恩,也渴望用自己的生命予以报答。正因为如此,叶子才得到了永生,飘散在诗人缠绵的笔墨里,一幅幅书卷里 秋日的凄凉过去,是春日的繁花似锦。那枝头含苞的花蕾,抑或层层叶片之间的花蕊,一团团一簇簇,竞相争艳着。泥土饱受污辱,却以花朵作为回报。你让我捧一坯土,我闻到了泥土里散发的阵阵幽香。 土壤虽忍受着人们的摒弃,却毫无怨言,经历雨滴的拍打,冷风的肆虐,终于在和煦的春风里,吐纳一地的芬芳,在人们的心头弹奏着潺潺的乐章。也许,世间某些外表丑陋不堪的事物,它们也一直在默默奉献着,一直在为世间的美好而努力着。 生命是上帝赋予的,我们唯有献出它时,才真正拥有它。你依旧微笑着,向我讲述永恒的真谛。是不是世间万物亦如此?我们来到这个世界上,一无所有,只有在学会付出之后,才能够得到回报;予人方便之后,才能够予己方便。只有以一颗真诚的心为他人奉献的时候,我

钢琴基础教程,最经典钢琴入门教程

第十八课本教程由牛津爱乐钢琴节奉献练习要求:以下的每个学习环节,请做到清楚要求,掌握应学的知识和技巧再进入下一环节的学习,不可走马观花。每一首乐曲的练习都要采取很慢的速度进行,只有在慢速的练习中才能更好地注意手型、避免错误。翻到课本第三十八页,乐曲《牛仔之歌》是一首复习前面所学知识的曲子,首先请注意乐曲的调号,要记住,这首乐曲中的si(B)要降低半音。在开始练习之前我们要有这样的习惯,先细心地把乐曲看几遍。看看曲子中有什么特点。这样练习起来可以避免错误。记住这首乐曲要分手分段练习,乐曲分成两段,第一段从第一小节(只有一拍)到第十七小节。其余的为第二段。具体就是先分手练习第一段,分手练好了两手合起练好第一段,然后再进入第二段的分手练习?6?7?6?7 第五、九、十三、十七小节中两手都是休止符的拍子要注意休止正确的时值,有的学生会漏掉这些休止的拍子。第八、九小节中的si(B)有还原记号,不用降,其它的si(B)都要降。乐曲中没有连线的音用断奏,有连线的音用连奏,有点的音用跳音弹奏,这些都要清楚表现。弹出自信、活泼的感情出来。请按照示范乐曲的速度弹奏:《牛仔之歌》:《牛仔之翻到课本第三十九页,我们来学习《小雷格泰姆》,这是一首切分音节奏的乐曲。注意弹出切分音节奏“弱强-弱”的特点出来。乐曲中左手的跳音要弹得轻巧,注意休止

符的时值要准确。请按照示范乐曲的速度弹奏:《小雷格泰姆》翻到课本第四十页《假日之歌》,这是我们接触的第一首三个升记号的乐曲。升的是f(fa)、c(do)、g(sol),这是a 大调的调号,要记住要升的三个音,避免在弹奏时忘记了。练习乐曲之前先练习一下“预备练习”和a 大调的音阶,通过预备练习我们可以熟悉乐曲的左手和弦音型,通过音阶的练习我们可以熟悉右手的手位。注意每一乐句的大连线,要求我们用连奏来弹奏,但是连线与连线之间就要用断奏了,手要拿起来,就象说话的呼吸一样。注意乐曲的力度记号的表现。mf、mp、渐强、渐弱要表达好,让别人听到你的弹奏就能感受到力度的变化。十三小节的延长记号要注意,这里弹成三拍就好了。左手虽然没有要求连奏,但这里还是要用连奏比较合理,也比较容易。翻到课本第四十一页的《走,走,走》,乐曲中出现了一种新的拍号:六八拍子。什么意思呢?首先我们要知道拍号是由上下两个数字组成的,上面的数字的意思就是每小节有多少拍,下面的数字就是以多少分音符为一拍。因为我们学过的拍号有二四拍子、三四拍子、四四拍子,下面的数字都是四,就是说都是以四分音符为一拍的,而我们这节课学的是六八拍子,下面的数字是八,所以就是以八分音符为一拍,那么我们知道八分音符的时值是四分音符的一半,所以在六八拍子中音符的拍数就要算多一倍了。看看课本里

相关主题
文本预览
相关文档 最新文档