在上一節:Silverlight+WCF 實戰-網絡象棋最終篇之非線程阻塞倒計 時窗口(四) 中,我們通過ChildWindow實現了倒計時的窗口,來避免由於由於不點擊確定而造成線程阻塞導致的請求超時問題,而本節將具體實現修改的細節代碼,並附帶最新源碼下載。
另外中間提前插了兩節「對戰視頻」的,歡迎感興趣多多支持,點點推薦:
1:Silverlight+WCF 實戰-網絡象棋最終篇之對戰視頻-上篇[客戶端開啓視頻/註冊編號/接收視頻](五)
2:Silverlight+WCF 實戰-網絡象棋最終篇之對戰視頻-下篇[客戶端發送與服務端中轉](六)
下面進入正文:
說明:
本節我們要處理的,就是出找出所有應用到MessageBox.Show的方法,將之換成自定義的MsgBox.Show方法即可。
爲了調用方便與節流開源,我們將MsgBox提升到全局變量中,即放到App.xaml中。
public
static
MsgBox box
=
new
MsgBox();
//
全局定義
全局看了一下,還好,修改的地方不多,只有兩個頁面,以下爲修改點:
1:Login.xaml 登陸提示修改:
// MessageBox.Show("請輸入暱稱!");
App.box.Show( " 請輸入暱稱! " , " 系統提示 " );
// MessageBox.Show("暱稱不能包含非法字符!");
App.box.Show( " 暱稱不能包含非法字符! " , " 系統提示 " );
說明:
一共有兩行提示的:註釋的是原來的代碼。改點非常少
看一下改造完後的消息提示:
2:EventButton.xaml 事件提示區,這裏相對多一點改動
這裏分兩步修改:
第一步是修改只提示,沒有邏輯判斷分支的語句如下:
//
MessageBox.Show("請求已發送,請等待對方迴應!", "系統消 息",MessageBoxButton.OK);
App.box.Show( " 請求已發送,請等待對方迴應! " , " 系統消息 " );
// MessageBox.Show("對方同意開始遊戲,請開始下棋", "遊戲通 知", MessageBoxButton.OK);
App.box.Show( " 對方同意開始遊戲,請開始下棋! " , " 遊戲通知 " );
// MessageBox.Show("對方拒絕開始遊戲", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 對方拒絕開始遊戲! " , " 遊戲通知 " );
// MessageBox.Show("你的請求已發送,請等待迴應", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 你的請求已發送,請等待迴應! " , " 遊戲通知 " );
// MessageBox.Show("對方拒絕平局", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 對方拒絕平局! " , " 遊戲通知 " );
// MessageBox.Show("雙方平局", "遊戲結果通知", MessageBoxButton.OK);
App.box.Show( " 雙方平局! " , " 遊戲結果通知 " );
// MessageBox.Show(e.player.NickName+" 認輸了!", "遊戲結果通 知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 認輸了! " , " 遊戲結果通知 " );
// MessageBox.Show(e.player.NickName+" 贏了!", "遊戲結果通 知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 贏了! " , " 遊戲 結果通知 " );
// MessageBox.Show(e.player.NickName + " 已進房間,請按開始按鈕開始遊 戲", "遊戲通知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 已進房間,請按開始按鈕開始遊戲 " , " 遊戲通知 " );
App.box.Show( " 請求已發送,請等待對方迴應! " , " 系統消息 " );
// MessageBox.Show("對方同意開始遊戲,請開始下棋", "遊戲通 知", MessageBoxButton.OK);
App.box.Show( " 對方同意開始遊戲,請開始下棋! " , " 遊戲通知 " );
// MessageBox.Show("對方拒絕開始遊戲", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 對方拒絕開始遊戲! " , " 遊戲通知 " );
// MessageBox.Show("你的請求已發送,請等待迴應", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 你的請求已發送,請等待迴應! " , " 遊戲通知 " );
// MessageBox.Show("對方拒絕平局", "遊戲通知", MessageBoxButton.OK);
App.box.Show( " 對方拒絕平局! " , " 遊戲通知 " );
// MessageBox.Show("雙方平局", "遊戲結果通知", MessageBoxButton.OK);
App.box.Show( " 雙方平局! " , " 遊戲結果通知 " );
// MessageBox.Show(e.player.NickName+" 認輸了!", "遊戲結果通 知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 認輸了! " , " 遊戲結果通知 " );
// MessageBox.Show(e.player.NickName+" 贏了!", "遊戲結果通 知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 贏了! " , " 遊戲 結果通知 " );
// MessageBox.Show(e.player.NickName + " 已進房間,請按開始按鈕開始遊 戲", "遊戲通知", MessageBoxButton.OK);
App.box.Show(e.player.NickName + " 已進房間,請按開始按鈕開始遊戲 " , " 遊戲通知 " );
第二步是修改帶邏輯分支的代碼,如下:
A:平手請求原代碼:
case
"
22
"
:
//
平手 請求
MessageBoxResult result = MessageBox.Show( " 對方請求平手,是否同意! " , " 遊戲請求 " , MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK) // 同意
{
App.player.AttachInfo = " 21 " ; // 同意請求標識位設爲21
}
else // 拒絕
{
App.player.AttachInfo = " 20 " ; // 拒絕請求標識位設爲20
}
App.client.EndGameAsync(App.player);
break ;
MessageBoxResult result = MessageBox.Show( " 對方請求平手,是否同意! " , " 遊戲請求 " , MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK) // 同意
{
App.player.AttachInfo = " 21 " ; // 同意請求標識位設爲21
}
else // 拒絕
{
App.player.AttachInfo = " 20 " ; // 拒絕請求標識位設爲20
}
App.client.EndGameAsync(App.player);
break ;
改造成:
case
"
22
"
:
//
平手 請求
App.box.Show( " 對方玩家請求和局,是否同 意? " , " 遊戲結束 " , 10 , AgreeGameDeuce);
break ;
// 方法AgreeGameDeuce
void AgreeGameDeuce( bool result)
{
App.player.AttachInfo = " 2 " + (result ? "" : " 0 " );
App.client.EndGameAsync(App.player);
}
App.box.Show( " 對方玩家請求和局,是否同 意? " , " 遊戲結束 " , 10 , AgreeGameDeuce);
break ;
// 方法AgreeGameDeuce
void AgreeGameDeuce( bool result)
{
App.player.AttachInfo = " 2 " + (result ? "" : " 0 " );
App.client.EndGameAsync(App.player);
}
B:請求開始遊戲原代碼
case
"
1
"
:
//
請求開始遊戲
MessageBoxResult result = MessageBox.Show(e.player.NickName + " 請求開始遊戲,是否同意開始 " , " 遊戲開始 " , MessageBoxButton.OKCancel);
App.player.AttachInfo = (result == MessageBoxResult.OK) ? " 11 " : " 10 " ;
App.client.StartGameAsync(App.player);
if (result == MessageBoxResult.OK) // 同意開始遊戲
{
btnGameDeuce.IsEnabled = true ;
btnGameLose.IsEnabled = true ;
App.chess.IsGaming = true ;
}
break ;
MessageBoxResult result = MessageBox.Show(e.player.NickName + " 請求開始遊戲,是否同意開始 " , " 遊戲開始 " , MessageBoxButton.OKCancel);
App.player.AttachInfo = (result == MessageBoxResult.OK) ? " 11 " : " 10 " ;
App.client.StartGameAsync(App.player);
if (result == MessageBoxResult.OK) // 同意開始遊戲
{
btnGameDeuce.IsEnabled = true ;
btnGameLose.IsEnabled = true ;
App.chess.IsGaming = true ;
}
break ;
改造成:
case
"
1
"
:
//
請求 開始遊戲
App.box.Show(e.player.NickName + " 請求開始遊戲,是否同意開始 " , " 遊戲開始 " , 6 , ConfirmStartGame);
break ;
// 方法:ConfirmStartGame
void ConfirmStartGame( bool result)
{
if (result)
{
App.chess.IsGaming = true ;
btnGameDeuce.IsEnabled = true ;
btnGameLose.IsEnabled = true ;
App.player.AttachInfo = " 11 " ;
}
else
{
App.player.AttachInfo = " 10 " ;
}
App.client.StartGameAsync(App.player); // 應答
}
App.box.Show(e.player.NickName + " 請求開始遊戲,是否同意開始 " , " 遊戲開始 " , 6 , ConfirmStartGame);
break ;
// 方法:ConfirmStartGame
void ConfirmStartGame( bool result)
{
if (result)
{
App.chess.IsGaming = true ;
btnGameDeuce.IsEnabled = true ;
btnGameLose.IsEnabled = true ;
App.player.AttachInfo = " 11 " ;
}
else
{
App.player.AttachInfo = " 10 " ;
}
App.client.StartGameAsync(App.player); // 應答
}
至此,我們終於將所有的消息彈出框改造完了。
看一下改造完後的消息提示:
接着是大家期待已久的源碼下載:--第十階段源碼:點擊下載[別忘了 留下言推薦下哦^-^]
最後:謝謝大家對本系列的喜歡,謝謝支持~
PS:傳說點一下推薦會有10個園豆,喜歡麻煩點一下「推薦」,thank you very much!!