Silverlight2 边学边练 之一 五子棋

Silverlight2 边学边练 之一 五子棋,第1张

概述最近在看《Pro Silverlight 2 in C# 2008》,个人感觉这本书写的不错。 全书采用彩色印刷,可以使读者立刻看到程序运行的最后效果。虽然说是高级教程, 但看起来还是非常通俗易懂,个别地方可能有些难度需要仔细研究下。 书看了不少光看不练难免会感觉生疏。结合书中的示例举一反三做一些东东, 同时也和正在学习Silverlight的朋友交流下经验。根据第四章关于Mouse Event的

最近在看《Pro Silverlight 2 in C# 2008》,个人感觉这本书写的不错。
全书采用彩色印刷,可以使读者立刻看到程序运行的最后效果。虽然说是高级教程,
但看起来还是非常通俗易懂,个别地方可能有些难度需要仔细研究下。
书看了不少光看不练难免会感觉生疏。结合书中的示例举一反三做一些东东,
同时也和正在学习Silverlight的朋友交流下经验。根据第四章关于Mouse Event的示例,
改编成一个五子棋游戏。

XAML Code:

<UserControl x:Class="WuZi.Page"      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">      <Canvas x:name="parentCanvas" MouseleftButt Background="BurlyWood">      </Canvas>  </UserControl>

C# Code:

首先,画出一个15×15的棋盘。

public Page()  {    InitializeComponent();    int offset = 0;    //横竖各15条线    for (int i = 0; i <= 15; i++)    {      //垂直线      line lineX = new line();      lineX.stroke = new SolIDcolorBrush(colors.Black);      lineX.X1 = 10 + offset;      lineX.Y1 = 10;      lineX.X2 = 10 + offset;      lineX.Y2 = 610;      parentCanvas.Children.Add(lineX);      //水平线      line lineY = new line();      lineY.stroke = new SolIDcolorBrush(colors.Black);      lineY.X1 = 10;      lineY.Y1 = 10 + offset;      lineY.X2 = 610;      lineY.Y2 = 10 + offset;      parentCanvas.Children.Add(lineY);      //线间距       offset += 40;     }
}

当点击棋盘时,按次序显示黑白子。

       //跟踪棋子是否被拖拽          private bool isDragging = false;          //当棋子被点击时,记录相对于棋子的坐标值。          private Point mouSEOffset;                  //判断黑子          private int num = 0;          private voID canvas_Click(object sender,MousebuttonEventArgs e)          {              //当鼠标没进行拖拽时,创建棋子。              if (!isDragging)              {                  int y;                  y = num % 2;                  Ellipse ellipse = new Ellipse();                  //判断棋子的颜色,奇数黑、偶数白。                  if (y == 0)                  {                      ellipse.Fill = new SolIDcolorBrush(colors.Black);                  }                  else                  {                      ellipse.Fill = new SolIDcolorBrush(colors.White);                  }                  //设置棋子大小                    ellipse.WIDth = 40;                  ellipse.Height = 40;                  //改变棋子鼠标形状(手型)                  ellipse.Cursor = Cursors.Hand;                  //根据鼠标位置定位棋子的坐标                    Point point = e.Getposition(this);                  ellipse.SetValue(Canvas.topProperty,point.Y - ellipse.Height / 2);                  ellipse.SetValue(Canvas.leftProperty,point.X - ellipse.WIDth / 2);                  //跟踪鼠标左键 *** 作                    ellipse.MouseleftbuttonDown += ellipse_MouseDown;                  //添加棋子                    parentCanvas.Children.Add(ellipse);                  num++;              }          }

鼠标 *** 作跟踪

       //按住鼠标左键          private voID ellipse_MouseDown(object sender,MousebuttonEventArgs e)          {              //对棋子进行拖拽                isDragging = true;              Ellipse ellipse = (Ellipse)sender;              //获取相对棋子的坐标值,以棋子左上角为(0,0)点                mouSEOffset = e.Getposition(ellipse);              //跟踪鼠标其他 *** 作                ellipse.MouseMove += ellipse_MouseMove;              ellipse.MouseleftbuttonUp += ellipse_MouseUp;              //捕获鼠标位置,将棋子与鼠标绑定                ellipse.CaptureMouse();          }          //鼠标移动           private voID ellipse_MouseMove(object sender,MouseEventArgs e)          {              if (isDragging)              {                  Ellipse ellipse = (Ellipse)sender;                  //获取相对Canvas的坐标值                    Point point = e.Getposition(this);                  //移动棋子                    ellipse.SetValue(Canvas.topProperty,point.Y - mouSEOffset.Y);                  ellipse.SetValue(Canvas.leftProperty,point.X - mouSEOffset.X);              }          }          //放开鼠标左键          private voID ellipse_MouseUp(object sender,MousebuttonEventArgs e)          {              if (isDragging)              {                  Ellipse ellipse = (Ellipse)sender;                  //取消鼠标 *** 作跟踪                    ellipse.MouseMove -= ellipse_MouseMove;                  ellipse.MouseleftbuttonUp -= ellipse_MouseUp;                  ellipse.ReleaseMouseCapture();                  isDragging = false;              }          }

效果图

至此一个五子棋的雏形完成,还可以进行其他功能完善。例如,将棋子摆放整齐、判定输赢等等,大家可以举一反三。本例参考自Apress《Pro Silverlight 2 in C# 2008》CHAPTER 4 ■ DEPENDENCY PROPERTIES AND ROUTED EVENTS

总结

以上是内存溢出为你收集整理的Silverlight2 边学边练 之一 五子棋全部内容,希望文章能够帮你解决Silverlight2 边学边练 之一 五子棋所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存