• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[GU?A] Usos de switch.
#1
switch, usos.





Para Variables globales.



Primero hay que tener una variable creada, para testear puedes probar con esto:

PHP Code:
new randomnumber random(4); 



Luego de eso creamos el switch, puede ser llamado cuando se ejecute un comando, por ejemplo.

PHP Code:
switch(randomnumber)

{

? ??case 
0: print("el numero es 0.");

? ? case 
1: print("el numero es 1.");

? ? case 
2: print("el numero es 2.");

? ? case 
3: print("el numero es 3.");

? ? default: print(
"el n?mero no es reconocido.");





Esto significar?, si la variable (randomnumber) es igual a x (el n?mero aleatorio de 0 a 3) imprimir? cierto valor (print).



Para variables del jugador.



Primero hay que crear la variable:

PHP Code:
new variable[MAX_PLAYERS]; 



Luego de eso, el switch, puede ser llamado desde un comando, por ejemplo:

PHP Code:
switch(variable[playerid])

{

? ??case 
0:

? ? {

? ? ? ? 
SendClientMessage(playerid, -1"tu variable es 0.");

? ? ? ? 
// resto de c?digo en caso de ser necesario.

? ??}

? ? case 
1:

? ? {

? ? ? ??
SendClientMessage(playerid, -1"tu variable es 1.");

? ? ? ??
// resto de c?digo en caso de ser necesario.

? ? }

? ??case 
2:

? ? {

? ? ? ??
SendClientMessage(playerid, -1"tu variable es 2.");

? ? ? ?
// resto de c?digo en caso de ser necesario.

? ? }

? ? default:

? ? {

? ? ? ? 
SendClientMessage(playerid, -1"...");

? ? ? ? 
// resto de c?digo en caso de ser necesario.

? ? }





En resumen, si la variable?(variable) del jugador?es igual a x (numero asignado) mendar? cierto mensaje y ejecutar? cierta funci?n seg?n el case.



default: es llamado cuando ning?n case (tras comprobarlos) es igual a la variable, ejemplo:

PHP Code:
new dos 2;



switch(
dos)

{

? ? case 
0: print("numero 0.");

? ? case 
1: print("numero 1.");

? ? case 
2: print("numero 2.");

? ? case 
3: print("numero 3.");

? ? default: print(
"numero x");





En el ejemplo anterior la variable es igual a 2, por lo tanto ejecutar? el case 2, en resumen imprimir? numero 2 en la consola, pero en el siguiente ejemplo:

PHP Code:
new dos 2;



switch(
dos)

{

? ? case 
0: print("numero 0.");

? ? case 
1: print("numero 1.");

? ? default: print(
"numero x");





la variable es igual a dos, dentro del switch no hay ning?n case con valor 2 por lo tanto se ejecutar? el default. Por lo tanto imprimir?: numero x en la consola.



Para resumir default es invocado cuando ning?n case cumple con la variable.



__



Rangos de comprobaciones.



Para n?meros consecutivos: puedes comprobar m?s de un (1) solo n?mero en el case (definimos case como: case: 1, etc?tera) con:

PHP Code:
case .. 4// resto del c?digo. 



Un ejemplo para esto es lo siguiente:

PHP Code:
new variable random(51);



switch(
variable)

{

? ? case 
.. 10: print("el numero est? entre el 1 al 10.");

? ??case 
11 .. 20: print("el numero est? entre el 11 al 20.");

? ? case 
21?.. 30: print("el numero est? entre el 21?al 30.");

? ? case 
31?.. 40: print("el numero est? entre el 31 al 40.");

? ? case 
41?.. 50: print("el numero est? entre el 41 al 50.");

? ? default: print(
"el numero esta en un rango del 0 al 50.");





(cr?ditos/idea: autorojo) | En resumen, si la variable se establece en un n?mero entre 1 y 10 imprimir?: el n?mero est? entre el 1 al 10 y as? consecutivamente dependiendo del case. En caso de que ninguno est? en lo correcto se ejecutar? default.



Para n?meros distintos: puedes comprobar distintos n?meros que no est?n de forma consecutiva de la siguiente forma:

PHP Code:
case 13,?7// resto del c?digo. 

Para explicar, si la variable es igual a 1, 3 ? 7 ser? ejectuada la funci?n que esta contenga, ejemplo:

PHP Code:
new variable random(10);



switch(
variable)

{

? ? case 
137: print("el numero puede ser 1, 3 o 7.");

? ??case 
246: print("el numero puede ser 2, 4 o 6.");

? ? default: print(
"el numero puede ser 0 o 5.");





Para resumir, el case 1, 3, 7 se ejecutar?n si el n?mero aleatorio es igual a cualquiera de esos 3 y as? con los dem?s, caso contrario se ejecutar? el default (n?mero 0 y 5, los restantes).



__



post en edici?n.
Faith Hills Role-Play

Faith Hills, juego de rol

WEBSITE:?fhrp.me

  Reply
#2
mola, pero creo q esta en la secci?n equivocada
[Image: oN9R4KR.gif]

Away
  Reply
#3
Pues es la ?nica secci?n espa?ola del foro as? que toca publicar por ac?, est? buena la guia, respect (sonido de misi?n superada del San Andreas)
Latam Roleplay {Proxim?mente}

Latinoam?rica {Presente}

  Reply
#4
Buena gu?a, muy ?til la informaci?n.




[Image: OJBf7gI.jpeg]























  Reply
#5
Buena guia pero deberian hacer Secciones xD
  Reply
#6
Esta bien, pero en la parte del switch podrias explicar el uso de default y por cierto, el random(3) nunca llegara a 3, simplemente va del 0 al 2.
  Reply
#7
Los ejemplos est?n algo bien, pero todo eso se podr?a resumir con format sin tener que usar switch, si se trata de simples mensajes:



PHP Code:
new randomnumber random(3);

printf("El numero es %d"randomnumber);



//?[...]



new variable[MAX_PLAYERS];



// [...]



new string[144];

format(stringsizeof string"tu variable es %d."variable[playerid]);

SendClientMessage(playerid, -1string); 
  Reply
#8
Est? bien, es una gu?a b?sica, pero creo que falla en varios aspectos.



(2019-04-14, 03:19 AM)klays Wrote: Primero hay que tener una variable creada, para testear puedes probar con esto:

PHP Code:
new randomnumber random(3); 



Luego de eso creamos el switch, puede ser llamado cuando se ejecute un comando, por ejemplo.

PHP Code:
switch(randomnumber)

{

? ??case 
0: print("el numero es 0.");?

? ? case 
1: print("el numero es 1.");

? ? case 
2: print("el numero es 2.");

? ? case 
3: print("el numero es 3.");





Esto significar?, si la variable (randomnumber) es igual a x (el n?mero aleatorio de 0 a 3) imprimir? cierto valor (print).



En caso de hacer un random(3), los resultados ir?n del 0 al 2 (inclusive), es decir: 0, 1 ? 2. Por lo tanto el "case 3" nunca ser? ejecutado.



No hac?s menci?n al caso "default" ni ense??s la posibilidad de incluir m?s de un valor en un solo caso:



Code:
new rand = random(20);



switch(rand)

{

    case 0..4: // lo mismo que hacer 0, 1, 2, 3, 4

        print("El n?mero aleatorio es un n?mero entre cero y cuatro, inclusive.");



    case 5:

        print("El n?mero aleatorio es cinco.");



    case 6, 7, 8, 9, 10: // lo mismo que hacer 6..10

        print("El n?mero aleatorio es un n?mero entre seis y diez, inclusive.");



    default: // ninguno de los casos es verdadero

        print("El n?mero aleatorio es menor a cero o mayor a diez.");

}



Es posible expresarlo de otro modo obteniendo el mismo resultado:



Code:
new rand = random(20);



if(rand >= 0 && rand <= 4)

    print("El n?mero aleatorio es un n?mero entre cero y cuatro, inclusive.");

else if(rand == 5)

    print("El n?mero aleatorio es cinco.");

else if(rand == 6 || rand == 7 || rand == 8 || rand == 9 || rand == 10)

    print("El n?mero aleatorio es un n?mero entre seis y diez, inclusive.");

else

    print("El n?mero aleatorio es menor a cero o mayor a diez.");



Pru?bese: https://fiddle.sa-mp.dev/GastronomicalUnchangedIbisbill



Es v?lido expresarlo de ambas formas aunque, evidendentemente, utilizar un switch donde corresponde siempre es m?s ordenado que utilizar un if.



Otra cosa: divid?s variables "globales" y variables "del jugador". Hasta donde yo s?, las variables se pueden dividir en globales (que est?n fuera de una funci?n) y locales (que est?n dentro de una funci?n). No existen las variables del jugador. Una variable expresada como "gPlayerInfo[MAX_PLAYERS]" es un array con un espacio equivalente al m?ximo de jugadores (MAX_PLAYERS). Naturalmente, se utilizar?a para guardar informaci?n relacionada a determinado jugador, pero eso no hace que deje de ser una variable global. A menos, claro, que est? declarada dentro de una funci?n.
  Reply
#9
(2019-04-15, 04:48 AM)#Fede Wrote: Esta bien, pero en la parte del switch podrias explicar el uso de default y por cierto, el random(3) nunca llegara a 3, simplemente va del 0 al 2.



la estar? editando.

Gracias por la correcci?n, error m?o.



__



@Graber, lo s?, eran ejemplos en el primer caso.



__



@autorojo: gracias por las correcciones, la estar? editando.

gu?a actualizada ^^
Faith Hills Role-Play

Faith Hills, juego de rol

WEBSITE:?fhrp.me

  Reply
#10
Linda para los programadores aprendices, buen trabajo.
  Reply
#11
Util, pero te falta explicar:

->Que los switch solo son num?ricos (integers).

->Que no es necesario usar un random.

ejemplo:

Code:
new i[MAX_PLAYERS];

i[playerid];
new string[12];
switch(i[playerid])
{
? ? ?case 1: string = "I = 1";
? ? ?case 2: string = "I = 2";
? ? ?case 3: string = "I = 3";
     case 4 .. 5: string = "I = 4 o 5";
}

y que es la forma mas optimizada de hacer todos
Code:
if(isnull(var))
{
}
else if(var == 1)
{
}
....
  Reply
#12
(2019-05-30, 04:55 PM)DarkThinking Wrote: ->Que los switch solo son num?ricos (integers).

No necesariamente, un switch puede iterar sobre cualquier elemento byte como lo es un char

se puede hacer case 'a': | case 'b': etc
  Reply


Forum Jump: