210 likes | 345 Views
Logo 程序设计. ( 授课讲稿 ) 吴剑辉. 第十讲 多龟操作. 到现在为止,我们一直是只使用一只海龟作图。实际上, Logo 系统预定义了 16 只海龟,依次编号为 0~15 。 Logo 启动时 , 直接听从指挥的海龟只是 0 号,我们把它称为当前活动的海龟。其他海龟( 1~15 号)不能直接接受命令,叫做非活动的海龟。 如何使多只海龟参与操作?一种是指名方法,使非活动的海龟也能执行命令;另一种是激活方法,就是将非活动的海龟变成当前活动的海龟。. 一、指名海龟执行命令. 二、激活海龟参与活动. 三、多龟操作应用选编. 一、指名海龟执行命令.
E N D
Logo程序设计 (授课讲稿) 吴剑辉
第十讲 多龟操作 到现在为止,我们一直是只使用一只海龟作图。实际上,Logo系统预定义了16只海龟,依次编号为0~15。Logo启动时,直接听从指挥的海龟只是0号,我们把它称为当前活动的海龟。其他海龟(1~15号)不能直接接受命令,叫做非活动的海龟。 如何使多只海龟参与操作?一种是指名方法,使非活动的海龟也能执行命令;另一种是激活方法,就是将非活动的海龟变成当前活动的海龟。 一、指名海龟执行命令 二、激活海龟参与活动 三、多龟操作应用选编
一、指名海龟执行命令 1 3 2 指名执行是通过ASK命令指使非活动海龟执行操作。 指名海龟执行命令(ASK) 【格式1】:ASK 龟号 [命令组] 【格式2】:ASK [龟号列表] [命令组] 【功 能】:使指定代号的海龟执行“命令组”中的命令。 例题1:指名执行。 (如图1所示) TO DHGZT1 DRAW ASK 1[ST PU SETX -200 PD REPEAT 3[FD 80 RT 120]] ASK 2[ST PU SETX 0 PD REPEAT 4[FD 80 RT 90]] ASK 3[ST PU SETX 200 PD REPEAT 5[FD 80 RT 144]] END 图1-?DHGZT1↙
5 0 10 15 例题2:指名执行。(如图2所示) TO DHGZT2 ASK 5[ST SETPC 1 PU SETXY[-30 30]] ASK 10[ST SETPC 2 PU SETXY[-30 -30]] ASK 15[ST SETPC 13 PU SETXY[30 -30]] ASK [5 10 15][PD SXJX 40 40] SETPC 12 PU SETXY[30 30] PD SXJX 40 40 END 笔色为蓝的5号海龟定位 笔色为绿的10号海龟定位 笔色为浅紫的15号海龟定位 5、10 、15 号海龟画正方形 笔色为浅红的0号海龟画正方形 TO SXJX :X :Y (STAMPRECT :X :Y "TRUE) END 图2-?DHGZT2↙ 【指导说明】: 海龟代号可以是0~15。在指定多只海龟时,海龟代号要用方括号括起来;如果只有一只海龟代号,就可不用;没有指定海龟代号的话,在过程中或执行时视为 0 号海龟。命令组中可以是一条命令,或一组命令,还可以调用其他过程。
二、激活海龟参与活动 一只或多只海龟一旦被激活,即为当前活动的海龟。这样其后的命令都是针对激活的还龟而言,直到再次激活其他海龟为止。
例题3:激活执行。(如图3所示) TO JHHG1 DRAW HT ASK 1[SETPC 2 PU SETX -50] ASK 3[SETPC 14 PU SETX 0] ASK 5[SETPC 12 PU SETX 50] TELL [1 3 5] PD (STAMPRECT 40 80 "TRUE) END 图3-?JHHG1↙ 例题4:激活执行。(如图4所示) TO JHHG2 DRAW ASK 8[SETPC 7] ASK 9[SETPC 8 RT 45] ASK 10[SETPC 9 RT 90] ASK 11[SETPC 10 RT 135] ASK 12[SETPC 11 RT 180] ASK 13[SETPC 12 RT 225] ASK 14[SETPC 13 RT 270] ASK 15[SETPC 14 RT 315] TELLALL 8 15 SETW 2 FD 80 REPEAT 4[FD 40 RT 90] END 图4-?JHHG2↙
例题5:测试激活的海龟。 ? DRAW ? WHO 结果: 0 ? ASK 1[ST FD 100] ? WHO 结果: 0 ? TELL [2 4 6] ? WHO 结果: [2 4 6] ? 【指导说明】: ⑴、执行DRAW命令,系统自动激活0号海龟,即0号海龟是当前活动海龟。 ⑵、ASK命令只是使非活动的海龟执行命令,它不能改变海龟的活动属性。 ⑶、只有执行激活海龟命令TELL,才使一只或几只海龟成为当前活动的海龟。 例题6:海龟分别执行画图(与例题4相同)。 TO FBZT DRAW TELLALL 8 15 EACH [SETPC WHO-1 RT WHO*45] SETW 2 FD 80 REPEAT 4[FD 40 RT 90] END 图4-?FBZT↙
例题7:用多海龟操作命令画定点旋转的风车图(如图5)。例题7:用多海龟操作命令画定点旋转的风车图(如图5)。 ⑴、编写风车一叶旋转过程:(如图5-1)。 TO FYVDA REPEAT 2[FD 60 RT 90 FD 20 RT 90] WAIT 5 CLEAN RT 4 FYVDA END 图5-1 ?FYVDA↙ ⑵、用0~3号海龟组成四片风车叶,使之转动(如图5-2)。 TO FYVD DRAW HT TELLALL 0 3 EACH [RT WHO*90] FYVDA END 【指导说明】: 使用EACH命令能把有规律的多海龟操作表达得更紧凑、简洁。 图5-2 ?FYVD↙
三、多龟操作应用选编 用多海龟作图的方式,我们一定能画出其他更有趣的图形来。使得我们编写Logo 程序的思路更开拓、方法更灵巧。 1、画出如图6所示的图形。 TO DGZT1 :A DRAW HT TELLALL 0 5 EACH[PU SETH (WHO*60+30) BK :A PD] LT 60 FD :A*1.5 REPEAT 3[FD :A RT 120] END 图6:?DGZT1 40↙ 【试一试,画一画】:用多龟作图方式画出下列图形。 ?DGZTA 50↙ ?DGZTC 30↙ ?DGZTB 50↙ ?DGZTD 80↙ ?DGZTE ↙
2、用多海龟同时画出五个五角星,各星颜色随机变化(如图7所示)。 TO WJX5 :L DRAW HT TELLALL 1 5 EACH [PU SETX WHO*100-300 SETH 18 PD SETPC RANDOM 14] SETW 2 REPEAT 5[FD :L RT 144 FD :L LT 72] END 图7:?WJX5 30↙ 3、用多海龟同时画出不同大小的五角星(如图8)。 TO NWJX :N DRAW HT TELLALL 1 :N EACH[PU SETX WHO*80-300 PD WJX WHO*3+8] END TO WJX :L SETPC RANDOM 14 SETW 2 RT 18 REPEAT 5[FD :L RT 144 FD :L LT 72] END 图8:?NWJX 5↙
4、绕一圆圈外转动(如图9所示)。 TO RYV DRAW HT SETW 2 SETPC 2 STAMPOVAL 50 50 SETPC 12 STAMPOVAL 47 47 SETPC 2 STAMPOVAL 44 44 RYV1 END TO RYV1 TELLALL 6 14 EACH [RT WHO*(360/9) SETPC 1*WHO] RYV2 8 END TO RYV2 :N IF :N>14 MAKE "N 8 PU FD 75 PD (STAMPOVAL 25 25 "TRUE) PU BK 75 PD RT 360/9 WAIT 10 RYV2 :N END 图9:?RYV↙
5、用多龟操作分别实现下面各题的要求,请设计程序 。 ⑴、半径为15的蓝、红、绿、黄 四个小球在500步之间左右同时反复跑动。(图10-1) ⑵、四小球边跑动边放大,半径由5步依次增0.5直到30步为止后,原地缩小为5步,再继续往回跑动。 TO LHLHA DRAW HT ASK 1[SETPC 1] ASK 2[SETPC 12] ASK 3[SETPC 2] ASK 4[SETPC 14] TELLALL 1 4 EACH[PU SETXY SE -250 \ (150-WHO*60) PD] LHAA 5 END TO LHAA :N IF XCOR>250 MAKE "N -5 IF XCOR<-250 MAKE "N 5 PD (STAMPOVAL 15 15 "TRUE) WAIT 20 CLEAN PU SETX XCOR+:N LT 90 LHAA :N END ? LHLHA↙ 当执行 LHLHA↙ 实现第⑴题的要求
跑动 ? LHLHB↙ TO LHA :R :N IF :R>30 LHB :R MAKE "R 5 \ MAKE "N -5 IF XCOR=-130 MAKE "N 5 PD (STAMPOVAL :R :R "TRUE) WAIT 20 CLEAN PU SETX XCOR+:N LHA :R+0.5 :N END TO LHLHB DRAW HT ASK 1[SETPC 1] ASK 2[SETPC 12] ASK 3[SETPC 2] ASK 4[SETPC 14] TELLALL 1 4 EACH[PU SETXY SE -130 \ (180-WHO*70) PD] LHA 5 5 END TO LHB :R IF :R<5 STOP PD (STAMPOVAL :R :R "TRUE) WAIT 20 CLEAN LHB :R-0.5 END 当执行 LHLHB↙ 实现第⑵题的要求
A 6、使长方形或三角形分别绕中心点A和B同时旋转(如图11所示)。 ⑴、使长方形绕中心点A旋转(如图11-1)。 TO VF DRAW HT SETPC 9 PXSBX 120 70 90 WAIT 30 ZU 90 END 图11-1 ? VF↙ TO ZU :N MAKE "N :N+1 PXSBX 120 70 :N WAIT 1 CLEAN ZU :N+1 END TO PXSBX :B1 :B2 :J REPEAT 2[FD :B1 RT :J FD :B2 \ RT 180-:J] END
B ⑵、使三角形绕中心点B旋转(如图11-2)。 TO VS DRAW HT SETPC 12 SJ 120 70 90 WAIT 30 ZS 90 END 图11-2 ? VS↙ TO ZS :N MAKE "N :N+1 SJ 120 70 :N WAIT 1 CLEAN ZS :N+1 END TO SJ :B1 :B2 :N FD :B1 MAKE "X XCOR MAKE "Y YCOR BK :B1 RT :N FD :B2 SETXY SE :X :Y PU LT :N BK :B1 PD END
B A ⑶、使长方形或三角形分别绕中心点A和B同时旋转(如图11-3)。 TO TTV DRAW HT TTV2 WAIT 100 TTV1 90 END 图11-3 ? TTV↙ TO TTV1 :N ASK 1 [ZUV :N] ASK 2 [ZSV :N] REPEAT 3000[ ] CLEAN TTV1 :N+1 END TO TTV2 ASK 1 [PU SETXY[-150 0]PD SETPC 9 \ PXSBX 120 70 90] ASK 2 [PU SETXY[150 0]PD SETPC 12 \ ZSV 90] END
7、大齿轮带动若干个小齿轮同时转动(如图12所示)。 执行过程: TO DXLP DRAW HT DXLPA 0 END 主过程: TO DXLPA :N MAKE "M 0-:N ASK 0[SETPC 2 DLP :N] XLP4 :M REPEAT 30000[ ] CLEAN DXLPA :N+10 END 图12 ? DXLP↙ 空心椭圆: TO KXTY :X :Y STAMPOVAL :X :Y END
大齿轮过程: TO DLP :N SETW 2 KXTY 60 60 SETW 1 KXTY 50 50 REPEAT 6[FD 48 BK 48 RT 360/6] REPEAT 12[PU FD 57 PD SXTY 4 4 PU BK 57 RT 360/12 PD] SETH :N END 图12-1 ? DLP 0↙ 图12-3 ? XLP4 0↙ 四个小齿轮过程: TO XLP4 :N ASK 1[PU SETXY[90 0]PD] ASK 2[PU SETXY[0 -90]PD] ASK 3[PU SETXY[-90 0]PD] ASK 4[PU SETXY[0 90]PD] TELLALL 1 4 SETPC 12 XLP :N END 小齿轮过程: TO XLP :N SETW 2 KXTY 30 30 SETW 1 KXTY 25 25 REPEAT 6[FD 24 BK 24 RT 360/6] REPEAT 12[PU FD 27 PD SXTY 3 3 \ PU BK 27 RT 360/12] SETH :N END 图12-2 ? XLP 0↙
想一想,做一做 (要求用多龟作图) 由四片直角梯形组成的旋转风车 彩色圆圈圈 动态光芒四射 雪花图案 ? XXUS↙ ? BFY↙ ? VJFC↙ ? DGHH↙ 扇子展示图(颜色随机) 蓝红海龟在800步的跑道上赛跑 ? SHAZI 5↙ ? LVGP↙ 5组5朵梅花组成的图形 ? GHLQ 1↙ ? GHLQ 3↙ ? GHLQ 7↙ 闪闪红星 ? MEIHUA↙ N只龟画方阵圆 ? UJWX↙