黑马程序员技术交流社区

标题: 在飞行棋制作过程中如何实现二次判定? [打印本页]

作者: →Naxxramas←    时间: 2014-4-12 23:39
标题: 在飞行棋制作过程中如何实现二次判定?
比如A将B炸退6格后踩到时空隧道,如何让B继续进入时空隧道的判断?
作者: continue     时间: 2014-4-22 20:23
飞行棋是在控制台下面写的吧,每次绘制A,B的位置的时候不是都有判断吗?A将B炸退后,重新绘制屏幕,此时再判断B的新位置是不是在设有时空隧道的地方,如果有就在从新绘制一次赛。
作者: 黑马-吕老师    时间: 2014-4-24 11:25
问题得到解决后,请重新编辑帖子,把格式设置为【提问结束】,否则不加分哦
作者: 流失的温度0    时间: 2014-4-24 22:31
个人觉得可以用while循环。while(--只要位置上有时空隧道或者其他的情况--) 就执行对应的判定。直到该位置为普通位置则停止判定。
作者: 王运波    时间: 2014-5-7 19:31
          关于飞行棋的程序,我也考虑到了这个问题,也是基础视频的一个缺漏。
个人感觉最好的方法就是把判断当前位置,以及该处理的动作封装成方法,每次当用户移动时都判断他的范围是否出界和判断是否在移动后再次进入关卡。
作者: 亚伦    时间: 2014-5-8 22:19
本帖最后由 亚伦 于 2014-5-8 22:49 编辑

1.玩家掷骰子 -》 2.玩家移动 -》3.检查玩家是否踩到其他玩家或触发特效 -》4.收集受影响的人数 -》5.所有受影响的玩家回到步骤3,直到受影响玩家的人数为0  -》 6.回到1
  1. //可以使用栈保存受影响的人的ID
  2. //Stack<int> IDForCheck = new Stack<int>();
  3. //玩家掷骰子,并把该玩家压入栈
  4. do
  5. {
  6.      Fight(IDForCheck.Peek());
  7. } while(IDForCheck.Count > 0);

  8. Fight(int id)
  9. {
  10.    //检查玩家是否踩到其他玩家,保存这些玩家,到时候显示在屏幕上
  11.   // List<int> deadMen = new List<int>();

  12. // 检查是否触发特效,收集受影响玩家到IDForCheck(注意我这里是最先触发特效的人没有弹出栈,因为如果玩家进入传送门,还需要在传送后检查一次)
  13. // 如果踩到了空格子,就代表没有特效触发,把当前的玩家弹出栈
  14. }
复制代码
我只能提供大体思路,剩下的还要靠你自己,如果需要讨论请联系我。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2