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

玩转扑克牌游戏B

(2022-07-27 09:40:58)
标签:

林老师

pclogo

mswlogo

logo博客

fmslogo

分类: WinXP~7~8~10运行Logo语言
玩转扑克牌游戏 B
玩转扑克牌游戏B
      芜湖试卷的玩牌编程“一扎纸牌N张,从上到下编号为1~N,现将第一张丢掉,第二张放在纸牌的最后,现将第三张丢掉,将第四张放在最后,如此下去,直到手中只剩下一张牌,编程求这张牌原来是几号。”事实上与扑克牌没有半点关系,这只不过是对 1~N 号数字按上述规则取舍、换位的过程。编写成 MSWLogo-FMSLogo 程序如下:

TO C :N
  MAKE "L []  ;建立一个储存顺序牌号的空表
  FOR[I 1 :N][MAKE "L SE :L :I]  ;建立1~N顺序数字表
  C1 :L  ;用递归模拟玩牌过程
END

TO C1 :L   ;模拟玩牌的递归
  IF (COUNT :L)=1 [PR :L STOP] ;在只剩下一张牌时输出表中的牌号
  MAKE "L BF :L             ;规则:将第一张牌丢掉
  MAKE "L SE BF :L FIRST :L ;规则:将面上的牌放到最后
  C1 :L  ;不断循环以上过程
END

      这种“玩牌”游戏输出的结果有些令人出乎意料。例如 C 8输出的结果就是8 , 说明最后留下来的是第 8 张牌。C 36输出的也是 8 。扑克牌只有54张,但是这个程序对有多少张牌是没有限制的。C 3000 是对3000张牌进行洗牌,剩下的是第1904张。等等……大家可以自己随意玩一玩试一试。

PCLogo的源程序:
TO C :N
  MAKE "L []  ;建立一个储存顺序牌号的空表
  FOR "I 1 :N[MAKE "L SE :L :I]  ;建立1~N顺序数字表
  C1 :L  ;用递归模拟玩牌过程
END

TO C1 :L   ;模拟玩牌的递归
  IF (COUNT :L)=1 [PR :L STOP] ;在只剩下一张牌时输出表中的牌号
  MAKE "L BF :L             ;规则:将第一张牌丢掉
  MAKE "L SE BF :L FIRST :L ;规则:将面上的牌放到最后
  C1 :L  ;不断循环以上过程
END

      PCLogo程序运行起来的结果是一样的。但是PCLogo可能会是完不动 C 3000的,因为需要的空间太大。

待续……还有后续两篇博客……

LOGO编程画出来的动画:
玩转扑克牌游戏B
玩转扑克牌游戏B

玩转扑克牌游戏B

玩转扑克牌游戏B









                                 

0

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

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

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

新浪公司 版权所有