• Silverlight+WCF 新手实例 象棋 棋手颜色(二十九)


    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示

    在上一节Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八),我们在最后聊天对话中看到,双方棋手用的竟然都是红色,这个......

    这节,我们来让双方使用不同的颜色下棋:

    我们通过什么来决定棋手的颜色?其实,Player玩家属性里,不就有一个ColorValue么,有了这个,一切就好办了。

    我们回到Chess象棋类里,增加一个属性,玩家颜色,同时,扩展一下构造函数,增加传参:

     /// <summary>
        
    /// 象棋 by 路过秋天
        
    /// http://cyq1162.cnblogs.com
        
    /// </summary>
        public class Chess
        {
            
    /// <summary>
            
    /// 玩家的棋子颜色
            
    /// </summary>
            public Color PlayerColor
            {
                
    get;
                
    set;
            }
            
    //...省略其它属性...
             public Chess(Panel control,Color playerColor)
            {
                PlayerColor 
    = playerColor;
               
    //...省略其它赋值属性...
            }
            
             
    //...省略其它N行代码...
    }

    增加的代码就两行,是相当的简洁的,有了个家玩家属性,那我们在哪实现玩家颜色变化的呢?

    看,我们回到了初始化棋子的地方,只是增加了一个if语句,只有if语句的才是新增加的哦。轻松搞定了:

     /// <summary>
            
    /// 初始化棋子
            
    /// </summary>
            public void InitChessman()
            {
                
    int[] up = new[] { 023 };//棋子在上面
                int[] down = new[] { 976 }; //棋子在下面
                if (PlayerColor == Colors.Black)//这里是新增加的
                {
                    
    //黑色在下
                    up = new[] { 976 };
                  down 
    = new[] { 023 };
                }
                CreateBlackChessman(up);
                CreateRedChessman(down);
                ShowChessman();
            }

    当然了,那个if语句其实就是交换数组了,这里用最简单的方式实现了:"那个,不用第三个变量,怎么实现两值的交换的问题"。

    构造函数发生变化了,我们要回到实例化Chess类的地方Chess.xaml.cs,多传一个参数:

    由于玩家只有颜色值,我们要把它变成颜色Color,所以多了一个转换函数。

     public partial class Chess : UserControl
        {
            ChessNewInstance.Chess chess;
    //这里我们同时把它提到全局对象
            public Chess()
            {
                InitializeComponent();
                chess 
    = new ChessNewInstance.Chess(canvasRoot,GetColor(App.player.ColorValue));//就这里变化了
                chess.InitBoard();
                chess.InitChessman();
                canvasRoot.Width 
    = chess.Board.Width;
                canvasRoot.Height 
    = chess.Board.Height;
                App.chess 
    = chess;//为全局对象赋值
            }
            
    private Color GetColor(int colorVallue)
            {
                
    switch (colorVallue)
                {
                    
    case 1:
                        
    return Colors.Red;
                    
    case 2:
                        
    return Colors.Black;
                    
    default:
                        
    return Colors.Blue;
                }
            }
        }

    大伙别问我为什么:“为啥构造函数里不直接传颜色值,而要传Color呢,这样还得转换啊“,这么复杂的问题。

    其实呢,这个问题是有由来的,这里就简单说一下:

    在一开始呢,我在定义Player属性的时候,是定义Color来传递的,可是最后发现:

    WCF里的Color是在System.Drawing下

    Silverlight里的Color是在System.Windows.Media下

    所以,把Color从WCF往Silverlight里传,直接赋值就会出现问题了,所以呢,就换了ColorValue来传递了

    这下大伙明白了吧。

    好了,代码写完了,非常非常的简短吧,F5运行看效果了:

    看到效果了吧,这下双方所用的颜色就一红一黑了。

    OK, 本节打完收工!

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    eclipse 设置书签标记(标签-Bookmark
    Android 中PopupWindow使用 (转)
    Android中使用dimen定义尺寸(转)
    Eclipse常用的十个方便的快捷键
    十一、Android学习第十天——项目开始(转)
    十、Android学习第九天——小结(转)
    九、Android学习第八天——广播机制与WIFI网络操作(转)
    八、Android学习第七天——XML文件解析方法(转)
    七、Android学习第六天——SQLite与文件下载(转)
    六、Android学习第五天——Handler的使用(转)
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1786726.html
Copyright © 2020-2023  润新知