pygame做的著名游戏_pygame教程(十):汉诺塔游戏

前言

这一章我们继续来学习游戏的设计,带孩子去科技馆,看到有一种叫做“汉诺塔”的小游戏,这个智力游戏应该很多同学听说过,它首先在三根柱子中的第一根上摆放大小不一的圆盘,然后要求玩家用最少的步数、最短的时间将第一根柱子上的圆盘通过第二根柱子移动到第三根柱子上。 我们来看一下游戏的最终动画:

ecb0631bd56d6a2181b8f41a2abc445b.gif

游戏开发步骤

  1. 绘制背景及三根柱子
  2. 玩家通过先后点击两根柱子来表示移动
  3. 计算机给出判断,是否可移动以及是否结束

部分难点介绍

保存三根柱子的状态
可为三根柱子分别设置三个数组,保存着各自的圆盘rect,而且从大小到排列,为方便起见,可将柱子的底盘也加入该数组,这样就始终可以用各数组的最后一个来进行比较:

5a7e9dee7688f174a637c66074ae37fe.png

对玩家点击进行判断 因为玩家需要先后点击两根柱子才能移动,这就需要设计移动策略:
  1. 当玩家第一次点击没有圆盘的柱子时,程序将不做反应
  2. 当玩家点击两次有效柱子,并可使圆盘移动时,程序完成减少和添加动作
  3. 当玩家点击两次有效柱子,但圆盘无法移动时,立刻清除标记状态代码如下:

1a8f51868f5cbdcf5be72e7d90600497.png

移动圆盘
程序在玩家模式下只是简单将圆盘从一根柱子移动到另一根柱子,如果按向上箭头,即完成“飞盘”演示动画,移动圆盘的代码如下:

8819a94938701186b73fabd92899f6ea.png

汉诺塔的解法

汉诺塔的解法其实只是一个递归循环,现将代码给出:

adce7b92270ef18dc43dfcc28185619c.png

控制台打印图如下所示:

29da5818b75da5459d5e4886f4739e6c.png

将自动演示纳入游戏

可将上述代码纳入小游戏中,这样子更便于玩家研究“汉诺塔”的移动规律。自动演示只是将上述汉诺塔解法生成的数据传递给移动函数,同时加入动画即可,代码如下:

bd9e0f01faf7b47cc7f902f89e776c75.png

五阶的动画演示:

ad9e27b3ccbc06c9bc35105d6e679ec2.gif

小结 由上文可以看出,汉诺塔的解法是典型的递归法,但在制作游戏时其实用不到其解法,只需要忠实记录和按游戏规则规范玩家的动作即可,从两者对比也可以看出,解法与游戏的设计有联系,但侧重点是不同的,毕竟面向的方向不同,所以尽管同学们可能对解法不一定能熟悉,但是只要掌握了游戏的设计要领,同样可以制作出好玩的游戏。

其它教程:

pygame教程(一): 基础知识 pygame教程(二):绘制几何图形 pygame教程(三):动画初步 pygame教程(四):添加文字和播放声音 pygame教程(五):添加鼠标和键盘响应 pygame教程(六):迷宫小游戏(1) pygame教程(七):迷宫小游戏(2) pygame教程(八):数字华容道游戏 pygame教程(九):猜数字游戏
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值