最近在看《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 边学边练 之一 五子棋所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)