El foro principal del servidor Pokemon Origins


    3.- Solucionario

    Comparte
    avatar
    Alipio
    Admin

    Mensajes : 26
    Fecha de inscripción : 18/10/2014
    Edad : 23

    3.- Solucionario

    Mensaje por Alipio el Sáb Nov 08, 2014 8:11 pm

    Solucionario del Capítulo 3.- Variables Globales


    a) Modificar el comando de silencio para que no exista redundancia; es decir, si el chat del servidor ya está silenciado, entonces que no se pueda silenciar de nuevo. Si no hay silencio en el chat, que no se pueda quitar el silencio.


    Sus diagramas de flujo se presentan a continuación:


    Diagramas de Flujo:
    Diagrama Comando: msilenciar

    Diagrama Comando: qsilenciar

    Su código sería el siguiente:

    Código:
    var Silencio=false;
    ({
    beforeChatMessage:function(ID, Msj, Canal ) {

    if (Msj[0] == '/' || Msj[0] == '!' && Msj.length>1) {
    sys.stopEvent(); //Esto paraliza el evento.
    var temp001 = Msj.indexOf(' ');
    var Msj_Comando = Msj.substring(1, temp001).toLowerCase();
    if (temp001 <0) { Msj_Comando = Msj.substr(1).toLowerCase(); }
    var Msj_Msj;
    if (temp001 >=0) { Msj_Msj = Msj.substr(temp001+1); }

    if (Msj_Comando == "msilenciar") {
    if (Silencio == true) {
    sys.sendHtmlMessage(ID, "El Chat del Servidor ya está silenciado.",Canal);
    return; }
    Silencio = true;
    sys.sendHtmlMessage(ID, "Se ha silenciado el Chat del Servidor.",Canal);
    return; }

    if (Msj_Comando == "qsilenciar") {
    if (Silencio == false) {
    sys.sendHtmlMessage(ID, "El Chat del Servidor no esta silenciado.",Canal);
    return; }
    Silencio = false;
    sys.sendHtmlMessage(ID, "Se ha quitado el silencio del Chat del Servidor.",Canal);
    return; }
    sys.sendMessage(ID, "El comando no existe", Canal);
    return;
    }

    if (Silencio == true) {
    sys.stopEvent();
    sys.sendHtmlMessage(ID, "El silencio está activo, permanesca callado.",Canal);
    }

    },
    })


    b) Crear un comando que permita agregar jugadores a un torneo.
    (Definitivamente es necesario usar una variable global)
    Para obtener el nombre de los usuarios, les recomendamos usar la función: sys.name(ID).
    Sugerencia para el nombre de comando: /ptorneo1

    ¿Cúal sería el modelo de variables globales?
    Para realizar este comando debemos contar con un arreglo que almacene la información de los jugadores. Asímismo debemos contar con un contador, para poder controlar el número de participantes que pueden acceder al torneo.  Finalmente, debemos setear un valor máximo, el cual pueda ser modificable mientras se ejecute el programa; es decir, mediante algún comando.

    Variables globales:

    Like a Star @ heaven contorneo = [0, 0]: donde el primer valor del arreglo será la cantidad de jugadores inscritos en el torneo y el segundo valor será el límite de jugadores que se pueden inscribir.

    ¿Se inicializará sus valores? Si, aunque no es necesario, dado que primero se debe activar un torneo, el cual resetearia los valores. Sin embargo, no profundizaremos en este evento, salvo para lo pedido.

    (La realización de los eventos de Torneo se detallarán apropiadamente en otro cápitulo)

    Like a Star @ heaven usuariotorneo = []: la variable que almacenará los nombres de los usuarios registrados para el torneo.

    ¿ Cúal sería la lógica?

    1.- Comando de activar torneo: el cual seteará la cantidad de participantes que pueden ingresar.
    2.- Comando de unión al torneo.
    3.- Comando para cancelar torneo: el cual servirá para terminar un torneo.
    4.- Comando para ver a los participantes: (Comprobación)

    Diagramas de flujo:

    Diagramas de Flujo:
    Diagrama Comando: initorneo1

    Diagrama Comando: fintorneo1

    Diagrama Comando: ptorneo1

    Diagrama Comando: vtorneo1

    Código:

    Código:

    var contorneo = [0,0];
    var usuariotorneo = [];
    ({
    beforeChatMessage:function(ID, Msj, Canal ) {

    if (Msj[0] == '/' || Msj[0] == '!' && Msj.length>1) {
    sys.stopEvent(); //Esto paraliza el evento.
    var temp001 = Msj.indexOf(' ');
    var Msj_Comando = Msj.substring(1, temp001).toLowerCase();
    if (temp001 <0) { Msj_Comando = Msj.substr(1).toLowerCase(); }
    var Msj_Msj;
    if (temp001 >=0) { Msj_Msj = Msj.substr(temp001+1); }

    if (Msj_Comando == "initorneo1") {
    if (contorneo[1] > 0) {
    sys.sendHtmlMessage(ID, "Si desea iniciar otro torneo, primero debe cancelar este torneo.",Canal);
    return; }
    if (Msj_Msj > 0 && Msj_Msj < 40) {
    sys.sendHtmlAll("Un torneo se ha iniciado, para unirse /ptorneo1.");
    contorneo[1] = Msj_Msj;
    contorneo[0] = 0;
    return; }
    sys.sendHtmlMessage(ID, "Asigne un valor correcto para la cantidad de participantes del torneo.",Canal);
    return; }

    if (Msj_Comando == "fintorneo1") {
    if (contorneo[1] == 0) {
    sys.sendHtmlMessage(ID, "No hay torneo en curso.",Canal);
    return; }
    sys.sendHtmlAll("El torneo se ha cancelado, lamentamos los inconvenientes.");
    contorneo[1] = 0;
    return; }

    if (Msj_Comando == "ptorneo1") {
    if (contorneo[1] == 0) {
    sys.sendHtmlMessage(ID, "No hay torneo en curso.",Canal);
    return; }
    if (contorneo[0] == contorneo[1]) {
    sys.sendHtmlMessage(ID, "Lamento informarle que ya no hay cupos para el torneo.",Canal);
    return; }
    usuariotorneo[contorneo[0]] = sys.name(ID);
    contorneo[0]++;
    sys.sendHtmlMessage(ID,"Bienvenido, se ha inscrito al torneo.",Canal);
    return; }

    if (Msj_Comando == "vtorneo1") {
    if (contorneo[1] == 0) {
    sys.sendHtmlMessage(ID, "No hay torneo en curso.",Canal);
    return; }
    Msj_Msj = "";
    for (var i = 0; i<contorneo[0]; i++)  {
    Msj_Msj += ("<br>"+usuariotorneo[i]);
    }
    sys.sendHtmlMessage(ID,"Los inscritos al torneo1 son: "+Msj_Msj,Canal);
    return; }

    sys.sendMessage(ID, "El comando no existe", Canal);
    return;
    }

    },
    })

    c) Hacer un comando que permita tener un icono durante nuestra estadía en el chat.

    Se recomienda el uso de la función: sys.name(ID);
    Así mismo, se introducirá con este problema el concepto de almacenado de información por códigos o patrones.

    Análisis de bloques:
    Se aprecia que se necesitarán dos bloques principales:

    Like a Star @ heaven El bloque estructural de suceso: Comandos.
    Si el usuario uso (! o /), será un comando.

    Like a Star @ heaven El bloque estructural de suceso: Mensaje.
    Si no es un comando es un mensaje de Chat!

    El diagrama de flujo que presenta esto apropiadamente es el siguiente:


    Diagrama de Flujo:


    Requerimientos de variables:
    En principio necesitamos una variable que almacene nuestro nombre junto con el icono que hayamos elegido. Ahora se debe definir como se almacena el identificador del pokemon.
    El código HTML para los iconos es el siguiente: <img src=icon:1>

    Al apreciar el formato de envíos se puede deducir que lo que se debe guardar como identificador del pokemon es su número en base a la Pokedex Nacional.
    Por lo tanto, el formato de almacenaje podría ser el siguiente: Nombre Usuario:Numero del Pokemon
    Por ejemplo: Alipio:06 -> El propietario del icono es Alipio y el pokemon que tiene es un charizard.

    Luego se debe plantear de qué manera los usuarios deberían usar este comando: /icono ....
    Muchos usuarios no saben el número de pokemones por Pokedex Nacional, por lo que el icono debe ir acompañado del nombre del pokemon.

    Para ello recomiendo la función: sys.pokeNum();
    Por ejemplo:
    Like a Star @ heaven sys.pokeNum("charizard") = 6
    Like a Star @ heaven sys.pokeNum("feo") = undefined
    Like a Star @ heaven sys.pokeNum("crobat") = 169

    A continuación, se presenta su diagrama de flujo:


    Diagrama de Flujo:


    Su código sería el siguiente:

    Código:

    var uicono = {};
    ({
    beforeChatMessage:function(ID, Msj, Canal ) {

    if (Msj[0] == '/' || Msj[0] == '!' && Msj.length>1) {
    sys.stopEvent(); //Esto paraliza el evento.
    var temp001 = Msj.indexOf(' ');
    var Msj_Comando = Msj.substring(1, temp001).toLowerCase();
    if (temp001 <0) { Msj_Comando = Msj.substr(1).toLowerCase(); }
    var Msj_Msj;
    if (temp001 >=0) { Msj_Msj = Msj.substr(temp001+1); }

    if (Msj_Comando == "icono") {
    if (Msj_Msj == undefined) {
    sys.sendHtmlMessage(ID,"Defina el pokemon que desea",Canal);
    return; }
    if (sys.pokeNum(Msj_Msj) == undefined) {
    sys.sendHtmlMessage(ID,"No reconocemos ese Pkm.",Canal);
    return; }
    uicono[sys.name(ID).toLowerCase()] = sys.pokeNum(Msj_Msj);
    sys.sendHtmlMessage(ID, "Ha obtenido el Icono que deseaba.",Canal);
    return; }

    sys.sendMessage(ID, "El comando no existe", Canal);
    return;
    }

    var temp = "";
    if (uicono[sys.name(ID).toLowerCase()] != undefined) {
    temp = "<img src=icono:"+uicono[sys.name(ID).toLowerCase()]">";
    }
    sys.stopEvent();
    sys.sendHtmlAll("<font color="+sys.getColor(ID)+"><timestamp/></font>"+temp+" <font color="+sys.getColor(ID)+"><b>"+sys.name(ID)+"</b></font>: "+temp,Canal);
    },
    })


      Fecha y hora actual: Sáb Sep 23, 2017 4:17 am