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玩家实体


    /// <summary>
    /// 游戏玩家 by 路过秋天
    /// </summary>
    [DataContract]
    public class Player
    {

        //...省略以前N个实体...
        [DataMember]
        public string Head
        {
            get;
            set;
        }     
    }

 

WCF端:Room房间实体


    [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


           //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


               if (player.ColorValue == 1)//如果退出玩家是红色座位
                {
                    //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]);//通知大伙更新房间状态
            }
        }

 

方法: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]);//通知房间改变成游戏状态;
            }
        }

说明:

OK,WCF端就修改到这就完成了,接下来是Silverlight客户端,要调整的代码N多。
服务端编绎过去后,客户端注意更新服务引用,接着由于服务端实体的两字段被删除,必然会引发个别小错误了。

 

结言:

对于Silverlight客户端,要调整的代码那是相当的多,所以等下节实现,不然一篇下来太长了。

欢迎有兴趣者对本系列持续关注!

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/10/13/1849840.html

时间: 2024-09-05 05:22:46

Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二)的相关文章

Silverlight+WCF 实战-网络象棋最终篇之房间装修-Silverlight端[带第九阶段源码](三)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上一系列四十篇索引:Silverlight+WCF 新手实例 象棋 专题索引     本篇紧接着上一篇:Silverlight+WCF 实战-网络象棋最终篇之房间装修-WCF端(二) 继续为房间进行如下的装修:   代码实现[Silverlight端] 说明: 由于更换背景引入图片,房间的属性发生了较大的变化,由此引发了客户端房间类较大的改动.     1:Silverlight端:GameRoom类大调整[被注释的是原来的

Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)

本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)    一:对战视频 简单原理 略,内容见上篇.   二:对战视频 步骤解析: 略,内容见上篇.   三:对战视频 具体实施 1:如何打开视频 略,内容见上篇.   2:Silverlight如何使用Socket进行通讯 2.1:与远程建立链接: 2.2:注册编号[这里的规则是"房间号+棋手颜色值"] 2.3:开新线程,等待接收对方视频 2.4:将视频显示出来,

Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)

前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)  之后, 是一些代码修改,会比较枯燥,所以没接着写,不过有昨天有网页表示对象棋在线演示中的 对战视频 感兴趣,希望可以提前看到代码,所以本次就提前写里面的对战视频这一块. 由于对战视频采用控制台程序,并没有在服务器运行,所以在线演示版本里一进入显示是显示"未链接"的提示. 作者:路过秋天 博客:ht

Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示-状态重置(九)

上节留下的问题: 在上一节:Silverlight+WCF 网络象棋 终极篇 解决重复的消息提示(八) 中,我们解决了重复登陆时产生的多次消息的重复提示. 不过由此优化产生的另一个问题:全局只有一个实例,在来回的切换房间或进出时,需要重置状态,我们这节来解决这个问题.     在上节的,我留下了几行这样的注释代码: //loginObj.Reset();//roomObj.Reset();//indexObj.Reset();   本节就顺路把这三个注册的方法给实现了: 1:loginObje.

Silverlight+WCF 实战-网络象棋最终篇之十字轨迹(一)

前言 继之前Silverlight+WCF 新手实例 象棋系列四十篇之后,一个多月的时间都在写CYQ.Data框架系列[CYQ.Data 轻量数据层之路 框架开源系列 索引], 让各位对该Silverlight+WCF 象棋系列有兴趣的网友久候了,上一系列详见:[Silverlight+WCF 新手实例 象棋 专题索引] 今天开始就在之前四十篇续上,直到把 [Silverlight+WCF 新手实例 象棋 在线演示] 上的最新代码写完,谢谢支持!   乱七杂八说两句: 一个多月没碰VS2010了

Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)

前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我们将对其进行一小步一小步的优化,来避免一些明显容易引发的错误.   感知一下最原始的消息弹出框如下图:     一:传统消息框,容易引发命案   1:原始的消息框,是线程阻塞类型的,很容易引发超时问题 线程阻塞?怎么理解? 简单的说就是,WCF服务端给客户端发送了消息提示之后,一直进入等待状态,直到

Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)

前言: 最近有网友经常会问,在跟着做象棋对战的通讯中,在重复退出进入的时候,消息会重复出现,本节就这问题进行解说与优化.   一:分析问题产生的原因?   1:首先看App.xaml,里面定义了一个全局客户端回调: public static GameService.ServiceClient client;//回调的客户端   并且这个回调我们全局只实例化一次,并且默认加载时定位到登陆页面: private void Application_Startup(object sender, Sta

Silverlight+WCF 新手实例 象棋 该谁下棋-A下B停(二十八)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   上一节,我们实现了"开始"游戏,并互相通知可以开始游戏了:可是我们并没有对棋子进行限制,双方都可以随时的下: 所以,接下来我们要实现对棋子的限制,A下B停,B下A停,同时,要传递棋步,对方收到棋步,要反转棋步坐标,还得自动移动棋子.   说了这么多,我们从哪里开始下手呢?其实我也想了很久...... 让我们回到Chess象棋类,于是添加一个属性IsCanMove //象棋类 by 路过秋天public clas

Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七)

本专题出产简单原由: 一开始的初衷,只是想写个简单的单机BS人机对战版的,开始还下了点AI算法看看的: 但是写到最后,都写成了通讯版本的对战了,只因中间不小心看到了WCF的相关内容,顺便加了进来; 最后就定局了,反正新手实例,能加多点内容就加多点了. 关于原始初衷,后期再补上了.       好了,先上几个附加索引: 1:Silverlight+WCF 新手实例 象棋 在线演示 2:Silverlight+WCF 简单部署问题集 3:Silverlight4 ListBox bug 4:Silv