Silverlight+WCF 新手实例 象棋 棋子(三)

棋盘上有棋子,棋子应该还有一些属性,按原始冲动新建一个棋子类。

上google翻译下棋子E文叫什么,查到了叫Chessman,于是对着项目右键添加一个Chessman.cs

 

复制代码
  ///   <summary>
    
///  棋子类 by 路过秋天
    ///http://cyq1162.cnblogs.com/
    
///   </summary>
     public   class  Chessman
    {

    }
复制代码

 

 

乱七八糟:

想了想,要画棋子还是找图片好,图片也不是不好找,网上一搜还是有的,只是图片啊,算了,还是画棋子了,反正棋盘也是画出来的。于是想了想怎么画,先画一个圆圈,里面再画一个字。圆圈好说了,有个Ellipse类,设一下属性就得了。画字,于是又朝GDI+的方向想了,找什么DrawString,飞了半天也找不到方向,没办法,最后尘埃落定到了TextBlock上了。

 

这棋子都要有什么了,想了想,基本上得有的就是:

Name,有个名字,叫“兵”,“炮”,之类的名字

Color,不是红就是黑色了

Radius,棋子半径,这棋子总有个大小。

InitPoint,棋子的坐标位置

MovePoint,棋子总得会移动,移动后的位置。

好了,在类里敲入“prop"按两下Tab键,写好类型,按下Tab,起好名称,回车,一个属性就写完了,继续重复,于是有了以下代码:

 

复制代码
ExpandedBlockStart.gif
///   <summary>
    
///  棋子类
    
///   </summary>
     public   class  Chessman
    {
        
///   <summary>
        
///  棋子名称
        
///   </summary>
         public   string  Name
        {
            
get ;
            
set ;
        }
        
///   <summary>
        
///  棋子颜色
        
///   </summary>
         public  Color Color
        {
            
get ;
            
set ;
        }
        
///   <summary>
        
///  棋子半径
        
///   </summary>
         public   double  Radius
        {
            
get ;
            
set ;
        }
        
///   <summary>
        
///  棋子数组坐标
        
///   </summary>
         public  Point InitPoint
        {
            
get ;
            
set ;
        }
        
///   <summary>
        
///  移动后数组坐标
        
///   </summary>
         public  Point MovePoint
        {
            
get ;
            
set ;
        }
    }
复制代码

 

我们再加个构造函数初始化一下属性的数据

 

复制代码
ExpandedBlockStart.gif
public  Chessman( double  x,  double  y,  double  radius, Color color,  string  name)
        {
            InitPoint 
=   new  Point(x, y);
            MovePoint 
=  InitPoint;
            Radius 
=  radius;
            Color 
=  color;
            Name 
=  name;
        }
复制代码

 

好啦,我们要画棋子了

参考下棋盘的画法,我们新增加了两个函数,一个Panel容器是要的了。DrawIn用于外部调用了。

 

复制代码
ExpandedBlockStart.gif 代码
Panel container;
        
public   void  DrawIn(Panel control)
        {
            container 
=  control;
            Draw();
        }
        
private   void  Draw()
        {
            
// 这里实现画啦
        }
复制代码

 

怎么画怎么画,急啦啦。

想啦想,要画一个圈,又要画一个字,这两个还得组合成一个。于是新建一个Canvas,再把两个放到Canvas里面。这样把Canvas当成棋子。因为棋子迟早是要移动的,你不能只移动个圆圈,或移动一个字吧。

好了,看下圆圈的代码,基本就是赋些属性了事了:

 

复制代码
ExpandedBlockStart.gif
Ellipse elp  =   new  Ellipse()
            {
                 Width
= Radius * 2 ,
                 Height
= Radius * 2 ,
                 Stroke
= new  SolidColorBrush(Color),
                 Fill 
=   new  SolidColorBrush(Color),
                 Opacity
= 15
            };
复制代码

 

好了,再看下文字的代码,又是赋了一堆属性值了事,那个margin值还真不好调的呢,对的不是很齐,将就点了:

 

复制代码
ExpandedBlockStart.gif
TextBlock text  =   new  TextBlock()
            {
                TextAlignment 
=  TextAlignment.Center,
                Foreground 
=   new  SolidColorBrush(Colors.White),
                Text 
=  Name,
                FontFamily 
=   new  FontFamily( " 宋体 " ),
                FontSize 
=  Radius,
                FontWeight 
=  FontWeights.Bold,
                Margin 
=   new  Thickness(Radius  /   2   -   2 , Radius  /   2   -   2 0 0 )
            };
复制代码

 

 

接下来要New一个Canvas,把它俩加进去,最后把棋子放到容器Panel里

 

chessman  =   new  Canvas();
            chessman.Children.Add(elp);
            chessman.Children.Add(text);
            container.Children.Add(chessman);

 

chessman 的前面咋没有Canvas,是写少了?不是了,这里是把它定义到外面去了,后面应该会用到。

public Canvas chessman;//棋子,这个定义在外面了。

 

到此,棋子类就差不多了,不过目前少了两个重点。

1。就是棋子的位置,棋子的位置可以通过Margin属性来调整,但目前我们先不写,因为要把原始坐标转成象素坐标,

单独的棋子类没法完成这种事,所以留着,待下一篇我们新增加一个Chess象棋类来控制。

2。就是棋子被点击的事件,下棋你总要先选中棋子的,不选中你就下不了。

这两个重点我们留到下节再补。

 

我们到上篇New Board的地方下面再New Chessman一个棋子,看看效果。

在Silverlight应用程序的界面代码:

 

复制代码
ExpandedBlockStart.gif
  public   partial   class  MainPage : UserControl
    {
        
public  MainPage()
        {
            InitializeComponent();
            Board board 
=   new  Board();
            board.DrawIn(canvas1);
            Chessman chessman 
=   new  Chessman( 0 0 15 , Colors.Red,  " " );
            chessman.DrawIn(canvas1);

        }
    }
复制代码

 

运行,看效果图,一个棋子就出来了:

 

好了,打完收工。下节再完成重点棋子的位置及点击事件。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/07/07/1772792.html