在線演示地址:Silverlight+WCF 新手實例 象棋 在線演示
上一系列四十篇索引:Silverlight+WCF 新手實例 象棋 專題索引
佛靠金裝,人要衣裳,房間也要加金磚。本篇我們來把房間裝修下,讓它看起來專業一點!
一:效果預覽,先上圖
這是之前的房間圖片:
今天我們要裝修成的房間圖片:
再上一張遊戲中的效果圖:
二:實現說明
1:新增加圖片
爲了實現裝修,我這裏新增加了3張圖片:
1:房間圖片
2:房間遊戲中狀態的圖片
3:QQ用戶頭像
圖片是從QQ象棋遊戲的安裝程序中Copy過來的,由於Silverlight只支持png等個別種類圖片,所以用ps把圖片另存爲png格式了。
1:房間圖片
2:房間遊戲中狀態的圖片
3:QQ用戶頭像
圖片是從QQ象棋遊戲的安裝程序中Copy過來的,由於Silverlight只支持png等個別種類圖片,所以用ps把圖片另存爲png格式了。
這是圖片的存放文件夾格式:
2:裝修房間需要增加的元素
增加的元素有:
1:用戶頭像[字段][顯示QQ頭像在房間坐位上]
2:房間遊戲狀態[字段][顯示切換房間背景圖]
3:房間坐位的用戶[字段][QQ頭像上下位置要顯示用戶名]
爲了這些增加的元素,需要改動的代碼,那還真不少,大夥要積極點了。
2:房間遊戲狀態[字段][顯示切換房間背景圖]
3:房間坐位的用戶[字段][QQ頭像上下位置要顯示用戶名]
爲了這些增加的元素,需要改動的代碼,那還真不少,大夥要積極點了。
三:代碼實現[WCF端]
1:WCF端代碼:實體修改
WCF端:Player玩家實體
///
<summary>
/// 遊戲玩家 by 路過秋天
/// </summary>
[DataContract]
public class Player
{
// ...省略以前N個實體...
[DataMember]
public string Head
{
get ;
set ;
}
}
/// 遊戲玩家 by 路過秋天
/// </summary>
[DataContract]
public class Player
{
// ...省略以前N個實體...
[DataMember]
public string Head
{
get ;
set ;
}
}
WCF端:Room房間實體
[DataContract]
public class Room
{
/// ...省略了N行代碼...
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
}
/// // 紅色座位是否有人
/// // </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
//
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;
}
// {
// 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
if
(player.ColorValue
==
1
)
//
如果退出玩家是紅色座位
{
// room.RedInChair = false;
room.RedPlayer = null ;
}
if (player.ColorValue == 2 ) // 如果退出玩家是紅色黑色座位
{
// room.BlackInChair = false;
room.BlackPlayer = null ;
}
{
// room.RedInChair = false;
room.RedPlayer = null ;
}
if (player.ColorValue == 2 ) // 如果退出玩家是紅色黑色座位
{
// room.BlackInChair = false;
room.BlackPlayer = null ;
}
方法:StartGame [只增加了代碼]
public
void
StartGame(Player player)
{
Notify.Game(player, GameType.Start);
// 以下幾行爲新增代碼
if (player.AttachInfo == " 11 " ) // 同意開始遊戲,開始線程掃描
{
roomList[player.RoomID].IsGaming = true ; // 房間設置正在遊戲中
Notify.Room(roomList[player.RoomID]); // 通知大夥更新房間狀態
}
}
{
Notify.Game(player, GameType.Start);
// 以下幾行爲新增代碼
if (player.AttachInfo == " 11 " ) // 同意開始遊戲,開始線程掃描
{
roomList[player.RoomID].IsGaming = true ; // 房間設置正在遊戲中
Notify.Room(roomList[player.RoomID]); // 通知大夥更新房間狀態
}
}
方法:EndGame [只增加了代碼]
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]); // 通知房間改變成遊戲狀態;
}
}
{
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客戶端,要調整的代碼那是相當的多,所以等下節實現,不然一篇下來太長了。
歡迎有興趣者對本系列持續關注!
歡迎有興趣者對本系列持續關注!