玩转扑克牌游戏 D

芜湖试卷的玩牌编程“一扎纸牌N张,从上到下编号为1~N,现将第一张丢掉,第二张放在纸牌的最后,现将第三张丢掉,将第四张放在最后,如此下去,直到手中只剩下一张牌,编程求这张牌原来是几号。”还可以有更巧妙的玩法,就是将输出结果显示在作图窗口中,而且要居中显示输出。这样的编程其实不难。每道题目如果都是这样琢磨得透透的,考试竞赛中恐怕就再也没有难题。改进后的源程序是这样的:
TO C
:N
SETLABELFONT [[黑体] 14
7] ;设置写屏字体为黑体14×14五号字
CS HT PU SETXY -18*:N/2 :N*18
SETH 90 ;使输出居中
MAKE "L []
;建立一个储存顺序牌号的空表
FOR[I 1 :N][MAKE "L SE :L
:I] ;将顺序数字赋值给空表
MAKE "FL "原始牌序
XS
C1 :L
;用递归模拟玩牌过程
END
TO C1 :L
;模拟玩牌的递归
IF (COUNT :L)=1 [MAKE "FL
"最后一张 XS STOP] ;在只剩下一张牌时输出表中的牌号
MAKE "L BF
:L
;将第一张牌丢掉
IF (COUNT :L)>1[MAKE "FL
"丢掉首张 XS]
MAKE "L SE BF :L FIRST :L
;将当前面上的牌放到最后并组成新表
IF (COUNT :L)>1[MAKE "FL
"换位置后 XS]
C1 :L
;不断循环以上过程
END
TO XS
;输出在作图窗口的子程序
MAKE "LL SE :FL
:L ;将文字与扑克牌数据组成表
PD LABEL
:LL
;输出当前扑克牌的表数据
PU SETX -18*:N/2 SETY
YCOR-18
;移位到下一行位置
END
除了题头图的例子外,还有下面两个运行实例。很明显,你不要输入什么C 500、 C
3000这样的命令。优先的作图屏幕能够容得下那么多的图形吗?
LOGO编程画出来的动画
加载中,请稍候......