在线演示地址: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多。 服务端编绎过去后,客户端注意更新服务引用,接着因为服务端实体的两字段被删除,必然会引起个别小错误了。