2019-04-14, 03:19 AM
(This post was last modified: 2019-04-15, 10:29 PM by klays.
Edit Reason: se agregan sugerencias y arreglos de comentarios.
)
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 1 .. 4: // resto del c?digo.
Un ejemplo para esto es lo siguiente:
PHP Code: new variable = random(51);
switch(variable)
{
? ? case 1 .. 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 1, 3,?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 1, 3, 7: print("el numero puede ser 1, 3 o 7.");
? ??case 2, 4, 6: 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
mola, pero creo q esta en la secci?n equivocada
Location: Colombia - LocalHost
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}
Buena gu?a, muy ?til la informaci?n.
Buena guia pero deberian hacer Secciones xD
Location: Montevideo, Uruguay
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.
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(string, sizeof string, "tu variable es %d.", variable[playerid]);
SendClientMessage(playerid, -1, string);
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.
2019-04-15, 10:09 PM
(This post was last modified: 2019-04-15, 10:30 PM by klays.)
(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
Linda para los programadores aprendices, buen trabajo.
2019-05-30, 04:55 PM
(This post was last modified: 2019-05-30, 04:57 PM by DarkThinking.)
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)
{
}
....
Location: La Plata, Argentina
2019-05-30, 04:57 PM
(This post was last modified: 2019-05-30, 05:00 PM by Markski.)
(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
|