程序员

跳一跳

2018-03-03  本文已影响146人  Luxin23

最近我们也做了一个跳一跳的小游戏。

我们的跳一跳是多人联网一同比赛的。

这个跳的过程我们是由服务器来做的。

跳一跳

如图,我们的平台大小各不同。我们知道玩家当前的位置和玩家要跳跃的距离,根据这个我们要求出玩家的目标点。为了尽可能的跳到下一个平台上,所以我们需要朝着下一个平台的中心点跳,这里用到了方向向量的概念。

如果我们把玩家的位置坐标表示为{x0, y0},下一个平台的中心坐标为{x1,y1}。玩家跳跃距离为Len

那么我们计算玩家的的目标位置:

get_e(X0, Y0, X1, Y1) ->
  X2 = X0 - X1,
  Y2 = Y0 - Y1,
  math:sqrt(X2 * X2 + Y2 * Y2).

get_e_x_y(X0, Y0, X1, Y1) ->
  E = get_e(X0, Y0, X1, Y1) ,
  XX = X1 - X0,
  YY = Y1 - Y0,
  case E =:= 0 of
      true -> {0, 0};
      _ -> {XX / E, YY / E}
  end.

get_x_y(Len, X0, Y0, X1, Y1) ->
  {X2, Y2} = get_e_x_y(X0, Y0, X1, Y1),
  X = X0 + Len * X2,
  Y = Y0 + Len * Y2,
  {X, Y}.

计算出玩家跳跃后的目标点,我们要判断玩家是否有落在下一个平台上或者是落在当前平台上,这个就比较简单了。直接计算出玩家跳跃后的点与两个平台中心点的距离,如果小于两个平台的半径,表示它落在了平台上,反之没有在平台上。

这个应该还算是简单。

架构

这个有点类似LOL。不过我只有两个进程

匹配进程 -> 比赛进程。

玩家首选进入到匹配进程,由匹配进程进行匹配,挑选出合适的玩家,然后新起一个比赛进程,以后这些玩家都和这个比赛进程通讯。由比赛进程完成当场比赛的所有工作,比赛结束,这个比赛进程当然也就被回收掉啦。

最后,我觉得这个游戏不好玩啊......好无聊

上一篇 下一篇

猜你喜欢

热点阅读