日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)

發布時間:2025/3/19 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在線演示地址:Silverlight+WCF 新手實例 象棋 在線演示

?

還是那張圖:?

本節實現返回大廳和退出系統:

一:返回大廳,其實很簡單的說,就是轉向房間列表了。

可是,轉向前也有很多事情要處理的:

1:退出前要通知服務器,說我要退出了,不然其它人看到你在房間里占著毛坑又不拉。

2:如果已經在游戲中,你還得先“認輸”

3:沒其它事了,直接就返回大廳了。

二:退出系統,和返回大廳一樣,只是最后結果的轉向不一樣,只是轉向登陸界面。

?

這里就產生第一個問題了,怎么知道自己是在游戲狀態???不能通過說我是坐在紅黑的位置上就是游戲狀態了吧?

我們有游戲“同意”和接收“同意”事件,在那可以知道是否進入游戲。

我們也有游戲“結束”通知,在那可以也知道游戲是否結束。

所以,我們需要增加一個標識,來標識當前是否在游戲中,在哪增加呢?其實呢,原來我是在全局里加的,不過這里認為在Chess象棋類里增加好點。

增加一個屬性,沒什么難度了:

?///?<summary>
????
///?象棋?by?路過秋天
????
///?http://cyq1162.cnblogs.com
????
///?</summary>
????public?class?Chess
????{
????????
///?<summary>
????????
///?是否游戲開始了
????????
///?</summary>
????????public?bool?IsGaming
????????{
????????????
get;
????????????
set;
????????}
????????
//...下面省略N行代碼...
????}

?

接著我們要在“同意”和接收“同意”標識一下這個屬性了:

void?client_NotifyStartGameReceived(object?sender,?GameService.NotifyStartGameReceivedEventArgs?e)
????????{
????????????
//收到消息了應該咋辦
????????????switch?(e.player.AttachInfo)
????????????{
????????????????
case?"0"://通知可以開始游戲
???????????????????
//...省略N行...
????????????????case?"1"://請求開始游戲
?????????????????
//...省略N行...
??????????????????if?(result?==?MessageBoxResult.OK)//同意開始游戲
??????????????????{
??????????????????????btnGameDeuce.IsEnabled?
=?true;
??????????????????????btnGameLose.IsEnabled?
=?true;
??????????????????????App.chess.IsGaming?
=?true;//新加的
??????????????????}
????????????????????
break;
????????????????
case?"10":
????????????????????MessageBox.Show(
"對方拒絕開始游戲",?"游戲通知",?MessageBoxButton.OK);
????????????????????
break;
????????????????
case?"11":
????????????????????MessageBox.Show(
"對方同意開始游戲,請開始下棋",?"游戲通知",?MessageBoxButton.OK);
????????????????????
//...省略N行...
????????????????????App.chess.IsGaming?=?true;//新加的
????????????????????break;
????????????}
????????}

?

還有游戲“結束”通知那里呢?我們先不標識回來了,下節我們處理游戲結束,重置所有狀態時,再一起并處理。

OK,現在,我們可以知道自己是不是正在游戲狀態中了,雙擊“返回大廳”按鈕,和“退出系統”,代碼如下:

//返回大廳
????????private?void?btnBackRoom_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????
if?(App.chess.IsGaming)
????????????{
????????????????btnGameLose_Click(
null,?null);//發送認輸
????????????????App.chess.IsGaming?=?false;
????????????}
????????????App.client.OutRoomAsync(App.player,?App.player.RoomID,?App.player.AttachInfo);
????????????((App)Application.Current).RedirectTo(
new?Room());
????????}
????????
//退出系統
????????private?void?btnLogout_Click(object?sender,?RoutedEventArgs?e)
????????{
????????????
if?(App.chess.IsGaming)
????????????{
????????????????btnGameLose_Click(
null,?null);//發送認輸
????????????????App.chess.IsGaming?=?false;
????????????}
????????????App.client.OutRoomAsync(App.player,?App.player.RoomID,?App.player.AttachInfo);
????????????((App)Application.Current).RedirectTo(
new?Login());
????????}

?

代碼都一樣,只有最后一行沒變化,既然有這么多共同的代碼(4行)咋不抽出來弄到一個函數里去,這個,我們留到優化的時候再處理吧。

在游戲狀態下我們這里匆匆認輸,快速修改游戲標志IsGaming,然后就退出了。

?

到此時,我們就完成了事件里的幾個按鈕事件了,只是還有一點“游戲結束,狀態的重置,還沒處理呢”,這個請看下節。

好了,該F5了,每次寫完,我都要自己先調試通過,才放上來的,大伙對代碼的完整性可以放心的。

調試:

進入房間-》返回大廳-》再進入:異常了:

服務器未提供有意義的回復;這可能是由協定不匹配、會話過早關閉或內部服務器錯誤引起的。

?遇到這問題怎么調試呢?

?把后臺WCF開啟服務,看前臺的命令傳到后臺沒有:

斷點,進去了,WCF端,在如下產生錯誤:截圖如下:

那個Player.RoomID值為0

我們并沒有在roomList記錄房間為0的記錄,所以就報這個錯了,這里我們當然可以添加判斷了,添加if判斷一下在不在,再更改房間人數。

不過這里,我們直接注釋掉好了,這屬性暫時也沒什么用,[大伙還是直接加if判斷了]。

public?static?void?ChangeRoom(Player?player,?int?roomID)
????????{
????????????RemovePlayer(player);
????????????AddPlayer(player,?roomID);
????????????
//roomList[player.RoomID].Count?=?playerList[player.RoomID].Count;
????????????
//roomList[roomID].Count?=?playerList[roomID].Count;
????????}

?

OK,找到問題了,繼續F5運行,重復進入房間,再重復登陸退出房間,終于正常了!

對了,還有對戰中退出房間沒測試,經測試,正常,所以,上圖一張:

我們在返回大廳和退出系統時,按理如果對手是在游戲狀態,應該提示一下的,我們這里沒提示,

所以一點按鈕,就自動認輸退出,這個小細節,大伙自覺加上了。

好了,本節點到為止了。

?

版權聲明:本文原創發表于博客園,作者為路過秋天,原文鏈接:

http://www.cnblogs.com/cyq1162/archive/2010/08/04/1791843.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。