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

 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
}

silverlight5开发的翻牌游戏的更多相关文章

  1. 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架

    教程里的案例我们是通过H5游戏引擎开发,目前H5的游戏引擎比较好用的是白鹭,不过对于新手来说白鹭的开发环境和工具使用过于复杂,这里推荐一个国内大神编写的游戏引擎:lufylegend. 直接在页面引入 ...

  2. 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)

    在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...

  3. Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)

    Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...

  4. Swift - 跑酷游戏开发(SpriteKit游戏开发)

    一,下面演示了如何开发一个跑酷游戏,实现的功能如下: 1,平台工厂会不断地生成平台,并且向左移动.当平台移出游戏场景时就可将其移除. 2,生成的平台宽度随机,高度随机.同时短平台踩踏的时候会下落. 3 ...

  5. 怎样在Android开发中FPS游戏实现的两种方式比较

    怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...

  6. pygame开发滑雪者游戏

    pygame开发滑雪者游戏 一.实验说明 下述介绍为实验楼默认环境,如果您使用的是定制环境,请修改成您自己的环境介绍. 1. 环境登录 无需密码自动登录,系统用户名 shiyanlou,该用户具备 s ...

  7. 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化

    联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...

  8. JavaScript案例开发之扑克游戏

    随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...

  9. 【转】利用 three.js 开发微信小游戏的尝试

    前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...

随机推荐

  1. java12 File类

    )File类 )IO流的原理及概念 )IO流的分类 )IO流类的体系 )字节流和字符流 )处理流 )文件拷贝 )处理流 )文件拷贝 )文件分割与合并 File:文件和目录路径名的抽象表示形式,一个Fi ...

  2. debugfs恢复文件

    echo "this is test" >xx debugfs: ls -d /root/test1 () . () .. () xx <> () test.c ...

  3. WSGI是一种编程接口,而uwsgi是一种传输协议

    http://uwsgi-docs.readthedocs.io/en/latest/Nginx.html http://sunxiunan.com/?p=1778 cgi---------fastc ...

  4. Android 读取手机短信

    获取android手机短信需要在AndroidManifest.xml加权限: <uses-permission android:name="android.permission.RE ...

  5. C#中Enum用法小结

      enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此 ...

  6. Linux软连接和硬链接(摘录)

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  7. update 改写 merge into

    update语句改写成merge into有时会提高运行速度 看两个案例 1.根据业务将两个嵌套子查询改写成max,速度有3min提升到3s UPDATE OPER_792.LL_SCB_YDKB_2 ...

  8. css :after和:before

    :before是css中的一种伪元素,可用于在某个元素之前插入某些内容.:after是css中的一种伪元素,可用于在某个元素之后插入某些内容. 举例: 1.结合border写个对话框的样式. < ...

  9. 重载public Primes ():this(2,100)

    当构造函数有多个重载的时候 想通过默认构造函数调用其他的重载的构造函数的话 就可以用:运算符public Primes():this(2, 100){//code }public Primes(int ...

  10. C#知识总结

    Control类属于Sytem的命名空间 表示控制台标准的输入输出和错误流提供用于从控制台读取单个字符或正行的方法还提供了很多写入的的方法, static 关键字是对方法的修饰 二 数据类型的分类 数 ...