作为我的第一个WPF项目,我正在尝试构建一个应用程序来玩类似于《聚会魔术》的纸牌游戏。我不清楚如何布置主要游戏区域。通过查看example 1example 2,您可以看到一些与我尝试的示例类似的示例。右侧的聊天/信息区域将是单独的用户控件。

纸牌必须保持其纵横比,并且每个播放区域都将从10列和两行纸牌开始。随着打出更多的牌,列和/或行的数量可能会改变。每个玩家区域可以具有不同数量的列和/或行。卡可能会重叠,也可能会侧放(轻敲)。所有区域的卡片尺寸均应相同(尽管某些区域可能会裁切)。卡不必精确地位于网格上(它们不一定要紧贴网格)。

当用户将鼠标悬停在卡片上时,应使用动画将其扩展到更大的尺寸。一个玩家区域中的卡牌在展开时可能会溢出到另一玩家区域中(但仅在鼠标悬停的情况下)。

考虑到这些要求,我很想对每个卡使用从Canvas派生的带有图像对象的大型用户控件(以及其他形状来描绘区域)。这意味着在OnRenderSizeChanged事件期间,我将做很多工作来将子项放置在 Canvas 中(手动布局)。

由于自由形式的放置和重叠,使用网格对我来说似乎不可行。

将游戏区域分解为较小的用户控件将利用WPF布局功能,但似乎分解会阻止卡在鼠标悬停时扩展为相邻的用户控件,因此这也不可行。

除了基于 Canvas 的大型控件之外,还有其他更好的选择吗?在WPF中进行手动布局似乎是错误的,但是我看不到其他选择。

最佳答案

对于复合应用程序ala Prism来说,这听起来像是一个不错的方案。它为实现区域,模块,在模块之间发送消息等提供了坚实的框架。从查看屏幕截图,开发具有不同区域的shell并将模块放入其中可能会极大地有益于您的布局。至于卡本身,也许它们也可以是模块?

查看:
http://msdn.microsoft.com/en-us/library/ff649780.aspx

下载包附带了很多很好的例子,其中包括股票市场(如应用程序和事件聚合器示例)。

关于c# - 用于复杂纸牌游戏的WPF布局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3300756/

10-13 06:58