Silverlight+WCF 网络象棋 基础篇 棋手颜色(二十九)
在上一节 Silverlight+WCF 网络象棋 基础篇 该谁下棋-A下B停(二十八),我们在最后聊天对话中看到,双方棋手用的竟然都是红色,这个......
这节,我们来让双方使用不同的颜色下棋:
我们通过什么来决定棋手的颜色?其实,Player玩家属性里,不就有一个ColorValue么,有了这个,一切就好办了。
我们回到Chess象棋类里,增加一个属性,玩家颜色,同时,
http://www.cyqdata.cn/chess/article-detail-2654
Silverlight+WCF 网络象棋 基础篇 该谁下棋-A下B停(二十八)
上一节,我们实现了“开始”游戏,并互相通知可以开始游戏了;可是我们并没有对棋子进行限制,双方都可以随时的下;
所以,接下来我们要实现对棋子的限制,A下B停,B下A停,同时,要传递棋步,对方收到棋步,要反转棋步坐标,还得自动移动棋子。
说了这么多,我们从哪里开始下手呢?其实我也想了很久......
让我们回到Chess象棋类,于是添加一个属性IsCanMove
//象棋类 
http://www.cyqdata.cn/chess/article-detail-2653
Silverlight+WCF 网络象棋 基础篇 主界面-事件区-游戏开始(二十七)
一开始,还是截张小图过来吧,每次截图都要花很多时间上传的。
好了,我们现在知道,事件区其实就是几个按钮了,本节实现第一个按钮,“开始”游戏。别看就一个按钮,要做的事情可不少:
先总体说说这按钮要做什么事情:
1。双方进入座位时,要提示我可以点“开始”游戏;
2。我点开始“开始”,要WCF通讯,提示对方。
3。对方收到“开始游戏请求”,回复“同意/拒绝”;
4。我根据对方的回复,初
http://www.cyqdata.cn/chess/article-detail-2652
Silverlight+WCF 网络象棋 基础篇 主界面-控件消息传递(二十六)
这节我们实现上节没实现的纠结的进出房间的消息提示
我们清楚的知道,我们每个区都是一个用户控件,我们的在线用户进出时,得到聊天区域显示信息,这就涉及到用户控件之间的消息传递了:
在线用户区说:反正我是没权直接去实时聊天区写东西,没办法,找中介委托设置一下了。
那谁是中介呢?委托谁呢?当然是衣食父母Index.xaml了,是它撑着整个家庭的。
好了,知道中介了,那我就签个委托书了:
回到
http://www.cyqdata.cn/chess/article-detail-2651
Silverlight+WCF 网络象棋 基础篇 主界面-实时聊天区(二十五)
这节我们实现“实时聊天区”:
这节内容几乎和上节一个样的逻辑
1:新建一个用户控件:就叫:Chat.xaml,用来在线聊天
2: 界面拖一个Border到Index.xaml,现在界面上有三个Border了,第三个chatBoard就是新添加进去的了。宽和高设置为230*280了
<Grid x:Name="LayoutRoot" Background=
http://www.cyqdata.cn/chess/article-detail-2650
Silverlight+WCF 网络象棋 基础篇 主界面-在线用户区(二十四)
这节我们来实现在线用户区的显示,把上两节介绍那张图再弄来,看在线用户区是哪块:
一眼扫过看到了,是第四区,现在开始了,还是上次下棋区域一样的逻辑,往Index.xaml里拉一个Board控件,然后后台写两行代码代码一下。
当然了,得新建一个用户控件:就叫:OnlineUser.xaml,好,空白的在线用户建完了,下面还是两步实现加载:
1:界面拖一个Board到Index
http://www.cyqdata.cn/chess/article-detail-2649
Silverlight+WCF 网络象棋 基础篇 介绍III(二十三)
虽然有在线演示,不过还是要写一个介绍,因为并没有实时更新到在线演示
说是介绍,其实就是阶段进度报告,现在看一下最近的更新吧:
先来总体截一下图看看变化吧:
1.登陆:
增加了初始作者文字显示[没用户时默认文字],和在当前线用户数显示。
我开了三个浏览器窗口才截到这图。
2:房间:
这里从QQ象棋里弄了两张背景图过来,换了一下之前的房间背景,如果是游戏对战中,桌面背景就变成了:
http://www.cyqdata.cn/chess/article-detail-2648
Silverlight+WCF 网络象棋 基础篇 主界面-棋盘区(二十二)
这节我们要布局Index.xaml界面。
首先,我们定义一下全局的宽和高:1000*620[数字差不多就行了]
一堆代码,都是自动生成的,只是改了两个数字,不说大伙也知道改啥数字了。
<UserControl x:Class="NewChessProject.Index" xmlns="http://schemas.mi
http://www.cyqdata.cn/chess/article-detail-2647
Silverlight+WCF 网络象棋 基础篇 获取房间状态列表更新(二十一)
上节是当有用户进入某个房间时,我的某个房间状态被通知,并被通知更新。
这节说说首次进入房间大厅时,我们自己创建了N个房间,默认都是初始状态的,这时我们需要获取服务端的所有已更新的房间状态,
下到本地之后,进行批量更新状态。
于是开始了,首先从服务端开始,我们要获取所有已更新的房间,于是到WCF服务端添加一个方法:
到IService.cs添加方法接口
[Operati
http://www.cyqdata.cn/chess/article-detail-2646
Silverlight+WCF 网络象棋 基础篇 房间状态更新(二十)
这节开始,标题里就去掉"回归WCF通讯应用"几字了。
上节我们成功实现了进入房间,服务端也收到用户进入房间的请求了。
这节,我们服务端收到进入房间请求后,通知在房间大门外的人更新房间状态。
我们要增加一个回调方法,ICallBack接口那,忘记的人回去看看WCF通讯那几篇(十四到十七节)。
方法如下,以前说过了,回调的方法是给客户端实现的,服务端只管调就行了:
using System.ServiceModel;namespace GameService{ interface ICallBack { [OperationContract(IsOne
http://www.cyqdata.cn/chess/article-detail-2570
Silverlight+WCF 网络象棋 基础篇 回归WCF通讯应用-进入房间(十九)
上一节我们讲到登陆时通过WCF,把用户信息传递到远程服务器,并用一个全局泛型字典变量来保存用户列表,登陆后我们转向了房间页面。
这节,我们要通过点击房间上的座位进入主页面(Index.xaml)。
既然要点击房间座位才能进入,我们就得为那房间的座位添加鼠标点击事件了。
我们回到GameRoom.cs找到创建房间的代码,找到Draw函数里,创建红蓝黑三个房间座位的代码,其实就是那三个矩形框Rectangle。
我们在它们被添加到房间之前,添加几个事件:
//添加三个房间点击事件 redChair.MouseLeftButtonDown += new MouseButtonEventHandl
http://www.cyqdata.cn/chess/article-detail-2569
Silverlight+WCF 网络象棋 基础篇 回归WCF通讯应用-登陆(十八)
前四节,我们讲了通讯基础,从这节起,我们回归到项目中来,要将前面的WCF通讯知识应用进来。
我们为Chess项目的解决方案里,再添加WCF应用服务程序
步骤:
1。对着解决方案-》右键-》添加新建项目-》选择WCF应用服务程序-》输入:GameService
2。删除默认的IService1.cs和IService1.svc
3。新建WCF服务,起名为IService
4。把跨域文件clientaccesspolicy.xml复制到项目中去.
5。设置GameService项目属性的特定启动端口为:8686
6。添加引用PollingDuplex.dll
7。修改配置文件,参考十五小节
上面步骤完成了后
我们接下来要添加几个新文件:
1.新添加一个回调接口:ICallBack
对着GameService项目右键-》添加-》新建项->选
http://www.cyqdata.cn/chess/article-detail-2568
Silverlight+WCF 网络象棋 基础篇 WCF通讯轮询(十七)
上节说到:
关于双向通讯,官方提供了N种可以双向的,不过今天要用到的,
是pollingDuplexHttpBinding:一个扩展的轮询机制的双向通讯,当你也可以尝试用上面的通讯方式去试一试。
既然是扩展,就说明默认没有,那我们首先就要添加扩展了,用的是默认官方是提供的DLL,就在我们安装的Silverlight4的目录里:
正常路径为:C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Server\System.ServiceModel.PollingDuplex.dll
这一节我们来实现PollingDuplexHttpBinding,轮询机制的双向通讯。
以下开始内容不上图片,参考 Silverlight+WCF 网络象棋 基础篇 WCF通讯跨域(十五)
我们再开一个项
http://www.cyqdata.cn/chess/article-detail-2567
Silverlight+WCF 网络象棋 基础篇 WCF通讯方式(十六)
本节小讲通讯方式,上两节的我们讲的BasicHttpBinding,是其中的一种基础的通讯方式,
还有一种双向通讯的,专业词汇叫“双工通讯”,不过双工通讯一听起来太以理解,
就好像那个特性“契约”,一听就感觉像卖身契一样让人觉得匪夷所思。
下面全用双向代替双工说话了。
说双向通讯好理解了吧,再简单说就是:客户端可以调用服务端的方法;服务端也可以调用客户端的方法。
对于通讯方式,上两节,我们都是用:BasicHttpBinding,除了这个,还说过还有N种的。
为了说明有多少种,我们这里顺便提一个工具,在以下路径:
开始->所有程序->Microsoft Visual Studio 2010->Microsoft Windows SDK Tools->服务配置编辑器
我们可以通过它来打开WCF相关的config文件。不过呢,每次指定
http://www.cyqdata.cn/chess/article-detail-2566
Silverlight+WCF 网络象棋 基础篇 WCF通讯跨域(十五)
这节我们把WCF独立一个服务出来,不寄放在Web应用程序中。
我们再开一个项目来讲解,上节名称叫Hellow,这节名称起World:
文件—》新建->项目-》Silverlight应用程序-》起名叫:World
确定后还是:World和World.web应用程序,两个项目
我们对着解决方案右键,添加新建项目:建立WCF 服务应用程序->输入名称为:WorldService:
接着我们把默认的Service1.cs和Service1.svc删除:
删除后,我们新建一个新的服务,叫Service.svc
我们提前修改下服务的端口,这样添加服务引用后,不用再改配置文件的端口。
好了,现在我们为接口弄多一个方法叫GetWrold:
同时新建一个实体类MyWorld,用于返回,关于实体类的头顶的上标识,上节说过了就不说了。
[Se
http://www.cyqdata.cn/chess/article-detail-2565
Silverlight+WCF 网络象棋 基础篇 WCF通讯基础(十四)
从此节开始,我们要开始WCF通讯了。
本游戏的只是基于WCF最基础的应用,没有WCF深奥的知识,相关的深奥知识请关注专业的WCF系列文章。
我们先来实现一个Silverlight里调用Hellow的尝试:
我们新建一个新的Silverlight应用程序:文件->新建->项目->Silverlight应用程序->Hellow
建立后就一个Hellow应用程序和一个Helow.web的Web应用程序。
一:我们将WCF集成在Web应用程序中
我们对着Web应用程序右键-》添加->新建项->WCF服务-》起名:Service.svc
回车后,默认生成IService.cs接口和Service.svc/Service.svc.cs文件
我们看一下自动生成的代码:
[ServiceContract]&nbs
http://www.cyqdata.cn/chess/article-detail-2564
Silverlight+WCF 网络象棋 基础篇 游戏房间列表(十三)
热到飚血了。。。
上次创建了一房间了,现在要创建多个房间了。
我们像添加一个Chess类来创建很多棋子一样,现在创建一个Game类来创建很多房间:
Code文件夹右键,添加新建项->类->Game.cs,同样的,名称空间去掉[.Code]
namespace NewChessProject{ /// <summary> /// 游戏 by 路过秋天 /// </summary> public class Game {  
http://www.cyqdata.cn/chess/article-detail-2563
Silverlight+WCF 网络象棋 基础篇 游戏房间(十二)
加快手步,写多一篇,这节来创建游戏房间:
先上一张以前的房间图:
构成啊,就是上面文字,下面三个矩形框:
昨天调整了一下样式,看下新的房间图:
哪个好看点这个很难说的清了,不过新的图应用了新的brush画刷填充,当然了,你也可以用图片填充,后面可以教你怎么用图片,
当然了,为了好看,用图片也不为过的,去QQ游戏大厅截两张小图就搞定了,不过这步就留给大伙自己去截了。
现在开始代码了:
我们要创建游戏房间类了,不过这下我们不用新的类库,也不放在象棋库中,我们直接在Silverlight应用程序中,右键,添加文件夹,
起名:Code:
在Code文件夹右键->添加类-》输入:GameRoom.cs [顺便把名称空间的XXX.Code下的.Code去掉]
/// <summary>  
http://www.cyqdata.cn/chess/article-detail-2562
Silverlight+WCF 网络象棋 基础篇 登陆与转向(十一)
好了,从这节起,我们可能要暂时远离我们的象棋库了,因为我们要开始进入一些周边的事情了。
像登陆啊,登陆后创建房间大厅啊,进入后除了象棋还有用户列表,聊天窗口等等,中间少不了WCF通讯。
好了,开始登陆小节,先上一张小图:
看,多简洁,一个ID一个昵称一个登陆就完了。虽然简洁,可是也会有很多想法的。
不过想法待会再说,新建页面先:
对着Silverlight应用程序右键-》添加新建项-》Silverlight用户控件-》输入:Login.xaml
回车一页面就出来了。
往页面里拉两个TextBlock,两个TextBox,一个Button[双击后就有一个Click事件了],如下:
<Grid x:Name="LayoutRoot" Background="White" Height="144" Width
http://www.cyqdata.cn/chess/article-detail-2561
Silverlight+WCF 网络象棋 基础篇 棋子移动-规则[附加上半盘限制](十)
上上一节,我们对棋子的下半盘棋子做了所有的规则限制,因为我们下棋的总是用下半盘的棋子来下,总没人用上半盘棋来下那么高境界的吧。
不过这节简单追加点代码,让那些企图高境界的人士可以临时性的自己和自己下。
好了,要为上半盘棋子也做限制,所以我们要知道棋子是归属于上半盘还是下半盘的,这里,我们为棋子类Chessman增加一个属性,IsUp,是否上半盘棋,反之就下半盘了。初始为该属性赋值也相当的简单:
/// <summary> /// 棋子默认在上半盘/反之在下半盘 /// </summary>
http://www.cyqdata.cn/chess/article-detail-2560