Logo程序设计(授课讲稿)吴剑辉第十讲多龟操作到现在为止,我们一直是只使用一只海龟作图。实际上,Logo系统预定义了16只海龟,依次编号为0~15。Logo启动时,直接听从指挥的海龟只是0号,我们把它称为当前活动的海龟。其他海龟(1~15号)不能直接接受命令,叫做非活动的海龟。如何使多只海龟参与操作?一种是指名方法,使非活动的海龟也能执行命令;另一种是激活方法,就是将非活动的海龟变成当前活动的海龟。一、指名海龟执行命令二、激活海龟参与活动三、多龟操作应用选编一、指名海龟执行命令指名执行是通过ASK命令指使非活动海龟执行操作。指名海龟执行命令(ASK)【格式1】:ASK龟号[命令组]【格式2】:ASK[龟号列表][命令组]【功能】:使指定代号的海龟执行“命令组”中的命令。123例题1:指名执行。(如图1所示)TODHGZT1DRAWASK1[STPUSETX-200PDREPEAT3[FD80RT120]]ASK2[STPUSETX0PDREPEAT4[FD80RT90]]ASK3[STPUSETX200PDREPEAT5[FD80RT144]]END图1-?DHGZT1↙例题2:指名执行。(如图2所示)TODHGZT2ASK5[STSETPC1PUSETXY[-3030]]ASK10[STSETPC2PUSETXY[-30-30]]ASK15[STSETPC13PUSETXY[30-30]]ASK[51015][PDSXJX4040]SETPC12PUSETXY[3030]PDSXJX4040END051015TOSXJX:X:Y(STAMPRECT:X:YTRUE)END【指导说明】:海龟代号可以是0~15。在指定多只海龟时,海龟代号要用方括号括起来;如果只有一只海龟代号,就可不用;没有指定海龟代号的话,在过程中或执行时视为0号海龟。命令组中可以是一条命令,或一组命令,还可以调用其他过程。图2-?DHGZT2↙笔色为蓝的5号海龟定位笔色为绿的10号海龟定位笔色为浅紫的15号海龟定位5、10、15号海龟画正方形笔色为浅红的0号海龟画正方形二、激活海龟参与活动一只或多只海龟一旦被激活,即为当前活动的海龟。这样其后的命令都是针对激活的还龟而言,直到再次激活其他海龟为止。命令格式说明激活TELL[海龟代号]激活指定的海龟成为活动的海龟。激活TELLALL代号1代号2激活这两个代号之间所有的海龟。查询WHO查询正在活动的海龟的代号。WHO经常作为过程中的参数使用,使各只海龟能拥有自己的颜色、位置。分别执行EACH[命令组]和WHO命令合在一起使用。可以使已经被激活的海龟分别执行命令组例题3:激活执行。(如图3所示)TOJHHG1DRAWHTASK1[SETPC2PUSETX-50]ASK3[SETPC14PUSETX0]ASK5[SETPC12PUSETX50]TELL[135]PD(STAMPRECT4080TRUE)END图3-?JHHG1↙例题4:激活执行。(如图4所示)TOJHHG2DRAWASK8[SETPC7]ASK9[SETPC8RT45]ASK10[SETPC9RT90]ASK11[SETPC10RT135]ASK12[SETPC11RT180]ASK13[SETPC12RT225]ASK14[SETPC13RT270]ASK15[SETPC14RT315]TELLALL815SETW2FD80REPEAT4[FD40RT90]END图4-?JHHG2↙例题5:测试激活的海龟。?DRAW?WHO结果:0?ASK1[STFD100]?WHO结果:0?TELL[246]?WHO结果:[246]?【指导说明】:⑴、执行DRAW命令,系统自动激活0号海龟,即0号海龟是当前活动海龟。⑵、ASK命令只是使非活动的海龟执行命令,它不能改变海龟的活动属性。⑶、只有执行激活海龟命令TELL,才使一只或几只海龟成为当前活动的海龟。例题6:海龟分别执行画图(与例题4相同)。TOFBZTDRAWTELLALL815EACH[SETPCWHO-1RTWHO*45]SETW2FD80REPEAT4[FD40RT90]END图4-?FBZT↙例题7:用多海龟操作命令画定点旋转的风车图(如图5)。TOFYVDAREPEAT2[FD60RT90FD20RT90]WAIT5CLEANRT4FYVDAEND图5-2?FYVD↙TOFYVDDRAWHTTELLALL03EACH[RTWHO*90]FYVDAEND⑴、编写风车一叶旋转过程:(如图5-1)。⑵、用0~3号海龟组成四片风车叶,使之转动(如图5-2)。图5-1?FYVDA↙【指导说明】:使用EACH命令能把有规律的多海龟操作表达得更紧凑、简洁。三、多龟操作应用选编用多海龟作图的方式,我们一定能画出其他更有趣的图形来。使得我们编写Logo程序的思路更开拓、方法更灵巧。1、画出如图6所示的图形。图6:?DGZT140↙TODGZT1:ADRAWHTTELLALL05EACH[PUSETH(WHO*60+30)BK:APD]LT60FD:A*1.5REPEAT3[FD:ART120]END【试一试,画一画】:用多龟作图方式画出下列图形。?DGZTA50↙?DGZTB50↙?DGZTC30↙?DGZTD80↙?DGZTE↙2、用多海龟同时画出五个五角星,各星颜色随机变化(如图7所示)。TOWJX5:LDRAWHTTELLALL15EACH[PUSETXWHO*100-300SETH18PDSETPCRANDOM14]SETW2REPEAT5[FD:LRT144FD:LLT72]END图7:?WJX530↙3、用多海龟同时画出不同大小的五角星(如图8)。TONWJX:NDRAWHTTELLALL1:NEACH[PUSETXWHO*80-300PDWJXWHO*3+8]ENDTOWJX:LSETPCRANDOM14SETW2RT18REPEAT5[FD:LRT144FD:LLT72]END图8:?NWJX5↙4、绕一圆圈外转动(如图9所示)。TORYV2:NIF:N14MAKEN8PUFD75PD(STAMPOVAL2525TRUE)PUBK75PDRT360/9WAIT10RYV2:NENDTORYVDRAWHTSETW2SETPC2STAMPOVAL5050SETPC12STAMPOVAL4747SETPC2STAMPOVAL4444RYV1ENDTORYV1TELLALL614EACH[RTWHO*(360/9)SETPC1*WHO]RYV28END图9:?RYV↙5、用多龟操作分别实现下面各题的要求,请设计程序。⑴、半径为15的蓝、红、绿、黄四个小球在500步之间左右同时反复跑动。(图10-1)⑵、四小球边跑动边放大,半径由5步依次增0.5直到30步为止后,原地缩小为5步,再继续往回跑动。TOLHLHADRAWHTASK1[SETPC1]ASK2[SETPC12]ASK3[SETPC2]ASK4[SETPC14]TELLALL14EACH[PUSETXYSE-250\(150-WHO*60)PD]LHAA5ENDTOLHAA:NIFXCOR250MAKEN-5IFXCOR-250MAKEN5PD(STAMPOVAL1515TRUE)WAIT20CLEANPUSETXXCOR+:NLT90LHAA:NEND当执行LHLHA↙实现第⑴题的要求?LHLHA↙TOLHB:RIF:R5STOPPD(STAMPOVAL:R:RTRUE)WAIT20CLEANLHB:R-0.5ENDTOLHLHBDRAWHTASK1[SETPC1]ASK2[SETPC12]ASK3[SETPC2]ASK4[SETPC14]TELLALL14EACH[PUSETXYSE-130\(180-WHO*70)PD]LHA55ENDTOLHA:R:NIF:R30LHB:RMAKER5\MAKEN-5IFXCOR=-130MAKEN5PD(STAMPOVAL:R:RTRUE)WAIT20CLEANPUSETXXCOR+:NLHA:R+0.5:NEND当执行LHLHB↙实现第⑵题的要求跑动?LHLHB↙图11-1?VF↙6、使长方形或三角形分别绕中心点A和B同时旋转(如图11所示)。⑴、使长方形绕中心点A旋转(如图11-1)。ATOVFDRAWHTSETPC9PXSBX1207090WAIT30ZU90ENDTOPXSBX:B1:B2:JREPEAT2[FD:B1RT:JFD:B2\RT180-:J]ENDTOZU:NMAKEN:N+1PXSBX12070:NWAIT1CLEANZU:N+1END图11-2?VS↙B⑵、使三角形绕中心点B旋转(如图11-2)。TOVSDRAWHTSETPC12SJ1207090WAIT30ZS90ENDTOSJ:B1:B2:NFD:B1MAKEXXCORMAKEYYCORBK:B1RT:NFD:B2SETXYSE:X:YPULT:NBK:B1PDENDTOZS:NMAKEN:N+1SJ12070:NWAIT1CLEANZS:N+1END图11-3?TTV↙⑶、使长方形或三角形分别绕中心点A和B同时旋转(如图11-3)。ABTOTTVDRAWHTTTV2WAIT100TTV190ENDTOTTV1:NASK1[ZUV:N]ASK2[ZSV:N]REPEAT3000[]CLEANTTV1:N+1ENDTOTTV2ASK1[PUSETXY[-1500]PDSETPC9\PXSBX1207090]ASK2[PUSETXY[1500]PDSETPC12\ZSV90]END7、大齿轮带动若干个小齿轮同时转动(如图12所示)。主过程:TODXLPA:NMAKEM0-:NASK0[SETPC2DLP:N]XLP4:MREPEAT30000[]CLEANDXLPA:N+10END执行过程:TODXLPDRAWHTDXLPA0END图12?DXLP↙空心椭圆:TOKXTY:X:YSTAMPOVAL:X:YEND大齿轮过程:TODLP:NSETW2KXTY6060SETW1KXTY5050REPEAT6[FD48BK48RT360/6]REPEAT12[PUFD57PDSXTY44PUBK57RT360/12PD]SETH:NEND小齿轮过程:TOXLP:NSETW2KXTY3030SETW1KXTY2525REPEAT6[FD24BK24RT360/6]REPEAT12[PUFD27PDSXTY33\PUBK27RT360/12]SETH:NEND四个小齿轮过程:TOXLP4:NASK1[PUSETXY[900]PD]ASK2[PUSETXY[0-90]PD]ASK3[PUSETXY[-900]PD]ASK4[PUSETXY[090]PD]TELLALL14SETPC12XLP:NEND图12-1?DLP0↙图12-2?XLP0↙图12-3?XLP40↙想一想,做一做(要求用多龟作图)由四片直角梯形组成的旋转风车?VJFC↙彩色圆圈圈?BFY↙动态光芒四射?XXUS↙雪花图案?DGHH↙扇子展示图(颜色随机)?SHAZI5↙闪闪红星?UJWX↙蓝红海龟在800步的跑道上赛跑?LVGP↙N只龟画方阵圆?GHLQ1↙?GHLQ3↙?GHLQ7↙5组5朵梅花组成的图形?MEIHUA↙