注冊cnblog已經(jīng)有很長的一段時間了。經(jīng)常在園子里看高手的文章,使我這個小蟲成長的很快。今天閑來無事搞點東西,也是出于以前一個朋友的創(chuàng)意。
先說下思路,這個小程序是使用Silverlight3開發(fā)的。首先我定義了一個棋盤的子對象,用于存放棋盤的格子和棋子。然后用一個二維的數(shù)組存放對象。其余的操作就都是邏輯的了。大家看代碼吧。
下面給出代碼:
1.定義對象

Code
/// <summary>
/// 棋盤子對象
/// </summary>
public class ChessObject
{
public event RoutedEventHandler ObjectClick;
//Canvas容器
public Canvas ImgContainer { get; set; }
//判斷是否先手
public bool IsPrevious { get; set; }
//判斷此點是否有棋子
public bool IsFill { get; set; }
//構造
public ChessObject(Canvas canvas)
{
this.IsFill = false;
this.ImgContainer = canvas;
ImgContainer.MouseLeftButtonUp += new MouseButtonEventHandler(ImgContainer_MouseLeftButtonUp);
}
void ImgContainer_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (ObjectClick != null)
ObjectClick(this, e);
}
}2.棋盤的初始化

Code
public ChessObject[,] arrayChessChild = new ChessObject[15, 15];
public MainPage()
{
InitializeComponent();
InitContainer();
}
/// <summary>
/// 棋盤初始化
/// </summary>
private void InitContainer()
{
//List<Canvas> listChild = new List<Canvas>();
//List<List<Canvas>> listParent = new List<List<Canvas>>();
index = 1;
const int Point_Width = 40;
const int Point_Height = 40;
LayoutRoot.Children.Clear();
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
ChessObject chess = null;
Canvas canvas = new Canvas();
ImageBrush img = new ImageBrush();
ImageSource imgsource = new BitmapImage(FindImg(i, j));
img.ImageSource = imgsource;
canvas.Background = img;
canvas.Width = Point_Width;
canvas.Height = Point_Height;
canvas.SetValue(Canvas.LeftProperty, Convert.ToDouble(j * Point_Width));
canvas.SetValue(Canvas.TopProperty, Convert.ToDouble(i * Point_Height));
//canvas.MouseLeftButtonUp += new MouseButtonEventHandler(canvas_MouseLeftButtonUp);
chess = new ChessObject(canvas);
chess.ObjectClick += new RoutedEventHandler(chess_ObjectClick);
arrayChessChild[i, j] = chess;
LayoutRoot.Children.Add(arrayChessChild[i, j].ImgContainer);
}
}
}3.定義對象的單擊事件

Code
void chess_ObjectClick(object sender, RoutedEventArgs e)
{
if (!(sender is ChessObject))
return;
ChessObject chess = sender as ChessObject;
if (chess.IsFill)
return;
if (index % 2 == 1)
{
ImageBrush img = new ImageBrush();
img.ImageSource = new BitmapImage(new Uri("pngs/black.png", UriKind.Relative));
chess.ImgContainer.Background = img;
chess.IsPrevious = true;
}
else
{
ImageBrush img = new ImageBrush();
img.ImageSource = new BitmapImage(new Uri("pngs/white.png", UriKind.Relative));
chess.ImgContainer.Background = img;
chess.IsPrevious = false;
}
chess.IsFill = true;
if (IsOver() == 1)
{
System.Windows.Controls.ChildWindow childwindow = new ChildWindow();
childwindow.Content = "黑方獲得比賽的勝利!";
childwindow.Title = "比賽結束";
childwindow.Closed += new EventHandler(childwindow_Closed);
childwindow.Show();
//System.Windows.Browser.HtmlPage.Window.Alert("black success.");
}
else if (IsOver() == 0)
{
System.Windows.Controls.ChildWindow childwindow = new ChildWindow();
childwindow.Content = "白方獲得比賽的勝利!";
childwindow.Title = "比賽結束";
childwindow.Closed += new EventHandler(childwindow_Closed);
childwindow.Show();
//System.Windows.Browser.HtmlPage.Window.Alert("white success.");
//InitContainer();
}
else
index++;
}
void childwindow_Closed(object sender, EventArgs e)
{
InitContainer();
}4.判斷游戲結束的邏輯

Code
/// <summary>
/// 判斷游戲是否結束
/// </summary>
/// <returns></returns>
private int IsOver()
{
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 15; j++)
{
if (arrayChessChild[i, j].IsFill)
{
if (arrayChessChild[i, j].IsPrevious)
{
int successCount = 1;
for (int z = 1; z < 5; z++)
{
if (i + z >= 15)
break;
if ((!arrayChessChild[i + z, j].IsPrevious) || (!arrayChessChild[i + z, j].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i + z, j].IsFill && arrayChessChild[i + z, j].IsPrevious)
successCount++;
if (successCount == 5)
return 1;
}
successCount = 1;
for (int z = 1; z < 5; z++)
{
if (i + z >= 15 || j + z >= 15)
break;
if ((!arrayChessChild[i + z, j + z].IsPrevious) || (!arrayChessChild[i + z, j + z].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i + z, j + z].IsFill && arrayChessChild[i + z, j + z].IsPrevious)
successCount++;
if (successCount == 5)
return 1;
}
successCount = 1;
for (int z = 1; z < 5; z++)
{
if (j + z >= 15)
break;
if ((!arrayChessChild[i, j + z].IsPrevious) || (!arrayChessChild[i, j + z].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i, j + z].IsFill && arrayChessChild[i, j + z].IsPrevious)
successCount++;
if (successCount == 5)
return 1;
}
}
else
{
int successCount = 1;
for (int z = 1; z < 5; z++)
{
if (i + z >= 15)
break;
if ((arrayChessChild[i + z, j].IsPrevious) || (!arrayChessChild[i + z, j].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i + z, j].IsFill && (!arrayChessChild[i + z, j].IsPrevious))
successCount++;
if (successCount == 5)
return 0;
}
successCount = 1;
for (int z = 1; z < 5; z++)
{
if (i + z >= 15 || j + z >= 15)
break;
if ((arrayChessChild[i + z, j + z].IsPrevious) || (!arrayChessChild[i + z, j + z].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i + z, j + z].IsFill && (!arrayChessChild[i + z, j + z].IsPrevious))
successCount++;
if (successCount == 5)
return 0;
}
successCount = 1;
for (int z = 1; z < 5; z++)
{
if (j + z >= 15)
break;
if ((arrayChessChild[i, j + z].IsPrevious) || (!arrayChessChild[i, j + z].IsFill))
{
successCount = 1;
break;
}
if (arrayChessChild[i, j + z].IsFill && (!arrayChessChild[i, j + z].IsPrevious))
successCount++;
if (successCount == 5)
return 0;
}
}
}
}
}
return -1;
}5.還有一個初始化棋盤的函數(shù)

Code
/// <summary>
/// 棋盤圖片填充
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
public Uri FindImg(int i, int j)
{
Uri uri = null;
if (i == 0 && j == 0)
uri = new Uri("pngs/lefttop.png", UriKind.Relative);
else if (i == 0 && j == 14)
uri = new Uri("pngs/righttop.png", UriKind.Relative);
else if (i == 14 && j == 0)
uri = new Uri("pngs/leftbottom.png", UriKind.Relative);
else if (i == 14 && j == 14)
uri = new Uri("pngs/rightbottom.png", UriKind.Relative);
else if (j == 0)
uri = new Uri("pngs/left.png", UriKind.Relative);
else if (i == 0)
uri = new Uri("pngs/top.png", UriKind.Relative);
else if (i == 14)
uri = new Uri("pngs/bottom.png", UriKind.Relative);
else if (j == 14)
uri = new Uri("pngs/right.png", UriKind.Relative);
else
uri = new Uri("pngs/center.png", UriKind.Relative);
return uri;
}鑒于本小蟲水平有限,說不出什么大道理,代碼就簡單介紹到這。
本人的代碼水平有限,也想在平時多積累一些寫代碼的經(jīng)驗,今天把東西放上來獻丑了。。很希望有大俠對我的代碼批評指正,不勝感激
標簽:
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園