Struct

如果是中途的输入,一定是pm已经收回去了,需要送出,除了指定位置(X)是不需要其他信息的
  • int Moves[] 每个技能(对应变身),注意:数组长度未必是4!
  • int OnlyMove 因为xx只能使用xx技能的技能Id(如果是因为专爱道具,Sim端将道具Id作为{1:i}传入),如果是拼命则是165
  • string OnlyKey 因为xx只能使用xx技能的战报key,如果是拼命则是null
  • string Block[] 不能使用技能显示的战报key,能使用则是string.Empty
  • string CantWithdraw 不能把xx收回来的key(扎根/对方特性)
  • int CantWithdraw_pm, CantWithdraw_a 需要发动对方的特性

Default

最初的Default,Origin

Moves[] 和所选的技能相同
Block[] 全部为null
一般第一回合都是Origin
比较讨厌的是替代物特性,会导致第一回合非Origin,也就是非Default,也就是非null

之后的Default,LastRequireInput

与上一次的RequireInput对比,如果完全一样就直接null

Build

使用Predict
每个技能都试一遍
试一下能不能收回来
Only似乎有点无解,只能让Controller提供相关属性

Compress

Overall

第一回合的默认是Origin,以后每回合默认都是LastRequireInput
如果和默认值一模一样就别传太多数据,通知一下需要输入就好
简而言之为了压缩传的是和默认值的diff

Detail

目前的想法是所有字段,有改动则改动,否则null?
对于数组,如果每个都是null,则全部null? --> 定义不严谨...4个技能变成3个技能且前3个技能都相同怎么办...
以及还要考虑不可输入的pm,null的太多了会有重复

Check Input

RequireInput的一大任务是CheckInput

Host

在Host端的Check是十分简单的,因为只有成功失败两个结果,成功则输入,失败直接结束游戏
因为失败直接结束游戏,所以边输入边判断即可

Player

最直观的需求是——每点一次按钮都要有个结果,这个结果可能非常复杂...
Fight --> InputPm(拼命) SelectMove(一般的)
Move --> SelectTarget(多打) InputPm(单打) “只能使用xx”“不能使用xx” (更高级的需求是把用户的尝试记录下来送到客户端作为隐藏战报保存)
Target --> InputPm(单体技能Target为所选位置的X / Target为null)
Pokemon --> InputPm 不能把xx收回来! 对方的特性——不能把xx收回来!
Undo --> 返回上一头精灵
如果是InputPm,有两种情况,如果是最后一个需要输入的精灵则Input,否则选择下一个精灵
以及Targets界面,遇到“诅咒”那样的技能好像要加字段了...

Last edited Aug 1, 2012 at 5:02 PM by Snowy, version 2

Comments

No comments yet.