Silverlight+WCF 實戰-網絡象棋最終篇之房間裝修-WCF端(二)

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

上一系列四十篇索引:Silverlight+WCF 新手實例 象棋 專題索引

 

佛靠金裝,人要衣裳,房間也要加金磚。本篇我們來把房間裝修下,讓它看起來專業一點!

 

一:效果預覽,先上圖

 

這是之前的房間圖片:

今天我們要裝修成的房間圖片:

再上一張遊戲中的效果圖:

 

二:實現說明

 

1:新增加圖片

爲了實現裝修,我這裏新增加了3張圖片:
1:房間圖片
2:房間遊戲中狀態的圖片
3:QQ用戶頭像
圖片是從QQ象棋遊戲的安裝程序中Copy過來的,由於Silverlight只支持png等個別種類圖片,所以用ps把圖片另存爲png格式了。

 

這是圖片的存放文件夾格式:

 

2:裝修房間需要增加的元素

增加的元素有:

1:用戶頭像[字段][顯示QQ頭像在房間坐位上]
2:房間遊戲狀態[字段][顯示切換房間背景圖]
3:房間坐位的用戶[字段][QQ頭像上下位置要顯示用戶名]
爲了這些增加的元素,需要改動的代碼,那還真不少,大夥要積極點了。

 

三:代碼實現[WCF端]

 

1:WCF端代碼:實體修改

WCF端:Player玩家實體

05233822_HsIc.gif
     ///   <summary>
    
///  遊戲玩家 by 路過秋天
    
///   </summary>
    [DataContract]
    
public   class  Player
    {

        
// ...省略以前N個實體...
        [DataMember]
        
public   string  Head
        {
            
get ;
            
set ;
        }     
    }

 

WCF端:Room房間實體

05233822_HsIc.gif
    [DataContract]
    
public   class  Room
    {
        
///   ...省略了N行代碼...
         /// //  <summary>
        
/// // 紅色座位是否有人
        
/// //  </summary>
         // [DataMember]
        
// public bool RedInChair
        
// {
        
//     get;
        
//     set;
        
// }
         /// //  <summary>
        
/// // 黑色座位是否有人
        
/// //  </summary>
         // [DataMember]
        
// public bool BlackInChair
        
// {
        
//     get;
        
//     set;
        
// }
         #region  裝飾房間增加的字段
        [DataMember]
        
public  Player RedPlayer
        {
            
get ;
            
set ;
        }
        [DataMember]
        
public  Player BlackPlayer
        {
            
get ;
            
set ;
        }
        [DataMember]
        
public   bool  IsGaming
        {
            
get ;
            
set ;
        }
        
#endregion
    }

 

說明:

房間增加了兩個玩家,和一個遊戲狀態,以前的坐位是否有人字段[RedInChair/BlackInChair],刪了[於是引發了N行要修改的代碼]。

 

OK,字段是簡單改完了,編繹一下,發現近N個的報錯了吧,只能一個一個修改了。

 

2:WCF端:Service.cs代碼修改[被註釋的是原來的代碼,未註釋的是修改的代碼]

方法:EnterRoom

05233822_HsIc.gif
            // if (!room.RedInChair) // 房間的紅色座位有沒有人
            
// {
            
//     room.RedInChair = player.ColorValue == 1;
            
// }
            
// if (!room.BlackInChair) // 房間的黑色座位有沒有人
            
// {
            
//     room.BlackInChair = player.ColorValue == 2;
            
// }
             if  (room.RedPlayer  ==   null   &&  player.ColorValue  ==   1 )
            {
                room.RedPlayer 
=  player;
            }
            
else   if  (room.BlackPlayer  ==   null   &&  player.ColorValue  ==   2 )
            {
                room.BlackPlayer 
=  player;
            }

 

方法:OutRoom

05233822_HsIc.gif
               if  (player.ColorValue  ==   1 ) // 如果退出玩家是紅色座位
                {
                    
// room.RedInChair = false;
                    room.RedPlayer  =   null ;
                }
                
if  (player.ColorValue  ==   2 ) // 如果退出玩家是紅色黑色座位
                {
                    
// room.BlackInChair = false;
                    room.BlackPlayer  =   null ;
                }

 

方法:StartGame [只增加了代碼]

05233822_HsIc.gif
         public   void  StartGame(Player player)
        {
            Notify.Game(player, GameType.Start);
            
// 以下幾行爲新增代碼
             if  (player.AttachInfo  ==   " 11 " ) // 同意開始遊戲,開始線程掃描
            {
                roomList[player.RoomID].IsGaming 
=   true ; // 房間設置正在遊戲中
                Notify.Room(roomList[player.RoomID]); // 通知大夥更新房間狀態
            }
        }

 

方法:EndGame [只增加了代碼]

05233822_HsIc.gif
         public   void  EndGame(Player player)
        {
            Notify.Game(player, GameType.End);
            
// 以下幾行爲新增加的代碼
             if  (player.AttachInfo  ==   " 0 "   ||  player.AttachInfo  ==   " 1 "   ||  player.AttachInfo  ==   " 2 " )
            {
                
// 遊戲結束,清除歷史數據
                roomList[player.RoomID].StepList.Clear();
                roomList[player.RoomID].IsGaming 
=   false ;
                Notify.Room(roomList[player.RoomID]);
// 通知房間改變成遊戲狀態;
            }
        }

說明:

OK,WCF端就修改到這就完成了,接下來是Silverlight客戶端,要調整的代碼N多。
服務端編繹過去後,客戶端注意更新服務引用,接着由於服務端實體的兩字段被刪除,必然會引發個別小錯誤了。

 

結言:

對於Silverlight客戶端,要調整的代碼那是相當的多,所以等下節實現,不然一篇下來太長了。

歡迎有興趣者對本系列持續關注!

 

 

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