Silverlight+WCF 實戰-網絡象棋最終篇之解決重複的消息提示-狀態重置(九)

上節留下的問題:

在上一節: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方法實現如下:

05233358_tLu7.gif 05233358_RJEz.gif
public void Reset()
{
if (GameRoomList == null )
{
CreateGameRoom(
20 );
}
foreach (GameRoom item in GameRoomList)
{
if (item.BlackPlayer != null || 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:登陸

05233359_Z1nP.jpg

b:進到房間中

05233359_ARz9.jpg

c:接着退出系統

05233400_TlkN.jpg

d:換個名稱重新登陸

05233400_ieyi.jpg

e:重新登陸後進房間的界面

05233401_Qx61.jpg

OK,本節就介紹到這裏了。

 

轉載於:https://my.oschina.net/secyaher/blog/274162