silverlight
发布时间:2022-05-03 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight+WCF 新手实例 象棋 棋手颜色(二十九),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示 在上一节Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八),我们在最后聊天对话中看到,双方棋手用的竟然都是红色,这个...... 这节,我们来让双方使用不同的颜色下棋: 我们通过什么来决定棋手的颜色?其实,Player玩家属性里,不就有一个ColorValue么,
有了这个,一切就好办了。 我
在线演示地址:
Silverlight+WCF 新手实例 象棋 在线演示
在上一节Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八),我们在最后聊天对话中看到,双方棋手用的竟然都是红色,这个......
这节,我们来让双方使用不同的颜色下棋:
我们通过什么来决定棋手的颜色?其实,Player玩家属性里,不就有@L_450_3@ColorValue么,有了这个,一切就好办了。
我们回到Chess象棋类里,增加@L_450_3@属性,玩家颜色,同时,扩展一下构造函数,增加传参:
///
<sumMary>
///
象棋 by 路过秋天
///
http://cyq1162.cnblogs.com
///
</sumMary>
public
class
Chess
{
///
<sumMary>
///
玩家的棋子颜色
///
</sumMary>
public
Color PlayerColor
{
get
;
set
;
}
//
...省略其它属性...
public
Chess(Panel control,Color playerColor)
{
PlayerColor
=
playerColor;
//
...省略其它赋值属性...
}
//
...省略其它N行代码...
}
增加的代码就两行,是相当的简洁的,有了个家玩家属性,那我们在哪实现玩家颜色变化的呢?
看,我们回到了初始化棋子的地方,只是增加了@L_450_3@if语句,只有if语句的才是新增加的哦。轻松搞定了:
@H_479_
197@
///
<sumMary>
///
初始化棋子
///
</sumMary>
public
void
InitChessman()
{
int
[] up
=
new
[] {
0
,
2
,
3
};
//
棋子在上面
int
[] down
=
new
[] {
9
,
7
,
6
};
//
棋子在下面
if
(PlayerColor
==
Colors.black)
//
这里是新增加的
{
//
黑色在下
up
=
new
[] {
9
,
6
};
down
=
new
[] {
0
,
3
};
}
CreateBlackChessman(up);
CreateRedChessman(down);
ShowChessman();
}
当然了,那个if语句其实就是交换数组了,这里用最简单的方式实现了:"那个,不用第三个变量,怎么实现两值的交换的问题"。
构造函数发生变化了,我们要回到实例化Chess类的地方Chess.xaml.cs,多传@L_450_3@参数:
由于玩家只有颜色值,我们要把它变成颜色Color,所以多了@L_450_3@转换函数。
@H_616_395@
public
partial
class
Chess : UserControl
{
ChessNewInstance.Chess chess;
//
这里我们同时把它提到全局对象
public
Chess()
{
initializeComponent();
chess
=
new
ChessNewInstance.Chess(canvasRoot,GetColor(App.player.Colorvalue));
//
就这里变化了
chess.InitBoard();
chess.InitChessman();
canvasRoot.Width
=
chess.board.Width;
canvasRoot.Height
=
chess.board.Height;
App.chess
=
chess;
//
为全局对象赋值
}
private
Color GetColor(
int
colorValluE)
{
switch
(colorValluE)
{
case
1
:
return
Colors.Red;
case
2
:
return
Colors.black;
default
:
return
Colors.blue;
}
}
}
大伙别问我为什么:“为啥构造函数里不直接传颜色值,而要传Color呢,这样还得转换啊“,这么复杂的问题。
其实呢,这个问题是有由来的,这里就简单说一下:
在一开始呢,我在定义Player属性的时候,是定义Color来传递的,可是最后发现:
WCF里的Color是在System.Drawing下
Silverlight里的Color是在System.Windows.Media下
所以,把Color从WCF往Silverlight里传,直接赋值就会出现问题了,所以呢,就换了ColorValue来传递了
这下大伙明白了吧。
好了,代码写完了,非常非常的简短吧,F5运行看效果了:
看到效果了吧,这下双方所用的颜色就一红一黑了。
OK,本节打完收工!