本章我们通过随机函数,让计算机做出随机的行为,可以让计算机掷骰子,在一副扑克牌中随机抽出一张牌,以随机的颜色、形状、大小和位置绘制螺旋线。
本章编程挑战:
#1:随机的边和厚度
通过添加两个随机变量,让程序增加更多的随机性。添加一个变量sides以表示边数,然后,使用该变量修改在螺旋线循环中每次要旋转的角度(因此,这也是螺旋线中的边数),使用360/sides+1作为角度,而不是直接使用91.接下来,创建一个名为thick的变量,它将保存从1到6的随机数以表示海龟钢笔的粗细。在合适的位置添加一行t.width(thick),来修改随机的万花筒效果中的每一条螺旋线的粗细。
完整代码:
效果图:
#2:逼真的镜面反射螺旋线:
首先,在绘制第1条螺旋线之前,通过t.heading()记录海龟所朝向的方向(在 0到360度之间),将其存储到一个名为angle的变量中。然后,在绘制每一条镜面反射螺旋线之前,通过t.setheading()把海龟的朝向修改为正确的镜面反射方向。
第二个角度应该是180-angle
第三个螺旋线角度应该是angle-180
第四个螺旋线角度应该是360-angle
我们尝试在每次绘制了第1条和第3条螺旋线之后向左旋转,在绘制了第2条和第4条螺旋线之后向右旋转。如果实现了这些改进,螺旋线应该看上去在大小,形状,颜色,粗细和方向上都真的像是镜面反射图像。如果想避免形状如此重叠,只要将x坐标和y坐标修改为rando.randrange(size,turtle.window_width()//2)和random.randrange(size,turtle.window_height()//2)就可以了
完整代码:
效果图:
#3:War
首先,我们记录分数,创建两个变量来记录计算机赢了几把以及玩家赢了几把。其次,我们通过发26手牌来模拟玩一整幅牌(可能使用一个for循环取代while循环,或者是通过记录目前为止已经玩过的牌的号码),然后根据哪一个玩家得到了更多的分数来宣布获胜者。第三,我们让程序来处理平局,记住连续出现了多少次平局。当下一次一个玩家获胜的时候,将最近的平局次数加入到该获胜者的分数之中并且将平局的次数重新设置为 0,以备下一回合使用。
领取专属 10元无门槛券
私享最新 技术干货