コード例 #1
0
        private static List <Node> GetAdjacentWalkableNodes(Node fromNode, int width, int height, Node[,] nodes, SalaInstance Sala)
        {
            List <Node>         walkableNodes = new List <Node>();
            IEnumerable <Point> nextLocations = GetAdjacentLocations(fromNode.Location);

            foreach (var location in nextLocations)
            {
                int x = location.X;
                int y = location.Y;

                if (x < 0 || x >= width || y < 0 || y >= height)
                {
                    continue;
                }

                Node node = nodes[x, y];

                if (!Sala.Caminable(new Posicion(node.Location.X, node.Location.Y)))
                {
                    continue;
                }

                if (node.State == NodeState.Closed)
                {
                    continue;
                }

                if (node.State == NodeState.Open)
                {
                    float traversalCost = Node.GetTraversalCost(node.Location, node.ParentNode.Location);
                    float gTemp         = fromNode.G + traversalCost;
                    if (gTemp < node.G)
                    {
                        node.ParentNode = fromNode;
                        walkableNodes.Add(node);
                    }
                }
                else
                {
                    node.ParentNode = fromNode;
                    node.State      = NodeState.Open;
                    walkableNodes.Add(node);
                }
            }
            return(walkableNodes);
        }
コード例 #2
0
        void IniciarCocos()
        {
            Iniciado = true;
            int          TotalRondas = 7;
            List <Point> Puntos      = new List <Point>();

            while (TotalRondas > 0)
            {
                Puntos.Clear();
                for (int i = 1; i <= TotalRondas; i++)
                {
                    Point PosGeneratedByMap = sala.GetRandomPlace();
                    while (Puntos.Contains(PosGeneratedByMap) || !sala.Caminable(new Posicion(PosGeneratedByMap.X, PosGeneratedByMap.Y)))
                    {
                        PosGeneratedByMap = sala.GetRandomPlace();
                    }
                    Puntos.Add(PosGeneratedByMap);
                }
                TotalRondas--;
                Thread.Sleep(new TimeSpan(0, 0, 5));
                foreach (Point PointToShow in Puntos)
                {
                    ServerMessage server_1 = new ServerMessage();
                    server_1.AddHead(124);
                    server_1.AddHead(120);
                    server_1.AppendParameter(PointToShow.X);
                    server_1.AppendParameter(PointToShow.Y);
                    server_1.AppendParameter(1);
                    sala.SendData(server_1);
                }
                Thread.Sleep(new TimeSpan(0, 0, 5));
                foreach (Point PointToHidden in Puntos)
                {
                    ServerMessage server_2 = new ServerMessage();
                    server_2.AddHead(124);
                    server_2.AddHead(121);
                    server_2.AppendParameter(PointToHidden.X);
                    server_2.AppendParameter(PointToHidden.Y);
                    server_2.AppendParameter(1);
                    sala.SendData(server_2);
                }
                ServerMessage server_3 = new ServerMessage();
                server_3.AddHead(160);
                server_3.AddHead(125);
                server_3.AppendParameter(30);
                sala.SendData(server_3);
                sala.PathFinder = true;
                Thread.Sleep(new TimeSpan(0, 0, 30));
                sala.PathFinder = false;
                List <SessionInstance> ParaDescalificar = new List <SessionInstance>();
                foreach (SessionInstance Session in Participantes.Values)
                {
                    if (!Puntos.Contains(new Point(Session.User.Posicion.x, Session.User.Posicion.y)))
                    {
                        ParaDescalificar.Add(Session);
                    }
                }
                foreach (SessionInstance Session in ParaDescalificar)
                {
                    Descalificar(Session);
                    LanzarCoco(Session);
                    UserManager.Sumar_Cocos(Session.User, 1);

                    RankingsManager.agregar_user_ranking(Session.User.id, 2, 2, 1);

                    //using (mysql client = new mysql())
                    //{
                    //    string Nombre = Session.User.nombre;
                    //    if (Nombre == "") { Session.User.nombre = Session.User.nombre_halloween; }
                    //    DataRow comprobar_usuario = client.ExecuteQueryRow("SELECT * FROM coco_semanal WHERE usuario = '" + Nombre + "'");
                    //    if (comprobar_usuario != null)
                    //    {
                    //        int goldens = (int)comprobar_usuario["goldens"];
                    //        int actualizar_goldens = goldens + 1;
                    //        client.ExecuteNonQuery("UPDATE coco_semanal SET goldens = '" + actualizar_goldens + "' WHERE usuario = '" + Nombre + "'");
                    //    }
                    //    else
                    //    {
                    //        client.SetParameter("usuario", Nombre);
                    //        client.SetParameter("goldens", 1);
                    //        client.ExecuteNonQuery("INSERT INTO coco_semanal (`usuario`, `goldens`) VALUES (@usuario, @goldens)");
                    //    }
                    //}
                }
                Thread.Sleep(new TimeSpan(0, 0, 10));
                if (Participantes.Count == 0 || Participantes.Count == 1)
                {
                    break;
                }
            }
            if (Participantes.Count == 0)
            {
                ServerMessage server_4 = new ServerMessage();
                server_4.AddHead(160);
                server_4.AddHead(124);
                server_4.AppendParameter("Ups!, al parecer no hay ganadores en esta ronda...");
                sala.SendData(server_4);
            }
            else
            {
                SessionInstance SessionWin = null;
                foreach (SessionInstance Session in Participantes.Values)
                {
                    SessionWin = Session;
                }
                if (SessionWin != null)
                {
                    Participantes.Remove(SessionWin.User.id);
                    switch (sala.Escenario.id)
                    {
                    case 8:

                        ServerMessage server_5 = new ServerMessage();
                        server_5.AddHead(160);
                        server_5.AddHead(129);
                        server_5.AppendParameter(1);
                        server_5.AppendParameter(SessionWin.User.id);
                        server_5.AppendParameter(SessionWin.User.nombre);
                        server_5.AppendParameter("Ha ganado: " + Recompensa_Golden + " créditos! y Suma " + 3 + " puntos y está más cerca de conseguir un nuevo coco!");
                        sala.SendData(server_5);

                        RankingsManager.agregar_user_ranking(SessionWin.User.id, 2, 2, 3);

                        UserManager.Creditos(SessionWin.User, true, true, Recompensa_Golden);
                        UserManager.Sumar_Cocos(SessionWin.User, 3);
                        SessionWin.User.torneos_coco++;
                        if (SessionWin.User.torneos_coco == 300)
                        {
                            using (mysql client = new mysql())
                            {
                                client.SetParameter("usuario_id", SessionWin.User.id);
                                client.SetParameter("objeto_id", 3069);
                                client.ExecuteNonQuery("INSERT INTO objetos_comprados (`usuario_id`, `objeto_id`) VALUES (@usuario_id, @objeto_id)");
                            }
                        }
                        UserManager.ActualizarEstadisticas(SessionWin.User);
                        break;

                    case 9:
                        ServerMessage server_6 = new ServerMessage();
                        server_6.AddHead(160);
                        server_6.AddHead(129);
                        server_6.AppendParameter(1);
                        server_6.AppendParameter(SessionWin.User.id);
                        server_6.AppendParameter(SessionWin.User.nombre);
                        server_6.AppendParameter("Ha ganado: " + Recompensa_Silver + " monedas de plata! y Suma " + 1 + " puntos y está más cerca de conseguir un nuevo coco!");
                        sala.SendData(server_6);
                        UserManager.Creditos(SessionWin.User, false, true, Recompensa_Silver);
                        UserManager.Sumar_Cocos(SessionWin.User, 1);
                        break;
                    }
                    SessionWin.User.Jugando = false;
                }
            }
            FinalizarCocos();
        }