我正在实现一个WPF版的双陆棋游戏,需要找到一种模式来实现棋子的移动和位置。
我的棋盘由一个带有3行的网格组成:顶部行、分隔行、底部行和12列。分隔行没有功能,只是一个可视化辅助工具。
顶部行和底部行各包含12个单元格,每个单元格内包含一个StackPanel,棋子以椭圆形呈现。
游戏中的一次移动是指从一个Stack中删除一个椭圆(棋子)并将其添加到另一个Stack中。
每一次移动还包括从棋盘中弹出和推入的功能。
(1) UI和功能是分开的,因为在移动棋子时必须检查某些事情(虽然椭圆会被分配不同的颜色并且可以通过颜色进行检查),但我必须以任何方式使用这个类,所以我想知道将逻辑与UI解耦的优点是什么...
(2) 我如何在功能和UI之间实现绑定?我应该如何将stackpanel绑定到一个堆栈,并使用什么转换器,以便推入和弹出操作会导致等效的UI代码?
我的棋盘由一个带有3行的网格组成:顶部行、分隔行、底部行和12列。分隔行没有功能,只是一个可视化辅助工具。
顶部行和底部行各包含12个单元格,每个单元格内包含一个StackPanel,棋子以椭圆形呈现。
游戏中的一次移动是指从一个Stack中删除一个椭圆(棋子)并将其添加到另一个Stack中。
// Example move a pawn from stack23 to stack22
Ellipse ellipse = (Ellipse)Stack23.Children[Stack23.Children.Count - 1];
Stack23.Children.RemoveAt(Stack23.Children.Count - 1);
Stack22.Children.Add(ellipse);
我需要在这个项目中使用一个预定义的类,名为Board
public class Board
{
public Stack<Pawn>[] Pipes { get; set; }
public Board()
{
Pipes = new Stack<Pawn>[24];
}
}
Pawn类提供了游戏流程所需的属性,比如当前棋子的所有者(玩家或对手)。
public Class Pawn
{
public bool IsMine{get; set;}
}
每一次移动还包括从棋盘中弹出和推入的功能。
Pipes[22].Push(Pipes[23].Pop());
(1) UI和功能是分开的,因为在移动棋子时必须检查某些事情(虽然椭圆会被分配不同的颜色并且可以通过颜色进行检查),但我必须以任何方式使用这个类,所以我想知道将逻辑与UI解耦的优点是什么...
(2) 我如何在功能和UI之间实现绑定?我应该如何将stackpanel绑定到一个堆栈,并使用什么转换器,以便推入和弹出操作会导致等效的UI代码?