请选择 进入手机版 | 继续访问电脑版
搜索
查看: 155|回复: 2

制作ufo大作战上篇

[复制链接]

9

主题

64

帖子

408

积分

超级版主

Rank: 8Rank: 8

积分
408
发表于 2017-2-7 16:07:45 | 显示全部楼层 |阅读模式
本帖最后由 MatchVS官方客服 于 2017-2-7 16:15 编辑

游戏玩法

游戏为多人实时在线控制自己的角色,参与抢夺空间内(1024*1024)随机生成分布的碰撞体,碰撞体不可移动,玩家角色坐标与碰撞体坐标重合则碰撞生效,角色leave增加,碰撞体消失,玩家也具有碰撞体属性,等级低者消失

玩法介绍:http://gh.youku.com/topic_page/detail?id=a3ab0c864eaf77a58da704874947d8b1

image2017-1-16 10-42-37.png


(球球大作战截图)

QQ图片20170206145111.png


(实际开发结果)

开发
代码规范:

1. 驼峰式;
2. 缩进tab为4个空格;示例

  1. using UnityEngine;
  2. public class Player
  3. {
  4.     public int id;
  5.     public int x;
  6.     public int y;
  7.     public int state;
  8.     public int level;
  9.     public Vector2 appropriateScale()
  10.     {
  11.         return new Vector2(32.0f + 1.0f * level, 32.0f + 1.0f * level);
  12.     }
  13. }
复制代码

Client 框架
M V C
M
  1. class Food
  2. {
  3.     public int id;
  4.     public int x;
  5.     public int y;
  6.     //0 is live ,1 is dead
  7.     int state;
  8. }

  9. class FoodsController
  10. {
  11.     public static List<Food> _foods = new List<Food>();
  12.     public static List<GameObject> _foodObjects = new List<GameObject>();
  13.     public static Object _foodObject = null;
  14.     public static void onPullFoods(List<Food> foods);
  15.     public static void onFoodsChanged(Food food);
  16. }

  17. class Player
  18. {
  19.     int id;
  20.     int x;
  21.     int y;
  22.     //0 is live ,1 is dead
  23.     int state;
  24.     int level;
  25. }

  26. class PlayersController
  27. {
  28.     public static List<Player> _players = new List<Player>();
  29.     public static Player _myself = null;
  30.     public static Object _playerObject = null;
  31.     public static List<GameObject> _playerObjects = new List<GameObject>();;
  32.     public static void onPullPlayers(List<Player> players);
  33.     public static void onUserJoin(Player player);
  34.     public static void onUserLeave(Player player);
  35.     public static void onPlayerMove(Player player);
  36. }
  37. class Direction
  38. {
  39.     int id;
  40.     int left;
  41.     int right;
  42.     int up;
  43.     int down;
  44. }

  45. class InputController
  46. {
  47.     void Move(Direction direction);
  48.     void Update()
  49.     {
  50.         move(direction);
  51.     }
  52. }
复制代码
V:
Unity
onPullPlayers(List<Player> players) ━ 从服务器拉取玩家列表,并一一创建玩家对象
onPullTopList(List<Player> players) ━ 每间隔一段时间,从服务器拉取排行榜列表,根据列表创建,刷新排行榜
onPullFoods(List<Food> foods) ━ 从服务器拉取食物列表,并一一创建食物对象
onUserJoin(Player player) ┳ player不存在当前的玩家列表中 → 添加player到玩家列表,生成玩家对象;修改User数据
                                          ┗ player存在当前玩家列表中 → 修改玩家信息,修改玩家对象位置,大小;修改User数据
onUserLeave(Player player) ┳ player不存在当前的玩家列表中 → 忽略
                                             ┗ player存在当前玩家列表中 → 删除玩家信息,摧毁玩家对象;修改User数据
onPlayerMove(Player player) ┳ player不存在当前的玩家列表中 → 添加player到玩家列表,生成玩家对象
                                               ┗ player存在当前玩家列表中 → 修改玩家信息,修改玩家对象位置,大小
onFoodsChanged(Food food) ┳ food.state为0 ┳ food不存在当前的碰撞体列表中 → 忽略
                                                ┃                       ┗ food存在当前碰撞体列表中 → 删除碰撞体信息,摧毁碰撞体对象
                                                ┣ food.state为1 ┳ food不存在当前的碰撞体列表中 → 添加food到碰撞体列表,生成碰撞体对象
                                                ┃                       ┗ food存在当前碰撞体列表中 → 修改碰撞体信息,修改碰撞体对象位置
                                                ┗ 其他 → 忽略
每当玩家列表修改后,更新积分榜数据,对象
C:
MultipleGameControl:
接口:
  1. //移动自身 move的id为玩家自身ID
  2. move(Direction direction);// [id,left,right,up,down],0为按键松开,1位按下
  3. join();
  4. leave();

  5. //获取当前所有食物列表
  6. pullFoods();
  7. onPullFoods(List<Food> foods);
  8. //获取所有在线玩家列表
  9. pullPlayers();
  10. onPullPlayers(List<Player> players);
  11. //获取排行榜列表
  12. pullTopList();
  13. onPullTopList(List<Player> topList);

  14. //同步单个玩家的状态变化.
  15. onPlayerMove(Player player);
  16. //同步单个食物的变化.消亡与增长
  17. onFoodsChanged(Food food);
  18. //同步玩家离开游戏
  19. onUserLeave(Player player);
  20. //玩家join会第一个收到此回调,其中的ID就是自身的userID
  21. onUserJoin(Player player);
复制代码
传输格式
JSON
使用的库为:JsonCsharp
  1. using JsonCsharp;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class JsonHandler
  5. {
  6.     public delegate void SendMessage(string message);
  7.     public static SendMessage sendMessage = umsp.sendMessage;
  8.     public static void sendJson(string json);

  9.     public static void pullFoods();
  10.     public static void pullTopList();
  11.     public static void pullPlayers();
  12.     public static void join();
  13.     public static void leave();
  14.     public static void move(Direction direction);

  15.     public delegate void OnPullFoods(List<Food> foods);
  16.     public static OnPullFoods onPullFoods = FoodsController.onPullFoods;
  17.     public delegate void OnFoodsChanged(Food food);
  18.     public static OnFoodsChanged onFoodsChanged = FoodsController.onFoodsChanged;
  19.     public delegate void OnPullPlayers(List<Player> players);
  20.     public static OnPullPlayers onPullPlayers = PlayersController.onPullPlayers;
  21.     public delegate void OnPullTopList(List<Player> topList);
  22.     public static OnPullTopList onPullTopList = TopListController.onPullTopList;
  23.     public delegate void OnUserJoin(Player player);
  24.     public static OnUserJoin onUserJoin = PlayersController.onUserJoin;
  25.     public delegate void OnUserLeave(Player player);
  26.     public static OnUserLeave onUserLeave = PlayersController.onUserLeave;
  27.     public delegate void OnPlayerMove(Player player);
  28.     public static OnPlayerMove onPlayerMove = PlayersController.onPlayerMove;
  29.     public static void deserializeJson(string json)
  30.     {
  31.         JsonValue value = JsonMapper.ToValue(json);
  32.         string action = JsonMapper.ToObject<string>(value["action"]);
  33.         if (action == "onPullFoods")
  34.         {
  35.             List<Food> foods = JsonMapper.ToObject<List<Food>>(value["foods"]);
  36.             if (onPullFoods != null)
  37.             {
  38.                 onPullFoods(foods);
  39.             }
  40.             else
  41.             {
  42.                 Debug.Log("no onPullFoods()");
  43.             }
  44.             return;
  45.         }
  46.         if (action == "onFoodsChanged")
  47.         {
  48.             Food food = JsonMapper.ToObject<Food>(value["food"]);
  49.             if (onFoodsChanged != null)
  50.             {
  51.                 onFoodsChanged(food);
  52.             }
  53.             else
  54.             {
  55.                 Debug.Log("no onFoodsChanged()");
  56.             }
  57.             return;
  58.         }
  59.         if (action == "onPullTopList")
  60.         {
  61.             List<Player> topList = JsonMapper.ToObject<List<Player>>(value["players"]);
  62.             if (onPullTopList != null)
  63.             {
  64.                 onPullTopList(topList);
  65.             }
  66.             else
  67.             {
  68.                 Debug.Log("no onPullTopList()");
  69.             }
  70.             return;
  71.         }
  72.         if (action == "onPullPlayers")
  73.         {
  74.             List<Player> players = JsonMapper.ToObject<List<Player>>(value["players"]);
  75.             if (onPullPlayers != null)
  76.             {
  77.                 onPullPlayers(players);
  78.             }
  79.             else
  80.             {
  81.                 Debug.Log("no onPullPlayers()");
  82.             }
  83.             return;
  84.         }
  85.         if (action == "onUserJoin")
  86.         {
  87.             Player player = JsonMapper.ToObject<Player>(value["player"]);
  88.             if (onUserJoin != null)
  89.             {
  90.                 onUserJoin(player);
  91.             }
  92.             else
  93.             {
  94.                 Debug.Log("no onUserJoin()");
  95.             }
  96.             return;
  97.         }
  98.         if (action == "onUserLeave")
  99.         {
  100.             Player player = JsonMapper.ToObject<Player>(value["player"]);
  101.             if (onUserLeave != null)
  102.             {
  103.                 onUserLeave(player);
  104.             }
  105.             else
  106.             {
  107.                 Debug.Log("no onUserLeave()");
  108.             }
  109.             return;
  110.         }
  111.         if (action == "onPlayerMove")
  112.         {
  113.             Player player = JsonMapper.ToObject<Player>(value["player"]);
  114.             if (onPlayerMove != null)
  115.             {
  116.                 onPlayerMove(player);
  117.             }
  118.             else
  119.             {
  120.                 Debug.Log("no onPlayerMove()");
  121.             }
  122.             return;
  123.         }
  124.         Debug.Log("no match action:" + json);
  125.     }
  126. }
复制代码
传输协议
TCP





回复

使用道具 举报

0

主题

1

帖子

4

积分

中级菜鸟

Rank: 1

积分
4
发表于 2017-2-18 16:07:47 来自手机 | 显示全部楼层
我怎么才能变回中文
回复 支持 反对

使用道具 举报

9

主题

64

帖子

408

积分

超级版主

Rank: 8Rank: 8

积分
408
 楼主| 发表于 2017-2-20 11:25:52 | 显示全部楼层
189@sian.cnm 发表于 2017-2-18 16:07
我怎么才能变回中文

您好,请问您指的是什么位置变回中文呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|MatchVS开发者论坛

GMT+8, 2017-4-27 01:34 , Processed in 0.085772 second(s), 23 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表