zoukankan      html  css  js  c++  java
  • 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,起好名称,回车,一个属性就写完了,继续重复,于是有了以下代码:

    /// <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;
            }
        }

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

    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用于外部调用了。

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

    怎么画怎么画,急啦啦。

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

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

    Ellipse elp = new Ellipse()
                {
                     Width
    =Radius*2,
                     Height
    =Radius*2,
                     Stroke
    =new SolidColorBrush(Color),
                     Fill 
    = new SolidColorBrush(Color),
                     Opacity
    =15
                };

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

    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 - 200)
                };

    接下来要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应用程序的界面代码:

     public partial class MainPage : UserControl
        {
            
    public MainPage()
            {
                InitializeComponent();
                Board board 
    = new Board();
                board.DrawIn(canvas1);
                Chessman chessman 
    = new Chessman(0015, Colors.Red, "");
                chessman.DrawIn(canvas1);

            }
        }

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

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

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    Android源码学习之如何使用eclipse+NDK
    Android NDK 工具链的使用方法(Standalone Toolchain)
    gcc和g++的区别
    OCP-1Z0-051-V9.02-42题
    OCP-1Z0-051-V9.02-41题
    OCP-1Z0-051-V9.02-40题
    OCP-1Z0-051-V9.02-39题
    windows下自动生成文件夹下所有JNI所需的.h头文件
    OCP-1Z0-051-V9.02-38题
    Oracle DB 视图
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1772792.html
Copyright © 2011-2022 走看看