Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)
2014-06-05 00:00
302 查看
上节留下的问题:
在上一节:Silverlight+WCF 网络象棋 终极篇 解决重复的消息提示(八) 中,我们解决了重复登陆时产生的多次消息的重复提示。
不过由此优化产生的另一个问题:全局只有一个实例,在来回的切换房间或进出时,需要重置状态,我们这节来解决这个问题。
在上节的,我留下了几行这样的注释代码:
//
loginObj.Reset();
//
roomObj.Reset();
//
indexObj.Reset();
本节就顺路把这三个注册的方法给实现了:
1:loginObje.Reset()方法的实现,进入Login.xaml.cs中:
public
void
Reset()
{
btnLogin.IsEnabled
=
true
;
}
就一行,把不可用的按钮重置为可用。
2:roomObj.Reset()方法的实现,进入Room.xaml.cs中:
public
void
Reset()
{
game.Reset();
App.client.GetRoomListAsync();
}
代码很简洁,第一行,把游戏房间的状态重置为初始状态,然后重新获取房间的状态。
代码分解:game.Reset()方法,我们进入到Game.cs中添加Reset方法实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/7a656713e9444f46c502cf5c9c0714ce.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/38fa3e868e30c32802d9a84acb3d9ed1.gif)
public
void
Reset()
{
if
(GameRoomList
==
null
)
{
CreateGameRoom(
20
);
}
foreach
(GameRoom item
in
GameRoomList)
{
if
(item.BlackPlayer
!=
null
3ff0
||
item.RedPlayer
!=
null
)
{
item.BlackPlayer
=
null
;
item.RedPlayer
=
null
;
item.IsGaming
=
false
;
item.ReDraw();
}
}
}
把每一个房间重新重置为初始状态了。
3:indexObj.Reset()方法的实现,进入Index.xaml.cs中:
public void Reset()
{
chessControl.Reset();
onlineUserControl.Reset();
chessManualControl.Reset();
eventButtonControl.Reset();
chatControl.Reset();
}
这里代码是比较简单,不过接下来要做的事就多了,每个控件都要去实现一下,当体力活了。
下面为每一个控件实现状态重置方法:
A:棋盘及棋子的重置:chessControl.Reset();
public void Reset()
{
chess.Reset();//这个已经实现了的。
}
因此内部就调用象棋类的重置,分解为:
B:房间在线用户的重置:onlineUserControl.Reset();
public void Reset()
{
App.client.GetPlayerListAsync(App.player.RoomID);
}
重新获取一次用户即可。
C:棋谱的重置:chessManualControl.Reset();
public void Reset()
{
timer.Stop();
moveStepIndex = 0;
tempIsCanMove = false;
App.chessManualPlaying = false;
App.stepList.Clear();
lbChessManual.Items.Clear();
}
D:在线聊天的重置: chatControl.Reset();
public void Reset()
{
lbMsg.Items.Clear();
}
4:回去把那三行注释掉的代码给开启了。
OK,一切就绪,最后运行看下效果,随便点点,运行情况良好,截几张图:
a:登陆
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/c7334ae270f3d79ad4b7a68d933d87b4.jpg)
b:进到房间中
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/47fb14e4ca3cdb36afcee2d033ca893c.jpg)
c:接着退出系统
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/a12fde376674f633f1d7d337d8e41b13.jpg)
d:换个名称重新登陆
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/f485553d059f6f2cee00e1284d3fb3ca.jpg)
e:重新登陆后进房间的界面
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/bb52c95584acf62ef5c14f2fa36f914a.jpg)
OK,本节就介绍到这里了。
在上一节:Silverlight+WCF 网络象棋 终极篇 解决重复的消息提示(八) 中,我们解决了重复登陆时产生的多次消息的重复提示。
不过由此优化产生的另一个问题:全局只有一个实例,在来回的切换房间或进出时,需要重置状态,我们这节来解决这个问题。
在上节的,我留下了几行这样的注释代码:
//
loginObj.Reset();
//
roomObj.Reset();
//
indexObj.Reset();
本节就顺路把这三个注册的方法给实现了:
1:loginObje.Reset()方法的实现,进入Login.xaml.cs中:
public
void
Reset()
{
btnLogin.IsEnabled
=
true
;
}
就一行,把不可用的按钮重置为可用。
2:roomObj.Reset()方法的实现,进入Room.xaml.cs中:
public
void
Reset()
{
game.Reset();
App.client.GetRoomListAsync();
}
代码很简洁,第一行,把游戏房间的状态重置为初始状态,然后重新获取房间的状态。
代码分解:game.Reset()方法,我们进入到Game.cs中添加Reset方法实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/7a656713e9444f46c502cf5c9c0714ce.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/38fa3e868e30c32802d9a84acb3d9ed1.gif)
public
void
Reset()
{
if
(GameRoomList
==
null
)
{
CreateGameRoom(
20
);
}
foreach
(GameRoom item
in
GameRoomList)
{
if
(item.BlackPlayer
!=
null
3ff0
||
item.RedPlayer
!=
null
)
{
item.BlackPlayer
=
null
;
item.RedPlayer
=
null
;
item.IsGaming
=
false
;
item.ReDraw();
}
}
}
把每一个房间重新重置为初始状态了。
3:indexObj.Reset()方法的实现,进入Index.xaml.cs中:
public void Reset()
{
chessControl.Reset();
onlineUserControl.Reset();
chessManualControl.Reset();
eventButtonControl.Reset();
chatControl.Reset();
}
这里代码是比较简单,不过接下来要做的事就多了,每个控件都要去实现一下,当体力活了。
下面为每一个控件实现状态重置方法:
A:棋盘及棋子的重置:chessControl.Reset();
public void Reset()
{
chess.Reset();//这个已经实现了的。
}
因此内部就调用象棋类的重置,分解为:
B:房间在线用户的重置:onlineUserControl.Reset();
public void Reset()
{
App.client.GetPlayerListAsync(App.player.RoomID);
}
重新获取一次用户即可。
C:棋谱的重置:chessManualControl.Reset();
public void Reset()
{
timer.Stop();
moveStepIndex = 0;
tempIsCanMove = false;
App.chessManualPlaying = false;
App.stepList.Clear();
lbChessManual.Items.Clear();
}
D:在线聊天的重置: chatControl.Reset();
public void Reset()
{
lbMsg.Items.Clear();
}
4:回去把那三行注释掉的代码给开启了。
OK,一切就绪,最后运行看下效果,随便点点,运行情况良好,截几张图:
a:登陆
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/c7334ae270f3d79ad4b7a68d933d87b4.jpg)
b:进到房间中
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/47fb14e4ca3cdb36afcee2d033ca893c.jpg)
c:接着退出系统
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/a12fde376674f633f1d7d337d8e41b13.jpg)
d:换个名称重新登陆
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/f485553d059f6f2cee00e1284d3fb3ca.jpg)
e:重新登陆后进房间的界面
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/23/bb52c95584acf62ef5c14f2fa36f914a.jpg)
OK,本节就介绍到这里了。
相关文章推荐
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)
- Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口-应用篇(七)
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口-应用篇(七)
- Silverlight+WCF 实战-网络象棋最终篇之十字轨迹(一)
- Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二)
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口-应用篇(七)
- Silverlight+WCF 实战-网络象棋最终篇之十字轨迹(一)
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)
- Silverlight+WCF 实战-网络象棋最终篇之十字轨迹(一)
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)
- Silverlight+WCF 实战-网络象棋最终篇之房间装修-Silverlight端[带第九阶段源码](三)
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)
- Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二)