コード例 #1
0
    //	TurnBasedMatch onlineMatch;

    public static FightDelegate FromByteArray(Byte[] array)
    {
        MemoryStream  stream = new MemoryStream(array);
        BinaryReader  reader = new BinaryReader(stream);
        FightDelegate fight  = new FightDelegate();

        fight.type   = (GameType)reader.ReadInt32();
        fight.Rounds = reader.ReadInt32();

        CharacterType type1   = (CharacterType)reader.ReadInt32();
        Character     player1 = null;

        switch (type1)
        {
        //			case CharacterType.AI:
        //				player1 = new AIPlayer();
        //				break;
        case CharacterType.Kyoryu:
            player1 = new KyoryuCharacter(3);
            break;
        }
        player1.Health = reader.ReadInt32();
        player1.Meter  = reader.ReadInt32();
        fight.Moves    = new Move[2];
        //		fight.Moves[0] = player1.GetMoveName;

        CharacterType type2   = (CharacterType)reader.ReadInt32();
        Character     player2 = null;

        switch (type2)
        {
        case CharacterType.AI:
            player2 = new AIPlayer(5, new KyoryuCharacter(7));
            break;

        case CharacterType.Kyoryu:
            player2 = new KyoryuCharacter(7);
            break;
        }
        player2.Health = reader.ReadInt32();
        player2.Meter  = reader.ReadInt32();


        fight.Fighters    = new Character[2];
        fight.Fighters[0] = player1;
        fight.Fighters[1] = player2;

        fight.started = true;

        return(fight);
    }
コード例 #2
0
    public static byte[] ToByteArray(FightDelegate bundle)
    {
        MemoryStream stream = new MemoryStream(48);
        BinaryWriter writer = new BinaryWriter(stream);

        writer.Write((int)bundle.type);
        writer.Write(bundle.Rounds);
        writer.Write(bundle.Turn);
        Character player1 = bundle.Fighters[0];

        writer.Write((int)player1.GetCharacterType());
        writer.Write(player1.GetHealth());
        writer.Write(player1.GetMeter());
        writer.Write((int)bundle.Moves[0].MoveType);
        Character player2 = bundle.Fighters[1];

        writer.Write((int)player2.GetCharacterType());
        writer.Write(player2.GetHealth());
        writer.Write(player2.GetMeter());
        writer.Write((int)bundle.Moves[1].MoveType);
        return(stream.GetBuffer());
    }
コード例 #3
0
        /// <summary>
        /// 用户准备
        /// </summary>
        /// <param name="client"></param>
        private void Ready(ClientPeer client)
        {
            SingleExecute.Instance.Execute(() => {
                if (!user.IsOnLine(client))
                {
                    //不在线
                    return;
                }

                int userId = user.GetId(client);
                if (!match.IsMatching(userId))
                {
                    return;//非法操作 不能准备
                }
                MatchRoom room = match.GetRoom(userId);
                room.Ready(userId);

                //广播消息  准备了 为什么要给自己发,确保服务器收到准备请求 回复消息后 将准备按钮隐藏
                room.Brocast(OpCode.MATCHROOM, MatchRoomCode.READY_BRO, userId);

                Console.WriteLine(string.Format("玩家 : {0}  在房间 :{1} 准备了", user.GetModelByClient(client).name, room.id));

                //是否所有玩家都准备了
                if (room.IsAllUserReady())
                {
                    Console.WriteLine(String.Format("房间 :{0} 开始了战斗。。。", room.id));
                    //开始战斗  调用FightHandler 的开始方法 委托
                    if (FightDelegate != null)
                    {
                        FightDelegate.Invoke(room.uidList);
                    }
                    //通知房间内的玩家 要进行战斗了 群发消息
                    room.Brocast(OpCode.MATCHROOM, MatchRoomCode.START_BRO, null);
                    match.Destroy(room);
                }
            });
        }