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

九州春光美四海气象新取火柴游戏PCLogo解

(2023-01-24 09:36:48)
标签:

c

林老师

pclogo

fmslogo

mswlogo

分类: WinXP~7~8~10运行Logo语言
九州春光美 四海气象新 取火柴游戏PCLogo解
九州春光美四海气象新取火柴游戏PCLogo解
      这个用PCLogo语言编写的人机对弈取火柴游戏最早是十多年前编写的。说实在的,使用简单的LOGO语言编程,能够写出自成系统的完整的人机对弈游戏还是比较少见的。这个源程序只要用鼠标复制一下,粘贴到PCLogo系统的编辑器里面,保存好,再调用出来就能运行了。100根火柴,人机每次允许取1-10根,人先手。即使是规定人先取,要是不能领会取胜的要旨,或是对弈中途因忽略而取错了根数,多半人是敌不过计算机而败北下来。模拟人工智能的计算机算法由此可见其强大。取胜的算法请自己查看前一篇博客,内中有准确详细的介绍。在PCLogo语言中有GO-LABEL这样的无条件转向命令,这样的命令在MSWLogo-FMSLogo中是没有的。GO-LABEL命令用得好的话,也可以编写出非常巧妙的程序来。以至于当前最为前卫的C语言、C++语言中还都保留着GOTO命令。下面是PCLogo的源程序:
to qhc ;取火柴游戏
   draw ht
   make "q 0 make "qq 0 make "n 100 hc 1 :n 2 12
   setpc 12 setfont "黑体 30 1
   pu setxy se -110 200 pd tt "取火柴游戏
   setpc 9 setfont "楷体 20 1 pu setxy se -270 150 pd
   tt[现在火柴的根数\:]
   pu setxy se -235 -194 pd ; setfont "仿宋 2 setpc 2
   tt[每次只能取1~10根火柴。先取完者为胜。]
 label "by_   ;博弈计算入口
   sx1 pu setxy se -70 150 pd setpc 9 tt :n
   if :n>0 then[pu setpc 12 setx -15 pd \
    tt[请输入取几根并按回车键]]
   (pr "现在有 :n "根火柴,请输入取几根火柴并按回车键!) 
   make "qq rq make "w count :qq
   make "q (ascii(last :qq))-48
   if :w>1 [make "q :q+((ascii(first :qq))-48)*10]
   if (or :q<1 :q>10) then[\
    pr[你输入的是游戏规则所不允许的根数!] go "by_]
   (pr "你取走火柴的根数是 :q)
   sx2 pu setxy se -270 110 pd setpc 4
   tt[你取走火柴的根数是\:]
   pu setx -18 pd tt :q
   make "n :n-:q
   if :n=0 then[sx1 pu setxy se -30 150 pd \
    setpc 12 tt[火柴已被取完!你获胜!]\
    pu setx -68 setpc 9 pd tt :n hc 1 100 7 8 \
    (pr "火柴已被取光!你获胜!游戏结束。) go "end_]
   if (0=remainder :n 11) then[\
    make "j random 10]else[make "j :n-11*(int(:n/11))]
   (pr "计算机取走火柴的根数是 :j)
   pu setx 23 pd setpc 13 tt[计算机取走的根数\:]
   pu setx 253 pd tt :j
   make "n :n-:j
   hc :n+1 100 7 8
   if :n=0 then[sx1 pu setxy se -50 150 pd \
    setpc 12 tt[火柴已被取光!计算机获胜!]\
    pu setx -68 setpc 9 pd tt :n hc 1 100 7 8 \
    (pr "火柴已被取光!计算机获胜!游戏结束。) go "end_]
   if :n>0 go "by_
 label "end_  ;退出博弈出口
end
to hc :a :b :y1 :y2  ;画所有火柴的子程序
  for "i :a-1 :b-1[pu setxy se (remainder :i 25)*19-230 \
   80-(int(:i/25)+1)*64 pd setpc :y1 setw 6 fd 47 \
    setw 10 setpc :y2 dot se xcor ycor]
end
to sx1 ;对第一行提示的刷新
  setw 30 setpc 15 pu setxy se -58 138 pd setx 270
end
to sx2 ;对第二行提示的刷新
  setw 30 setpc 15 pu setxy se -270 95 pd setx 280
end

九州春光美四海气象新取火柴游戏PCLogo解

九州春光美四海气象新取火柴游戏PCLogo解

九州春光美四海气象新取火柴游戏PCLogo解


九州春光美四海气象新取火柴游戏PCLogo解




0

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

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

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

新浪公司 版权所有