动态游戏:打地鼠(2. PCLogo源程序)

这是一个真正能够在计算机上“玩”起来的游戏。今天提供的是PCLogo的源程序。PCLogo用到现在已经快40年了,说实在的其中的编程理念一点都不落后。这个游戏要求建立5个100×100的方框,随机地在其中某个方框中出现一个“地鼠”,形状是半径30的圆圈,那个标志性的小海龟显示在圆圈的正中。这里面有几个编程技巧需要说明一下:
一、这个地鼠要显示出来,再转换到其他方框时还要擦除。使用这样的方法是最简单的:建立YUAN
:N :K过程。其中:N是处理在那一个方框的位置,这个位置用如下算式计算这个圆圈的中心位置。
HT PU SETY 50 SETX :N*100-350
SETH 0 FD 30 RT 90 PD
这个 :N
用随机数产生,地鼠就能随机地出现在某个方框中了。
而 :K 系数是最为巧妙的。 :K=0 时 SETPC
:K 画黑色的圆圈,:K=15时 SETPC
:K画白色的圆圈,实际上是擦除原来画的圆圈。这样的方式消除先前画的圆圈非常干尽,有不要重新编写“擦除”的程序,是非常高效的编程方式。
二、PCLogo系统中要使用鼠标点击操作应自己编写一个无限循环,无时不刻地检测鼠标是否点击了左键:
TO SHUBIAO
;鼠标循环程序
LABEL "L ;无限循环返回点
IF
BUTTON? 1[MAKE "WZ MOUSE PAND WAIT
30 GO "OUT_]
;点击左键进行判断并退出鼠标循环
IF NOT
BUTTON? 2[GO "L] ;按鼠标右键退出鼠标监测
LABEL "OUT_
;退出鼠标监测标号
END
三、而鼠标左键到底是否点击在这5个方框中的某一个框,用下面的子程序来进行计算判断:
TO PAND
;鼠标命令调用的判断点击在哪一个格子的子程序
MAKE "X FIRST :WZ MAKE "Y LAST
:WZ
IF (AND :X>-300 :X<300
:Y>0 :Y<100)[ MAKE "NN \
INT((:X+400)/100) IF :NN=:N[MAKE "F
:F+5 FEN :F] (PR :NN :N)]
END
PCLogo的RANDOM
6产生1~6之间的随机数。但是在MSWLogo-FMSLogo中产生的是0~5的随机数
PCLogo的WAIT
100=1秒。
整个的源程序
如下,复制黏贴到LOGO编辑器里面就能使用。
TO GAMEP ;打地鼠游戏主程序
PCLogo编程
CS SETW 2
;画图初始化
KUANG
;画框
MAKE "F 0
;开始分数为零0
FEN :F
;显示分数
FOR "I 1 20[MAKE "N RANDOM 6 YUAN
:N 0 PR :N SHUBIAO YUAN :N 15]
;产生20个地鼠
HT
END
TO FEN :F
;显示分数子程序
PU SETX -50 SETY
-30 ;定位到显示分数的位置
SETPC
15 SETW 40 SETH 90 PD FD 200 BK 200 ;用粗白线擦除旧的分数
SETW 2 SETPC 0
;颜色为黑
MAKE "FS WORD "得分: :F
;连接分数显示项
TT :FS
;显示分数
END
TO
SHUBIAO ;鼠标循环程序
LABEL "L
;无限循环返回点
IF BUTTON? 1[MAKE
"WZ MOUSE PAND WAIT 30 GO "OUT_]
;点击左键进行判断并退出鼠标循环
IF NOT BUTTON?
2[GO "L] ;按鼠标右键退出鼠标监测
LABEL "OUT_
;退出鼠标监测标号
END
TO
KUANG ;画框子程序
SETW 2 SETPC 0 PU SETX -300 SETY 0
PD
REPEAT 6[REPEAT 7[FD 100 RT 90]RT
90]
END
TO PAND
;鼠标命令调用的判断点击在哪一个格子的子程序
MAKE "X FIRST :WZ MAKE "Y LAST
:WZ
IF (AND :X>-300 :X<300
:Y>0 :Y<100)[ MAKE "NN INT((:X+400)/100) \
IF :NN=:N[MAKE "F :F+5 FEN :F] (PR :NN
:N)]
END
TO YUAN :N :K
;画及擦除圆圈的子程序
:K=0画黑色 :K=15画白色擦除
SETPC :K
HT PU SETY 50 SETX :N*100-350 SETH
0 FD 30 RT 90 PD ;找到圆中心
REPEAT 36[RT 5 FD 30*PI/18 RT
5] ;画圆圈
PU LT 90 BK 30 ST
;根据题目示范图形的要求显示海龟
END
现在课本中的LOGO编程大多都太乏味,自然影响学习者的兴趣。多编写一些这样有趣的程序,对于推动普及编程是大有好处的。
MSWLogo-FMSLogo编程画的动画
加载中,请稍候......