// 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); }
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()); }
/// <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); } }); }