相忘于江湖

不抛弃,不放弃... 请给我勇敢,改变可以改变的;请给我坚强,接受不可以改变的;请给我智慧,分辨这两者。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

原文来自:http://student.csdn.net/space.php?uid=232537&do=blog&id=41966

 

 

前几天看到 网上1篇一步一步silverlight--五子棋很有感触,好久没有动笔写自己的学习心得了...
照猫画虎 这几天讲课用到silverlight顺便也写了个五子棋的demo,这里记下步骤供同好者交流提意。

五子棋游戏不大,但要实现全部功能也是不少,我这里本着入门练习原则,仅将基本功能做一开发。
基本该有的 不外乎 棋盘、棋子和下棋落子三块,有了这个思路就是动手了。
这里我的开发环境是:vs2010+silverlight4

演示地址:
http://www.deepstudy.cn/demo/silverlight/wuziqi/

http://www.deepteach.com/

1、vs中单击菜单,文件-〉新建项目,左侧树选择“silverlight”,右侧选择Silverlight应用程序,确定创建解决方案。
2、双击打开“MainPage.xaml”,在设计器中 拖拽 左侧 Canvas控件 到 视图中设置宽高650,背景色#FFcccccc,Margin="10,10,0,0",Name="cQiPan"

MainPage.xaml代码如下:
 

Code:
  1. <UserControl x:Class="五子棋.MainPage"  
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  6.     mc:Ignorable="d" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" d:DesignHeight="710" d:DesignWidth="870">   
  7.   
  8.     <Grid x:Name="LayoutRoot" Background="White">   
  9.         <Canvas Height="650" HorizontalAlignment="Left" Name="cQiPan" VerticalAlignment="Top" Width="650" Background="#FFcccccc" Margin="10,10,0,0"></Canvas>   
  10.     </Grid>   
  11. </UserControl>   

 

Ctrl+F5开始执行就可以在浏览器中看到要画的棋盘区域了,有了棋盘区域,再横竖画12条线不就有了棋盘了么,


3、双击打开关联文件“MainPage.xaml.cs”在MainPage()构造方法下边 添加画棋盘的线、画棋盘两个方法
 

Code:
  1. /// <summary>   
  2. /// 画棋盘   
  3. /// </summary>   
  4. public void DrawBoard() {   
  5.   
  6.     for (int i = 1; i<=12;i++ )   
  7.     {   
  8.         huaQipanLine(50, 50 * i, 50 * 12 , 50 * i); //画横线   
  9.         huaQipanLine(50 * i, 50, 50 * i, 50 * 12 ); //画竖线   
  10.     }   
  11.   
  12. }   
  13.   
  14. /// <summary>   
  15. /// 画棋盘的线   
  16. /// </summary>   
  17. /// <param name="x1"></param>   
  18. /// <param name="y1"></param>   
  19. /// <param name="x2"></param>   
  20. /// <param name="y2"></param>   
  21. public void huaQipanLine(int x1,int y1,int x2,int y2){   
  22.     Line l = new Line();   
  23.     l.X1 = x1;  //50   
  24.     l.Y1 = y1;  //50   
  25.     l.X2 = x2;  //50*12;   
  26.     l.Y2 = y2;  //50   
  27.     l.Stroke = new SolidColorBrush(Colors.Black);   
  28.     cQiPan.Children.Add(l);   
  29. }   

然后在 MainPage()构造方法中加入代码
           

Code:
  1. DrawBoard();   

Ctrl+F5开始执行就可以在浏览器中看到画的棋盘了


4、有了棋盘,当然得有棋子,这里我先定义一个方法 用来画棋子
 

Code:
  1. /// <summary>   
  2.  /// 画棋子   
  3.  /// </summary>   
  4.  public void DrawChessman(bool chess_color, Point pt)   
  5.  {   
  6.      Ellipse el = new Ellipse();   
  7.      el.Fill = new SolidColorBrush( chess_color?Colors.Black:Colors.White );   
  8.      el.Width = 50;   
  9.      el.Height = 50;   
  10.         
  11.      cQiPan.Children.Add(el);   
  12.      //Canvas.SetLeft(el,50/2);   
  13.      //Canvas.SetTop(el,50/2);   
  14.      //Canvas.SetLeft(el, (int)pt.X - 35);   
  15.      Canvas.SetLeft(el, (Math.Round((pt.X -cQiPan.Margin.Left) / 50)) * 50-25  );   
  16.      Canvas.SetTop(el, (Math.Round((pt.Y - cQiPan.Margin.Top) / 50)) * 50-25 );   
  17.   
  18.   
  19.  }   

显然只要调用执行这个方法就可以在指定的位置画个棋子出来。
5、棋子出来了 什么时候画啊,事件驱动--当然是点击棋盘cQiPan(Canvas控件)时响应事件中画了,
在“MainPage.xaml”编辑器下修改Canvas控件增加了一个MouseLeftButtonDown的事件回车 ,在隐藏代码中会相应的出现鼠标左键按下的事件响应函数private void cQiPan_MouseLeftButtonDown(object sender, MouseButtonEventArgs e),找到他修改为
 

Code:
  1. /// <summary>   
  2. /// 棋盘鼠标单击事件 画棋子   
  3. /// </summary>   
  4. bool chess_color = true;   
  5. private void cQiPan_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)   
  6. {   
  7.     Point pt = e.GetPosition(this);    
  8.     DrawChessman(chess_color,pt);   
  9.      if (chess_color)   
  10.     {   
  11.         chess_color = false;   
  12.     }else{   
  13.         chess_color = true;   
  14.     }   
  15.   
  16. }   

保存两个文件
Ctrl+F5开始执行 在棋盘上单击就可以下五子棋了


虽说可以下棋玩了,但要想实际应用 则有很多要考虑和开发的...代码没做解释,不难,实在也没什么解释的
好在这就是个demo,
无钱无动力 哎 怎么大家都这么功利了,就到这里吧,下次再说了

文章同步:http://www.itstudy.cn/www/article/article.asp?id=101

致谢 :

沈凯 一步一步silverlight--五子棋 给了我不能偷懒的决心,望大家不要做比较,我不是要写代码说明比他好(写出来的都是好的),只是以我的思路 写了一个五子棋的课堂练习而已。

 

原文来自:http://student.csdn.net/space.php?uid=232537&do=blog&id=41966

posted on 2010-09-29 08:44  playman0211  阅读(216)  评论(0编辑  收藏  举报