Silverlight+WCF 网络象棋 基础篇 房间状态更新(二十)
这节开始,标题里就去掉"回归WCF通讯应用"几字了。
上节我们成功实现了进入房间,服务端也收到用户进入房间的请求了。
这节,我们服务端收到进入房间请求后,通知在房间大门外的人更新房间状态。
我们要增加一个回调方法,ICallBack接口那,忘记的人回去看看WCF通讯那几篇(十四到十七节)。
方法如下,以前说过了,回调的方法是给客户端实现的,服务端只管调就行了:
using System.ServiceModel;namespace GameService{ interface ICallBack { [OperationContract(IsOne
http://cyqdata.cn/chess/article-detail-2570
Silverlight+WCF 网络象棋 基础篇 回归WCF通讯应用-进入房间(十九)
上一节我们讲到登陆时通过WCF,把用户信息传递到远程服务器,并用一个全局泛型字典变量来保存用户列表,登陆后我们转向了房间页面。
这节,我们要通过点击房间上的座位进入主页面(Index.xaml)。
既然要点击房间座位才能进入,我们就得为那房间的座位添加鼠标点击事件了。
我们回到GameRoom.cs找到创建房间的代码,找到Draw函数里,创建红蓝黑三个房间座位的代码,其实就是那三个矩形框Rectangle。
我们在它们被添加到房间之前,添加几个事件:
//添加三个房间点击事件 redChair.MouseLeftButtonDown += new MouseButtonEventHandl
http://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://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://cyqdata.cn/chess/article-detail-2567
Silverlight+WCF 网络象棋 基础篇 WCF通讯方式(十六)
本节小讲通讯方式,上两节的我们讲的BasicHttpBinding,是其中的一种基础的通讯方式,
还有一种双向通讯的,专业词汇叫“双工通讯”,不过双工通讯一听起来太以理解,
就好像那个特性“契约”,一听就感觉像卖身契一样让人觉得匪夷所思。
下面全用双向代替双工说话了。
说双向通讯好理解了吧,再简单说就是:客户端可以调用服务端的方法;服务端也可以调用客户端的方法。
对于通讯方式,上两节,我们都是用:BasicHttpBinding,除了这个,还说过还有N种的。
为了说明有多少种,我们这里顺便提一个工具,在以下路径:
开始->所有程序->Microsoft Visual Studio 2010->Microsoft Windows SDK Tools->服务配置编辑器
我们可以通过它来打开WCF相关的config文件。不过呢,每次指定
http://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://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://cyqdata.cn/chess/article-detail-2564
Silverlight+WCF 网络象棋 基础篇 游戏房间列表(十三)
热到飚血了。。。
上次创建了一房间了,现在要创建多个房间了。
我们像添加一个Chess类来创建很多棋子一样,现在创建一个Game类来创建很多房间:
Code文件夹右键,添加新建项->类->Game.cs,同样的,名称空间去掉[.Code]
namespace NewChessProject{ /// <summary> /// 游戏 by 路过秋天 /// </summary> public class Game {  
http://cyqdata.cn/chess/article-detail-2563
Silverlight+WCF 网络象棋 基础篇 游戏房间(十二)
加快手步,写多一篇,这节来创建游戏房间:
先上一张以前的房间图:
构成啊,就是上面文字,下面三个矩形框:
昨天调整了一下样式,看下新的房间图:
哪个好看点这个很难说的清了,不过新的图应用了新的brush画刷填充,当然了,你也可以用图片填充,后面可以教你怎么用图片,
当然了,为了好看,用图片也不为过的,去QQ游戏大厅截两张小图就搞定了,不过这步就留给大伙自己去截了。
现在开始代码了:
我们要创建游戏房间类了,不过这下我们不用新的类库,也不放在象棋库中,我们直接在Silverlight应用程序中,右键,添加文件夹,
起名:Code:
在Code文件夹右键->添加类-》输入:GameRoom.cs [顺便把名称空间的XXX.Code下的.Code去掉]
/// <summary>  
http://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://cyqdata.cn/chess/article-detail-2561
Silverlight+WCF 网络象棋 基础篇 棋子移动-规则[附加上半盘限制](十)
上上一节,我们对棋子的下半盘棋子做了所有的规则限制,因为我们下棋的总是用下半盘的棋子来下,总没人用上半盘棋来下那么高境界的吧。
不过这节简单追加点代码,让那些企图高境界的人士可以临时性的自己和自己下。
好了,要为上半盘棋子也做限制,所以我们要知道棋子是归属于上半盘还是下半盘的,这里,我们为棋子类Chessman增加一个属性,IsUp,是否上半盘棋,反之就下半盘了。初始为该属性赋值也相当的简单:
/// <summary> /// 棋子默认在上半盘/反之在下半盘 /// </summary>
http://cyqdata.cn/chess/article-detail-2560
Silverlight+WCF 网络象棋 基础篇 棋子移动-规则[将、马、士、相、炮](八)
这节来完成剩下五个种子的规则。
先来将吧
将:只能走一步,而且只能在九宫内行走
看代码,还是和兵的一个样。
if (Math.Abs(y2 - y1) + Math.Abs(x2 - x1) != 1)//只能走一步 {
http://cyqdata.cn/chess/article-detail-2558
Silverlight+WCF 网络象棋 基础篇 棋子移动-规则[兵、车](七)
上两节实现了棋子的两种走法:吃子和没移动到线交叉点。
不过我们都是没有规则的走,这节为棋子的走法增加规则,棋的规则我就不多说了,基本要找个不会下象棋的很难,就是找到的估计也不会看这文章。
当我们移动棋子的时候,总是要判断一下移动是不是合规则的,合规则的才让下,不合规则的就不能下了,什么马象田马日车炮跑,将军卫士陷九宫,[本人涅造句子]之类的。
好了,原始冲动,新建棋子规则类,也是本棋子裤的最后一个类了:
对着项目内裤右键-》添加类->输入:ChessRule.cs。
/// <summary> /// 棋子规则-by 路过秋天 /// </summary> public&
http://cyqdata.cn/chess/article-detail-2557
Silverlight+WCF 网络象棋 基础篇 棋子移动-线交叉点(六)
上一节,我们给棋子赋于了鼠标点击事件,并通过故事板Storyboard 来移动棋子,同时实现了吃棋子。
现在我们在实现鼠标在棋盘上点击,然后棋子就移动到那去。
好了,鼠标在棋盘上点击,这里要为点击的棋盘,其实就是最外面那个Panel容器啦,还是加上一个MouseLeftButtonDown事件。
我们回到Chess类,因为这里是第一手Canvas传进来的地方,我们在Chess的构造函数里,为Panel添加这一事件
public Chess(Panel control) { control.MouseLef
http://cyqdata.cn/chess/article-detail-2556
Silverlight+WCF 网络象棋 基础篇 吃子(五)
上一节,我们的棋子就是一个Canvas,里面add进了一个Ellipse圆圈和TextBlock字:
想想我们是怎么下棋的,要先选中棋子吧,选中后,随便找个地方点,棋就会自动移过去。
所以,这里就产生了两件事,一是选中,二是移动。
要选中,其实就是选中棋子,选中棋子就是选中Canvas了。
于是,我们为Canvas增加一个鼠标点击事件。
让我们回到棋子类Chessman的Draw方法里,为chessman添加一个MouseLeftButtonDown事件,于是代码变成了
private void Draw() {  
http://cyqdata.cn/chess/article-detail-2555
Silverlight+WCF 网络象棋 基础篇 棋子定位与象棋类(四)
上节创建显示了一颗棋子,由于没有margin属性,所以只能靠边站。
现在,我们创建一个象棋类,让它包括棋盘和棋子,同时附加几个常用函数。
还是对着Silverlight类库项目右键添加类:Chess.cs
/// <summary> /// 象棋 by 路过秋天 /// </summary> public class Chess { }
既然要包括象棋当然是要包括棋盘和棋子了,于是我们为之加两个属性,棋子有很多颗,所以用List列表。
/// &
http://cyqdata.cn/chess/article-detail-2554
Silverlight+WCF 网络象棋 基础篇 棋子(三)
棋盘上有棋子,棋子应该还有一些属性,按原始冲动新建一个棋子类。
上google翻译下棋子E文叫什么,查到了叫Chessman,于是对着项目右键添加一个Chessman.cs
/// <summary> /// 棋子类 by 路过秋天
///http://cyq1162.cnblogs.com/ /// </summary> public class Chessman { }
乱七八糟:
想了想,要画棋子还是找图片
http://cyqdata.cn/chess/article-detail-2552
Silverlight+WCF 网络象棋 基础篇 棋盘(二)
1:先新建一个和棋子相关的类库
打开VS2010后->新建->项目->Silverlight类库,名称就定为"ChessLib"
新建一个类名为Board.cs,棋盘类
棋盘类
using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Wind
http://cyqdata.cn/chess/article-detail-2551
Silverlight+WCF 网络象棋 基础篇 介绍(一)
先发一下目前实例情况的截图:
1:登陆界面:
2:进入房间大厅
三种颜色:红色为红色玩家,黑色为黑色玩家,蓝色为主旁观者。点击就进去。
3:点击红色进入主界面
目前缺少系统消息文字输出,棋谱信息,棋谱回放,聊天窗口。及后期加入单机对战。
4:另一浏览器窗口黑色玩家登陆。
5:黑色玩家进入游戏大厅
此时红色进入的位置已变成蓝色,点击的后会提示该位置已有玩家。
6:黑色玩点黑色块进去
7:此时红色家收到提示,并可以开始游戏,同时房间信息会自动更新。
开始按钮开户,点击发送游戏开始请求。
8:对方收到游戏开始请求
9:按确认开始游戏,[按取消拒绝游戏],同时对方收到通知。
10:移动棋子,同时对方棋子会自动移动
截图就先上到这里了,下面会一步步按做开源讲解实例
本次实例用的是V
http://cyqdata.cn/chess/article-detail-2550