silverlight5开发的翻牌游戏

时间:2023-03-10 00:59:29
silverlight5开发的翻牌游戏

silverlight5开发的翻牌游戏

扑克牌用了一个自定义控件,代码如下

 public class CardButton : Button
{
public int state;//是否翻转0是未翻转,1是已翻转
private static CardButton button;
public CardButton()
{
this.DefaultStyleKey = typeof(CardButton);
// this.Click += CardButton_Click;
}

主要是继承了button控件然后增加了一个属性,记录牌是否翻转,然后修改了样式

<Style TargetType="local:CardButton">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CardButton">
                    <!--<Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                    </Border>-->
                    <Grid x:Name="RootElement">
                        <!--<Rectangle x:Name="BodyElement" Width="260" Height="100"
          Fill="Lavender" Stroke="Purple" RadiusX="16" RadiusY="16" />-->
                        <!--<TextBlock Text="{TemplateBinding Content}" HorizontalAlignment="Center"
          VerticalAlignment="Center" />-->
                        <Image Source="{TemplateBinding Content}" Width="100" />
                    </Grid>

</ControlTemplate>
              
            </Setter.Value>
        </Setter>
    </Style>

页面上使用了一个wrappanel控件,实现流布局来展示牌

主页面核心代码如下

   private void InitData()
{ count = ;
int[] j = new int[] { , , , , , , , , , , , , , , , };
Random r=new Random();
List<int> arr= j.OrderBy(x=>r.Next()).ToList<int>(); for (int i = ; i < ; i++)
{ CardButton button = new CardButton();
button.state = ;
button.Name = "btn" + i;
button.Content = "image/card.jpg"; button.Tag = arr[i].ToString();
button.Click += button_Click;
Content.Children.Add(button);
list.Add(button); }
}

然后定义图片点击事件,两张相同的图片则消失,当点开第3张的时候,前2张翻转过来

 void button_Click(object sender, RoutedEventArgs e)
{
CardButton b = (CardButton)sender; b.state = ;
b.Content = "image/" + b.Tag + ".jpg"; ;
if (list.Count(btn => btn.state == ) >= )
{
foreach (CardButton item in list.Where(btn => btn.state == || btn.state == ))
{
item.Content = "image/card.jpg";
item.state = ;
} b.state = ;
return;
} foreach (CardButton item in list.Where(btn=>btn.state==))
{
if (b.Tag.ToString()==item.Tag.ToString()&&b.Name!=item.Name)
{ count = count - ;
b.Dispose();
item.Dispose();
}
}
#region 游戏结束
if (count<=)
{
MessageBox.Show("恭喜你,太聪明了,闯关成功"); }
#endregion
}