技术开发 频道

Windows游戏专家:Silverlight3开发进阶

    【IT168 专稿】上一篇中,我们重点讨论了开发纸牌游戏中实现鼠标拖放编程所涉及的一些基本技术。在本篇中,我们将讨论纸牌游戏开发中的菜单编程技巧,并结合Silverlight编程环境总结纸牌游戏规则,最后初步涉及游戏开发的基础内容。

  一、Silverlight菜单控件简介

  为了顺便探讨Silverlight编程中的菜单有关问题,我特意引入了开源站点CodePlex上的一个Silverlight菜单控件(http://slmenu.codeplex.com/WorkItem/View.aspx?WorkItemId=23119)来控制整个游戏的逻辑。如此以来,在菜单控制之下,整个纸牌游戏软件的操作就像桌面应用十分类似。尽管如此,至少还有两点值得你注意:

  (1)你应该改变菜单控件的zIndex属性为一个较大的整数(在我们的游戏中设置为1000就足够了)。

  (2)当前的发行版中可能存在一个小错误—在您单击菜单项后你必须再单击菜单范围外的某处才能够开始你的实际工作。

  事实上,还有第三个也是最重要的一点你应该注意。我们留待后面再行讨论。

  接下来,我们将结合纸牌游戏开发中的数据结构简要分析一下玩这款游戏时涉及到的一些基本规则。

  二、纸牌游戏规则分析

  现在,让我们来介绍一下纸牌游戏的游戏规则。考虑到了这些规则后,我们就可以更好地寻找控制鼠标拖放操作所应用的方案。正如你所知,纸牌游戏的目标是利用左上角牌叠中所有的牌,在右上角组成以A打头,从A到K顺序排列的四套花色牌叠。图1给出了这个游戏的一个运行时快照。

Silverlight菜单控件简介
▲图1:纸牌游戏某运行时刻快照

  相信大多数读者都相当熟悉Windows版本的纸牌游戏。在本游戏中,我们尽可能提供全力支持。因此,在后面我们将向你介绍这款游戏中所有可能有效的拖放操作。

  (1)关于单击鼠标左键(后面简称“单击鼠标”)

  首先,你可以单击这个游戏屏幕中的任意位置。但是,如果没有单击扑克或单击了一张正面向上的扑克牌(无论是在左上方过渡区,在下部行栈,或在右上方目标栈区),什么都不会发生。但是,如果你单击了一张正面朝下的扑克牌,无论这张扑克牌是在左上角的过渡区或是底部行栈区,此扑克都将被翻转过来。注意,在图2中我们给出了单击鼠标对应的有效区域。其中,有效地区使用红色圆圈圈出来。

Silverlight菜单控件简介
▲图2:单击鼠标对应的有效区域

  (2)关于双击鼠标左键(后面简称“双击鼠标”)

  接下来,让我们考虑双击鼠标对应的有效区域。游戏规则表明,通过双击某一张正面向上的扑克牌,无论这张扑克牌是在左上方过渡区或在下部行栈上,如果其他条件也得到满足,那么这张扑克将自动飞行到右上角目标栈的一个位置。在当前扑克牌飞往目标区后,其紧邻下方可能存在的另一张扑克将会显示为正面向下,为下一次鼠标单击作好准备。

  (3)关于按住鼠标左键拖动(后面简称“拖动鼠标”)

  最后,我们来讨论一下玩纸牌游戏过程中最频繁使用的鼠标拖动情况。显然,根据游戏规则,只有当前扑克正面向上时,才能拖动它在其他扑克上方移动。再者,如果其他有效的条件得到满足,那么当前扑克就可以被拖动到右上角目标栈的一个位置。此外,更一般的鼠标拖动情况是拖动一叠皆是正面向上的扑克牌到另一张相匹配的扑克上—我们将在后面讨论鼠标拖放编程时再详细讨论。

0
相关文章