IFA2010求助大神级ps前后对比图玩家!

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
请扫描分享到朋友圈随笔 - 400&
评论 - 9384&
&&&&&&&&&&&
在线演示地址:
上上一节,就是二十八节:
我们实现了“开始”游戏后,对棋子的限制,A下B停
这节,我们要实现:B下A停,[同时,传递棋步,对方收到棋步,要反转棋步坐标,自动移动棋子]
所以呢,这节我们要实现的东西是比上上一节相对多一点。
少废话,开始了:
按流程来了,A移动棋子之后,要干点什么事呢?
//-------这是一个AB同样的循环流程-----
1:自己不能再动了,IsCanMove=
2:要记录移动坐标
3:传递坐标给对方
4:对方要接收坐标-&反转坐标[对方的坐标对自己来说,肯定是相反的啦,自己把头反过来看下棋盘就有点清楚了]
5:对方系统自动移动棋子
6:对方的IsCanMove=true
7:然后到对方下棋了。
8:对方下棋之后呢?Go to 1
//-----又回到开始,不断的循环------
我们先来增加一个用于传递棋步类,既然是传递的,当然得在WCF端新建了,回到和Player一样位置[就是DataContract文件夹下了]:
添加文件类名:MoveStep.cs
namespace&GameService{&&&&///&&summary&&&&&///&WCF&传递的棋步&by&路过秋天&&&&///&&&&&///&&/summary&&&&&public&class&MoveStep&&&&{&&&&}}
当了棋步传递使者,自然得属性加身了,看看加了什么属性:
ID:这个用于标识是第几步,好像没怎么用到
Name:名称,是马还是炮
ColorValue:什么颜色的
下面四个一看就知,为什么不用Point传递,和那个ColorValue一样,WCF的Point和Silverlight客户端的名称空间不一样[马走一下]
于是一个一个的敲完就像下面这样了:
using&System.Runtime.Snamespace&GameService
{&&&&///&&summary&&&&&///&WCF&传递的棋步&by&路过秋天&&&&///&&&&&///&&/summary&&&&&public&class&MoveStep&&&&{&&&&&&&&///&&summary&&&&&&&&&///&棋的步数&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&int&ID&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的原始X位置&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&double&FromX&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的原始Y位置&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&double&FromY&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的移动X位置&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&double&ToX&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的移动X位置&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&double&ToY&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的名称&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&string&Name&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&棋的移颜色值&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&int&ColorValue&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&}}
我们习惯了一直都传递Player,所以,为Player加个属性了:
namespace&GameService{&&&&///&&summary&&&&&///&游戏玩家&by&路过秋天&&&&///&&/summary&&&&&[DataContract]&&&&public&class&Player&&&&{&&&&&&&&//...省略其它属性...&&&&&&&&[DataMember]&&&&&&&&public&MoveStep&Step&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&&&&}}
同时啊,同时啊,刚刚想起来-_-...,我们要为房间添加一个棋子列表,记录每步棋步,不然刚进房间的人看西北风的啊。
同时添加了构造函数,初始化一下List,不然Null魂就会老跟着你。
namespace&GameService{&&&&[DataContract]&&&&public&class&Room&&&&{&&&&&&&&public&Room()&&&&&&&&{&&&&&&&&&&&&StepList&=&new&List&MoveStep&();&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&房间的棋谱&&&&&&&&///&&/summary&&&&&&&&&[DataMember]&&&&&&&&public&List&MoveStep&&StepList&&&&&&&&{&&&&&&&&&&&&get;&&&&&&&&&&&&set;&&&&&&&&}&&&&&&&&//...省略下面N个属性...&&&&&&}}
OK,传递使者和两个XX都有了,那我们要在WCF端建立传递和接收的接口了,这下我们只要传递Player来来去去的就行了:
IService.cs添加接口:
namespace&GameService{&&&&[ServiceContract(CallbackContract&=&typeof(ICallBack))]//头顶上这里写明了回调是ICallBack&&&&public&interface&IService&&&&{&&&&&&&//...省略上面N个接口...&&&&&&&&[OperationContract(IsOneWay&=&true)]&&&&&&&&void&MoveStep(Player&player);&&&&}}
ICallBack.cs添加接口:
namespace&GameService{&&&&interface&ICallBack&&&&{&&&&&&&&//...省略上面N个接口...&&&&&&&&[OperationContract(IsOneWay&=&true)]&&&&&&&&void&NotifyMoveStep(Player&player);//通知接收棋步&&&&}}
OK,接着我们一如既往的实现MoveStep接口方法
Service.svc.cs,轻轻松松就完工,四行代码搞定。
&public&void&MoveStep(Player&player)&&&&&&&&{&&&&&&&&&&&&Room&room&=&roomList[player.RoomID];&&&&&&&&&&&&player.Step.ID&=&room.StepList.Count&+&<span style="color: #;&&&&&&&&&&&&room.StepList.Add(player.Step);&&&&&&&&&&&&Notify.Game(player,&GameType.Move);&&&&&&&&}
那个Notify.Game我们上节都有的了,我们回到Notify里补一个Switch里的Case GameType.Move的方法就行了:
&internal&static&void&Game(Player&player,&GameType&type)&&&&&&&&{&&&&&&&&&&&&switch&(type)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&case&GameType.Start://通知对方玩家开始游戏&&&&&&&&&&&&&&&&&&&&//...上上节实现了...&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&case&GameType.Move://通知移动了,房间内人手一份&&&&&&&&&&&&&&&&&&&&foreach&(KeyValuePair&Guid,&Player&&item&in&Service.playerList[player.RoomID])&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&item.Value.CallBack.NotifyMoveStep(player);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&case&GameType.End:&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&}&&&&&&&&}
OK,到此,服务端完成了,编绎,更新引用:
接着我们回到客户端,要开始发送和接收了:
哪里加发送呢?我们棋步在哪里移动,就在哪里发送了
哪里移动呢?想啦啦找啦啦:棋子移动类ChessAction里的MoveTo方法,我们要在里面添加一个移动后触发的事件
可是怎么触发?单独的类里,是拿不到App.Client对象,更别说传递了到WCF了,于是,大哥啊,代理快出来:
还记得以前,不记得回去看看了。
我们在ChessAction里添加一个代理事件:
看,我们定义代理事件之后只增加一句代码,在移动后直接调用,至于怎么实现的,我们全不理,反正有人帮我干这事。
&///&&summary&&&&&///&棋子动作类&by&路过秋天&&&&///&&/summary&&&&&public&class&ChessAction&&&&{&&&&&&&&public&delegate&void&HelpMoveStep(Chessman&chessman,&Point&movePoint);&&&&&&&&public&event&HelpMoveStep&HelpMoveStepE&&&&&&&&&&&&&&&&&&&&&&&public&bool&MoveTo(Chessman&chessman,&Point&moveTo)&&&&&&&&{&&&&&&&&&&&&if&(Rule.IsCanMove(chessman,&moveTo))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&chessman.ReadyMove&=&false;&&&&&&&&&&&&&&&&chessman.chessman.Background&=&null;&&&&&&&&&&&&&&&&PlayMove(chessman,&moveTo);&&&&&&&&&&&&&&&&chessman.MovePoint&=&moveTo;&&&&&&&&&&&&&&&&HelpMoveStepEvent(chessman,&moveTo);//这里增加一句&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&&&}&&&&&&&&&&&&return&false;&&&&&&&&}&&&&&&&&&//...&其它省略N多...&}
OK,我们回到Chess.xaml.cs里,我们要实现做下代理人:
public&Chess()&&&&&&&&{&&&&&&&&&&&//..省略N行...&&&&&&&&&&&&chess.Action.HelpMoveStepEvent&+=&new&ChessNewInstance.ChessAction.HelpMoveStep(Action_HelpMoveStepEvent);&&&&&&&&&&&&App.chess&=&//为全局对象赋值&&&&&&&&}&&&&&&&&void&Action_HelpMoveStepEvent(ChessNewInstance.Chessman&chessman,&Point&moveTo)&&&&&&&&{&&&&&&&&&&&&MoveStep&step&=&new&MoveStep();&&&&&&&&&&&&step.FromX&=&chessman.MovePoint.X;&&&&&&&&&&&&step.FromY&=&chessman.MovePoint.Y;&&&&&&&&&&&&step.ToX&=&moveTo.X;&&&&&&&&&&&&step.ToY&=&moveTo.Y;&&&&&&&&&&&&step.ColorValue&=&chessman.Color&==&Colors.Red&?&<span style="color: #&:&<span style="color: #;&&&&&&&&&&&&step.Name&=&chessman.N&&&&&&&&&&&&App.player.Step&=&//附加棋步&&&&&&&&&&&&App.client.MoveStepAsync(App.player);&&&&&&&&&&&&chess.IsCanMove&=&false;&&&&&&&&}
设置完杂七杂八的参数后,把Step放到Player身上,就传递到服务端了,然后设置一下IsCanMove=
发送棋步就搞完了,接下来要接收棋步了,不过在接收棋上之前,我们要先完成一个函数,反转坐标:
我们回到Chess.cs象棋类里,添加方法,"马走一步",太简单了:
&///&&summary&&&&&&&&&///&反转棋子坐标&&&&&&&&///&&/summary&&&&&&&&&public&Point&ReverseArray(Point&point)&&&&&&&&{&&&&&&&&&&&&point.X&=&<span style="color: #&-&point.X;&&&&&&&&&&&&point.Y&=&<span style="color: #&-&point.Y;&&&&&&&&&&&&return&&&&&&&&&}
别急,我们还要添加一个自动移动的方法:
回到ChessAction.cs里:
需要解释代码么?不需要吧
解释:既然是系统自动移动,就不用判断什么规则了,直接把棋子移过去,如果移动到的另一个点有棋子,就移掉,然后设置一下坐标。
&///&&summary&&&&&&&&&///&系统自动移动棋子&&&&&&&&///&&/summary&&&&&&&&&public&void&AutoMoveTo(Point&from,&Point&to)&&&&&&&&{&&&&&&&&&&&&Chessman&chessman&=&Parent.FindChessman(from);&&&&&&&&&&&&Chessman&eatchessman&=&Parent.FindChessman(to);&&&&&&&&&&&&if&(chessman&!=&null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&PlayMove(chessman,&to);&&&&&&&&&&&&&&&&chessman.MovePoint&=&&&&&&&&&&&&&&&&&if&(eatchessman&!=&null)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&eatchessman.GoToDead();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}
好了,可以接收了,要实现了,眼睛睁大点,回到Chess.xaml.cs:
&public&partial&class&Chess&:&UserControl&&&&{&&&&&&&&ChessNewInstance.Chess&//这里我们同时把它提到全局对象&&&&&&&&public&Chess()&&&&&&&&{&&&&&&&&&&&//...省略N行...&&&&&&&&&&&&App.client.NotifyMoveStepReceived&+=&new&EventHandler&NotifyMoveStepReceivedEventArgs&(client_NotifyMoveStepReceived);&&&&&&&&&&&&App.chess&=&//为全局对象赋值&&&&&&&&&&&&&&&&&&}&&&&&&&&void&client_NotifyMoveStepReceived(object&sender,&NotifyMoveStepReceivedEventArgs&e)&&&&&&&&{&&&&&&&&&&&&if&(App.player.ID&!=&e.player.ID)//非自己&&&&&&&&&&&&{&&&&&&&&&&&&&&&&GameService.MoveStep&step&=&e.player.S&&&&&&&&&&&&&&&&Point&from&=&new&Point(step.FromX,&step.FromY);&&&&&&&&&&&&&&&&Point&to&=&new&Point(step.ToX,&step.ToY);&&&&&&&&&&&&&&&&//转换坐标&&&&&&&&&&&&&&&&if&(e.player.ColorValue&==&<span style="color: #&||&App.player.ColorValue&!=&<span style="color: #)//旁观者&黑色棋子&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&from&=&chess.ReverseArray(from);&&&&&&&&&&&&&&&&&&&&to&=&chess.ReverseArray(to);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&chess.Action.AutoMoveTo(from,&to);&&&&&&&&&&&&&&&&if&(App.player.ColorValue&!=&<span style="color: #)//下棋者&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&chess.IsCanMove&=&true;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&//....省略N行...&&&&}
看清楚,就是转换坐标,然后移动棋子,设置一下IsCanMove。
OKOKOK,代码终于全部写完了,可以F5运行看效果了:
&#8220;马再走一步&#8221;,上面代码棋子没有自动移动,又要调试了,不截图先:
断点一调试,发现接收的点都是一样的,一步步回去查,终于发现在MoveTo方法里添加的一行事件位置不对:
看有位置的那两行,看清楚了。
public&bool&MoveTo(Chessman&chessman,&Point&moveTo)&&&&&&&&{&&&&&&&&&&&&if&(Rule.IsCanMove(chessman,&moveTo))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&chessman.ReadyMove&=&false;&&&&&&&&&&&&&&&&chessman.chessman.Background&=&null;&&&&&&&&&&&&&&&&PlayMove(chessman,&moveTo);&&&&&&&&&&&&&&&&HelpMoveStepEvent(chessman,&moveTo);//这一行要在上&&&&&&&&&&&&&&&&chessman.MovePoint&=&moveTo;//这一行要在下&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&&&}&&&&&&&&&&&&return&false;&&&&&&&&}
OK,现在可以F5看效果了,截图:
OK,本节到此,打完收工!
顺逢周五,打包源码:第六阶段源码:
阅读(...) 评论()您好, []|
切糕与魔兽神乱入!玩家大神级PS少年派
李安导演的电影《少年派的奇幻漂流》上映后,就成了网友们津津乐道的话题,而电影海报也遭到了网友疯狂恶搞,魔兽、切糕、海贼王各种乱入,相当的欢乐,一起来看看吧。
你可能还喜欢
推荐微博:
读完这篇文章后,您心情如何?
(请登录发言,并遵守)
如果你对游戏频道有任何意见或建议,请到交流平台反馈。【】
单机游戏全球网游每日要闻
Copyright & 1998 - 2015 Tencent. All Rights Reserved当前位置&>>&&求助:生活玩家在进入氏族以后的苦恼
求助:生活玩家在进入氏族以后的苦恼
&作者:月下竞倾城 来源:官方论坛
  本人三四混搭垃圾小,石头未满,不充钱不打架,没事就刷,采矿种地跑商,玩三年了,升到了108,买了一个跑商帮,平时就跟老公俩人辛苦地跑商赚钱,打架帮的事从来不敢掺乎,认识的人也不多,就一些和俺差不多的生活玩家。
  以前我们区有两大打架帮,几乎势均力敌,但是由于我们这个区可能比较穷吧,没有特别强力的号,最好的也就是满六了
  去年我们区跟另一个区合区了,区里战火不断,但是跟俺也没啥关系,依旧该咋过就咋过。
  出了,俺不刷龙纹,不去天外,每天还是工资,副本,采矿,种地,跑商。
  7月初,俺在凤鸣镇发呆看风景,有个人邀请俺进氏族,俺想也没想就习惯性的点了同意,然后就进了氏族,当时族里不到100人,是当天刚建的氏族。结果不到一天,氏族满了,跟俺们区天外的霸主结盟了!到周六的时候俺8点半以前没敢上线,等俺上线的时候,发现俺们氏族有城了!不知道是喜是忧!
  后来,为了不被T,氏族里的所有活动俺都参加,矿战,城战,每天时间匆忙起来,生活紧张繁杂,没时间刷副本了,没有自己的时间了,一切活动以氏族为先,俺感觉很累很无奈,但是进入氏族以后好处也很多,属地白拿经验,还有勾天彩拿,每天领红利,刷本氏族的副本可以开专属箱子了,红利用来刷其余的城也有剩余了,总结起来,好处比坏外要多
  可是,由于俺是一个那么垃圾的小峨眉,氏族里的人几乎全不熟悉,在氏族里做什么说什么都没人搭理,申请个副本不加,只能去跟野队刷四城,今天下午刷城的时候被俺区一个大神级的峨眉给宣战了,俺殒命天外。死就死吧,俺从地府爬起来直冲凤鸣镇,结果刚到花海,就被队长给T了!!
  只剩下一城怎么刷呢,门票已经买了,那城自己还不敢去,害怕让敌对氏族看见,俺在凤鸣徘徊中。
  哎,生活玩家加入氏族伤不起啊!
  不进氏族,龙纹升不了星,进了氏族,敌对的人咱也惹不起,天外区内都惹不起,咋办呢?
  是不是生活玩家就不应该给龙纹升星呢?
【游久网()责任编辑:林仔】
  更多阅读推荐
您可能还会喜欢
天龙八部精彩图片
本周热门文章
天龙八部视频欣赏
游戏名称:《新天龙八部》
游戏官网:
游戏类型:大型角色扮演
游戏状态:4月25日资料片“狂战天下”
开发公司:畅游查看: 65|回复: 2
湖中的水草, 积分 21, 距离下一级还需 104 积分
发表于 前天&14:56
RT,例如傲慢之狱1-10关、精英副本神之守护1-4关、神陨之地懒惰掌旗官等等各需要多少攻击破防、命中达标,这些数据我找了好久都查不到,求一个实力级的大神给出各关的最低配置要求,以方便我们这些新手玩家堆属性,在下在这里代表各位非R玩家感激不尽了
发表于 前天&15:00
【活动】有奖攻略征集获奖名单(统计至12.28)
把这个帖子里的所有文章通读一遍,你也就是大神了!
发表于 前天&15:03
您可以借鉴下2L法爷的回复,希望能帮到您
用其它账号登录
我已经看过并同意
用其它账号登录

我要回帖

更多关于 晋江大神级作家 的文章

 

随机推荐