加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2023-01-17 08:23:50)
标签:

c

fmslogo

mswlogo

pclogo

林老师

分类: WinXP~7~8~10运行Logo语言
动态游戏:打地鼠(2. PCLogo源程序)
动态游戏:打地鼠(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的随机数
       PCLogoWAIT 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编程大多都太乏味,自然影响学习者的兴趣。多编写一些这样有趣的程序,对于推动普及编程是大有好处的。

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

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

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

MSWLogo-FMSLogo编程画的动画
动态游戏:打地鼠(2.PCLogo源程序)


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有