silverlight新手做的五子棋.wps
新手做的一个 五子棋例子 很简单 很简单 目前只能实现 人人对战而且不能连接 没有电脑 后续都会加上 加电脑这块感觉有点难度啊 Xaml Xaml.csusing System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using System.Windows.Interop;namespace SLChina public partial class Canvascs:UserControl public string nowColor=white;List exisList=new List();bool isOver=false;public Canvascs()InitializeComponent();/this.button2.MouseLeftButtonDown+=new MouseButtonEventHandler(button2_MouseLeftButtonDown);/this.button2.MouseLeftButtonUp+=new MouseButtonEventHandler(button2_MouseLeftButtonUp);/this.button2.MouseMove+=new MouseEventHandler(button2_MouseMove);/开始按钮 /private void btn_start_Click(object sender,RoutedEventArgs e)ClearPiece();for(int i=0;i 11;i+)DrawLine(0,500,50*i,50*i);DrawLine(50*i,50*i,0,500);isOver=false;/棋盘划线 /private void DrawLine(double x1,double x2,double y1,double y2)Line csLine=new Line();csLine.X1=x1;csLine.X2=x2;csLine.Y1=y1;csLine.Y2=y2;csLine.StrokeThickness=2;csLine.Stroke=new SolidColorBrush(Colors.Green);this.cs_desktop.Children.Add(csLine);/全屏按钮 /private void btn_fullscreen_Click(object sender,RoutedEventArgs e)Content con=Application.Current.Host.Content;if(con.IsFullScreen)con.IsFullScreen=false;this.btn_fullscreen.Content=全屏;else con.IsFullScreen=true;this.btn_fullscreen.Content=退出全屏;/鼠标移动事件 /private void cs_desktop_MouseMove(object sender,MouseEventArgs e)this.position.Text=e.GetPosition(null).ToString();FrameworkElement element=sender as FrameworkElement;if(Convert.ToInt32(e.GetPosition(null).X.ToString()%50=0&Convert.ToInt32(e.GetPosition(null).X.ToString()%50=45&Convert.ToInt32(e.GetPosition(null).X.ToString()%50=0&Convert.ToInt32(e.GetPosition(null).Y.ToString()%50=45&Convert.ToInt32(e.GetPosition(null).Y.ToString()%50=50)element.Cursor=Cursors.Hand;else element.Cursor=Cursors.Arrow;/鼠标点击事件 /private void cs_desktop_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)if(isOver)MessageBox.Show(游戏已结束请点击开始从新开始游戏);return;if(Convert.ToInt32(e.GetPosition(null).X.ToString()%50=0&Convert.ToInt32(e.GetPosition(null).X.ToString()%50=45&Convert.ToInt32(e.GetPosition(null).X.ToString()%50=0&Convert.ToInt32(e.GetPosition(null).Y.ToString()%50=45&Convert.ToInt32(e.GetPosition(null).Y.ToString()%50 55)rightX=100;else rightX=50;if(rightX.Length=3)if(Convert.ToInt32(rightX)55)rightY=100;else rightY=50;if(rightY.Length=3)if(Convert.ToInt32(rightY)0)foreach(string item in this.exisList)if(item.Split(,)0+,+item.Split(,)1=rightX+,+rightY)MessageBox.Show(此处已有棋子,不能在此处下棋);return;if(nowColor=white)DrawPiece(rightX,rightY,black,Colors.Black);else DrawPiece(rightX,rightY,white,Colors.White);exisList.Add(rightX+,+rightY+,+nowColor);int result=CheckGameOver(Convert.ToInt32(rightX),Convert.ToInt32(rightY),0,500,50,nowColor);if(result=4)isOver=true;if(nowColor=white)MessageBox.Show(白子胜利);else if(nowColor=black)MessageBox.Show(黑子胜利);else isOver=true;MessageBox.Show(出现异常);return;else MessageBox.Show(不能在此处下棋);return;/检查是否已经结束游戏 /private int CheckGameOver(int x,int y,int min,int max,int width,string nowColor)#region 横向 int leftCount=0;int rightCount=0;for(int i=x;i=min;i=i-width)if(i=x)continue;if(exisList.Contains(i+,+y+,+nowColor)leftCount+;else break;for(int i=x;i=min;i=i-width)if(i=y)continue;if(exisList.Contains(x+,+i+,+nowColor)topCount+;else break;for(int i=y;i=0&nowY=0)if(nowX=x&nowY=y)nowX=nowX-50;nowY=nowY-50;continue;if(exisList.Contains(nowX+,+nowY+,+nowColor)rightTopTiltLine+;else break;nowX=nowX-50;nowY=nowY-50;nowX=x;nowY=y;while(nowX=500&nowY=500)if(nowX=x&nowY=y)nowX=nowX+50;nowY=nowY+50;continue;if(exisList.Contains(nowX+,+nowY+,+nowColor)leftBottomTiltLine+;else break;nowX=nowX+50;nowY=nowY+50;#endregion#region 左斜线 int leftTopTiltLine=0;int rightBottomTiltLine=0;nowX=x;nowY=y;while(nowX=0)if(nowX=x&nowY=y)nowX=nowX+50;nowY=nowY-50;continue;if(exisList.Contains(nowX+,+nowY+,+nowColor)leftTopTiltLine+;else break;nowX=nowX+50;nowY=nowY-50;nowX=x;nowY=y;while(nowX=0&nowY=500)if(nowX=x&nowY=y)nowX=nowX-50;nowY=nowY+50;continue;if(exisList.Contains(nowX+,+nowY+,+nowColor)rightBottomTiltLine+;else break;nowX=nowX-50;nowY=nowY+50;#endregion if(leftCount+rightCount 4)leftCount=0;rightCount=0;if(topCount+bottomCount 4)topCount=0;bottomCount=0;if(rightTopTiltLine+leftBottomTiltLine4)rightTopTiltLine=0;leftBottomTiltLine=0;if(rightBottomTiltLine+leftTopTiltLine 4)rightBottomTiltLine=0;leftTopTiltLine=0;return leftCount+rightCount+topCount+bottomCount+rightTopTiltLine+leftBottomTiltLine+rightBottomTiltLine+leftTopTiltLine;/画棋子 /private void DrawPiece(string rightX,string rightY,string color,Color c)Ellipse ep=new Ellipse();ep.Fill=new SolidColorBrush(c);ep.Width=24;ep.Height=24;this.cs_desktop.Children.Add(ep);Canvas.SetLeft(ep,Convert.ToDouble(rightX)-(ep.Width)/2);Canvas.SetTop(ep,Convert.ToDouble(rightY)-(ep.Height)/2);nowColor=color;/清除棋子 /private void ClearPiece()for(int i=0;i exisList.Count;i+)string x=exisListi.Split(,)0.ToString();string y=exisListi.Split(,)1.ToString();this.cs_desktop.Children.Clear();exisList.Clear();