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

Silverlight+WCF 新手实例 象棋 棋手颜色(二十九),第1张

概述在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示   在上一节Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八),我们在最后聊天对话中看到,双方棋手用的竟然都是红色,这个...... 这节,我们来让双方使用不同的颜色下棋:   我们通过什么来决定棋手的颜色?其实,Player玩家属性里,不就有一个ColorValue么,有了这个,一切就好办了。 我 在线演示地址: 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 [] {  0 2 3  }; // 棋子在上面
             int [] down  =   new [] {  9 7 6  };  // 棋子在下面
             if  (Playercolor  ==  colors.Black) // 这里是新增加的
            {
                
// 黑色在下
                up  =   new [] {  9 6  };
              down 
=   new [] {  0 3  };
            }
            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,本节打完收工!

总结

以上是内存溢出为你收集整理的Silverlight+WCF 新手实例 象棋 棋手颜色(二十九)全部内容,希望文章能够帮你解决Silverlight+WCF 新手实例 象棋 棋手颜色(二十九)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1009100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存