在線演示地址:Silverlight+WCF 新手實例 象棋 在線演示git
佛靠金裝,人要衣裳,房間也要加金磚。本篇咱們來把房間裝修下,讓它看起來專業一點!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多。 服務端編繹過去後,客戶端注意更新服務引用,接着因爲服務端實體的兩字段被刪除,必然會引起個別小錯誤了。