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

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

一:效果預覽,先上圖url

這是以前的房間圖片:
在這裏插入圖片描述
今天咱們要裝修成的房間圖片:
在這裏插入圖片描述
再上一張遊戲中的效果圖:
在這裏插入圖片描述spa

二:實現說明.net

1:新增長圖片線程

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

這是圖片的存放文件夾格式:
在這裏插入圖片描述code

2:裝修房間須要增長的元素blog

增長的元素有:遊戲

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

三:代碼實現[WCF端]圖片

1:WCF端代碼:實體修改

WCF端:Player玩家實體

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

        //...省略之前N個實體...
        [DataMember]
        public string Head
        {
            get;
            set;
        }     
    }
 
WCF端:Room房間實體

ExpandedBlockStart.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

ExpandedBlockStart.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

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

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

ExpandedBlockStart.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 [只增長了代碼]

ExpandedBlockStart.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多。 服務端編繹過去後,客戶端注意更新服務引用,接着因爲服務端實體的兩字段被刪除,必然會引起個別小錯誤了。  

相關文章
相關標籤/搜索