棋盤上有棋子,棋子應該還有一些屬性,按原始衝動新建一個棋子類。
上google翻譯下棋子E文叫什麼,查到了叫Chessman,於是對着項目右鍵添加一個Chessman.cs
///
<summary>
///
棋子類 by 路過秋天
亂七八糟:
想了想,要畫棋子還是找圖片好,圖片也不是不好找,網上一搜還是有的,只是圖片啊,算了,還是畫棋子了,反正棋盤也是畫出來的。於是想了想怎麼畫,先畫一個圓圈,裏面再畫一個字。圓圈好說了,有個Ellipse類,設一下屬性就得了。畫字,於是又朝GDI+的方向想了,找什麼DrawString,飛了半天也找不到方向,沒辦法,最後塵埃落定到了TextBlock上了。
這棋子都要有什麼了,想了想,基本上得有的就是:
Name,有個名字,叫「兵」,「炮」,之類的名字
Color,不是紅就是黑色了
Radius,棋子半徑,這棋子總有個大小。
InitPoint,棋子的座標位置
MovePoint,棋子總得會移動,移動後的位置。
好了,在類裏敲入「prop"按兩下Tab鍵,寫好類型,按下Tab,起好名稱,回車,一個屬性就寫完了,繼續重複,於是有了以下代碼:
///
<summary>
///
棋子類
///
</summary>
public
class
Chessman
{
///
<summary>
///
棋子名稱
///
</summary>
public
string
Name
{
get
;
set
;
}
///
<summary>
///
棋子顏色
///
</summary>
public
Color Color
{
get
;
set
;
}
///
<summary>
///
棋子半徑
///
</summary>
public
double
Radius
{
get
;
set
;
}
///
<summary>
///
棋子數組座標
///
</summary>
public
Point InitPoint
{
get
;
set
;
}
///
<summary>
///
移動後數組座標
///
</summary>
public
Point MovePoint
{
get
;
set
;
}
}
我們再加個構造函數初始化一下屬性的數據
public
Chessman(
double
x,
double
y,
double
radius, Color color,
string
name)
{
InitPoint
=
new
Point(x, y);
MovePoint
=
InitPoint;
Radius
=
radius;
Color
=
color;
Name
=
name;
}
好啦,我們要畫棋子了
參考下棋盤的畫法,我們新增加了兩個函數,一個Panel容器是要的了。DrawIn用於外部調用了。
代碼
Panel container;
public
void
DrawIn(Panel control)
{
container
=
control;
Draw();
}
private
void
Draw()
{
//
這裏實現畫啦
}
怎麼畫怎麼畫,急啦啦。
想啦想,要畫一個圈,又要畫一個字,這兩個還得組合成一個。於是新建一個Canvas,再把兩個放到Canvas裏面。這樣把Canvas當成棋子。因爲棋子遲早是要移動的,你不能只移動個圓圈,或移動一個字吧。
好了,看下圓圈的代碼,基本就是賦些屬性了事了:
Ellipse elp
=
new
Ellipse()
{
Width
=
Radius
*
2
,
Height
=
Radius
*
2
,
Stroke
=
new
SolidColorBrush(Color),
Fill
=
new
SolidColorBrush(Color),
Opacity
=
15
};
好了,再看下文字的代碼,又是賦了一堆屬性值了事,那個margin值還真不好調的呢,對的不是很齊,將就點了:
TextBlock text
=
new
TextBlock()
{
TextAlignment
=
TextAlignment.Center,
Foreground
=
new
SolidColorBrush(Colors.White),
Text
=
Name,
FontFamily
=
new
FontFamily(
"
宋體
"
),
FontSize
=
Radius,
FontWeight
=
FontWeights.Bold,
Margin
=
new
Thickness(Radius
/
2
-
2
, Radius
/
2
-
2
,
0
,
0
)
};
接下來要New一個Canvas,把它倆加進去,最後把棋子放到容器Panel裏
chessman
=
new
Canvas();
chessman.Children.Add(elp);
chessman.Children.Add(text);
container.Children.Add(chessman);
chessman 的前面咋沒有Canvas,是寫少了?不是了,這裏是把它定義到外面去了,後面應該會用到。
public Canvas chessman;//棋子,這個定義在外面了。
到此,棋子類就差不多了,不過目前少了兩個重點。
1。就是棋子的位置,棋子的位置可以通過Margin屬性來調整,但目前我們先不寫,因爲要把原始座標轉成象素座標,
單獨的棋子類沒法完成這種事,所以留着,待下一篇我們新增加一個Chess象棋類來控制。
2。就是棋子被點擊的事件,下棋你總要先選中棋子的,不選中你就下不了。
這兩個重點我們留到下節再補。
我們到上篇New Board的地方下面再New Chessman一個棋子,看看效果。
在Silverlight應用程序的界面代碼:
public
partial
class
MainPage : UserControl
{
public
MainPage()
{
InitializeComponent();
Board board
=
new
Board();
board.DrawIn(canvas1);
Chessman chessman
=
new
Chessman(
0
,
0
,
15
, Colors.Red,
"
車
"
);
chessman.DrawIn(canvas1);
}
}
運行,看效果圖,一個棋子就出來了:
好了,打完收工。下節再完成重點棋子的位置及點擊事件。
版權聲明:本文原創發表於博客園,作者爲路過秋天,原文鏈接:
http://www.cnblogs.com/cyq1162/archive/2010/07/07/1772792.html