Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mensajes recientes

#41
Servicios / Compositor musical
Último mensaje de Scythe - 19 de Julio de 2023, 09:09:50 AM
¡Buenos días!

Me llamo Scythe y soy compositor musical. Como amante del mundo de videojuegos y lo que la música puede transmitir junto a ellos quedo a vuestra disposición para cualquier idea loca que se os ocurra y en la que pueda aportar mi granito de arena :)

Os dejo una demo reel por aquí: https://youtu.be/-5Qv7jpG0yA

Correo de contacto para colaboraciones, trabajo o lo que surja: henryscythe@gmail.com

Gracias a todos, espero que trabajemos juntos muy pronto :)

Scythe
#42
Proyectos / Busco programador Unity para F...
Último mensaje de Luisocscomics - 04 de Julio de 2023, 03:23:07 PM
Hola, me llamo Luis y estamos buscando un programador de Unity con algo de experiencia.
Somos un equipo de 2 personas, actualmente el arte y música lo tenemos controlado, pero necesitamos alguien que pueda colaborar en nuestro proyecto con la toda la programación del juego.

El proyecto se llama INKBREAKERS y se trata de un juego de lucha basado en webcomics propios.
El proyecto puede convertirse en una oferta de trabajo más adelante cuando ya tengamos algo que poder mostrar como una demo y abrir algún tipo de financiación como patreon.

Si a alguien le interesa colaborar con nosotros puede contactarme sin problema.


#43
Dibujo / Re:DÉSIDA cómic
Último mensaje de Bardeo - 30 de Mayo de 2023, 08:59:58 PM
Una de reseñas en páginas especializadas:

Reseña en Orgullogamers.com, por Isthar Vega: https://orgullogamers.com/resena-comic-desida/
"El dibujo es maravilloso y detallado, con personajes demasiado reales y que nos recuerdan a personajes de la TV y del mundo de nuestra política. El guion es brutal, no te deja separarte de sus páginas ni un segundo, engancha desde la primera viñeta."

Reseña en Cómic para Todos, por Juan Rodríguez Millán: https://comicparatodos.wordpress.com/2023/04/25/desida-acto-i-de-bardeo/
"Bardeo forma con estos elementos el primer acto de una historia sugerente y que, hasta este punto, deja más interrogantes que respuestas, que al final es lo que procede cuando lo que se busca de una manera tan clara es intrigar al lector. Lo consigue, aun sabiendo que su thriller depende en buena medida de que la resolución de tramas y conflictos va a ser decisiva para la valoración definitiva de Désida. Pero lo que sí se puede decir en este punto es que Bardeo imagina e imagina bien, que sus personajes encajan en su mundo y que esa apertura del final es más un estímulo que un problema"

Reseña en Combogamer.com, por Alfonso Coronado: https://www.combogamer.com/41315/resena-desida/
"Désida es un cómic con una gran carga política. Utilizando como trasfondo un contexto ficticio, pero con unas evidentes referencias a nuestros convulsos tiempos, Bardeo realiza una descarnada crítica social." "Hay dos cosas que me gustaron especialmente. Una, la sublime representación de la televisión, en particular sus presentadores y tertulianos, como burdos propagandistas que sólo son neutrales de palabra. Otra, el hecho de que Uli, teniendo claras inquietudes políticas, sea un desencantado de entre (y de) los desencantados. No podría sentirme más identificado."

Reseña en Es la Hora de las Tortas, por TX: https://www.eslahoradelastortas.com/desida-bardeo/
"El autor consigue colar una historia dentro de otra historia de manera bastante inteligente y eficaz para construir una trama que engancha desde el primer momento, conteniendo trazas de clásicos de la ciencia ficción como "1997: Rescate en Nueva York", "El Juego de Ender", "Ready Player One" o "Un Mundo Feliz". Una ensalada de influencias bien aprovechadas que enganchan al lector sin remedio hasta finalizar las 124 páginas de historia de Désida"

Un saludo :)
#44
Proyectos / Re:Artista: Diseñador, Ilustra...
Último mensaje de arnausefa - 14 de Mayo de 2023, 08:50:03 PM
hola sergio, tienes discord?
#45
General / Ayuda con cálculos para que la...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:45:19 AM
Nota: Esto lo escribí en noviembre, puede que haya cambiado algunas cosas, perdón pero no le veo sentido a revisar todo.

1- Su velocidad de caída aumenta 0.01 por segundo (segundo es un decir, es más bien una centésima de segundo).

2- Sus velocidades hacia los costados (X), adelante (Y, arriba) y arriba (Z, distancia con respecto al suelo) deben ser acordes a la fuerza del jugador que realiza el tiro. La velocidad hacia abajo aumentará, pero me refiero a las velocidades iniciales. Si por ejemplo tiene fuerza 4 y aplicó 3 para que la pelota avance 3 pixeles (es un decir) por segundo entonces no puede ser que la pelota se eleve 2 pixeles por segundo, ya que la fuerza que queda disponible es sólo 1.

3- Cuando llega a la red la Z de la pelota debe ser igual o mayor a cierto valor, es decir, se debe preestablecer un valor que represente la mínima Z con la que la pelota pasa por encima de la red sin tocarla, y cuando llegue a la red debe tener ese valor o uno mayor. En mi caso es 17.5 pero elijan el que gusten.

4- Debe caer en la cancha rival.

5- Las velocidades deben ser tales que la pelota caiga en cierto punto. Por ejemplo:


6- Su velocidad hacia adelante (Y) debe ser la máxima posible.


Es decir, se intenta que se cumpla una condición en tanto eso no cause que no se cumplan las otras.
3- Se quiere que la pelota pase por encima de la red, pero sin que ello implique que haya caído más/menos de lo que debe (condición 1) ni que se le haya aplicado más fuerza de la que se estableció como posible (condición 2). Si el jugador no tiene suficiente fuerza como para que se cumpla esta condición, no se cumple.
4- La oración anterior.
5- Lo mismo. Si para cumplir las condiciones anteriores es necesario que el tiro no vaya tan diagonal como se quiere, entonces no irá tan así, irá más bien verticalmente.
6- En tanto se cumplan las condiciones anteriores... Si la fuerza es 10 la velocidad Y no debe ser mayor que eso. Si queriendo asignar determinada fuerza a Y luego sin importar cuánta se asigne a Z la pelota no pasa la red o no cae en la cancha rival, entonces habrá que reducir la velocidad Y...


Por si los necesitan o quieren, les dejo los datos del caso (pero pueden inventar otros, lo que sí debe tenerse en cuenta es que no necesito simplemente averiguar 3 numeritos basados en otros, sino un método para averiguarlos teniendo en cuenta que los otros pueden variar, por ejemplo se puede elegir hacer un saque hacia al medio o puede que el personaje tenga distinta fuerza):
NOTA: Ignoren lo de "_level0."
  Variable _level0.AlexFuerza = 10
  Variable _level0.BallX = 417
  Variable _level0.BallY = 548
  Variable _level0.BallZ = 43.8
  Variable _level0.DistanciahastaDestinoX = 136.9
  Variable _level0.DistanciahastaDestinoY = 368
  Variable _level0.DistanciahastaRed = 248
  Variable _level0.DistanciahastaMinsafeBallZ = 26.3


Gracias.

Ah: El incremento de Y está invertido, es decir, entre más abajo más valor.
0,0________600,0
0,800______600,800


ACTUALIZADO:
Intenté seguir un método que me recomendaron pero la persona desapareció, así que a ver si alguien lo puede completar. Esto es lo que tengo:
Código completo:
[spoiler]// La mínima BallZ que no toca la red es 18.6.
fscommand ("fullscreen", "true");
Fuerzaderebotedepelota = -0;
// En ese caso menos es más.
Influenciadelrozamiento = 0.02;
AlexFuerzadebrazos = 2000;
Alextimetodownracket = (10-Math.floor(AlexFuerzadebrazos/1000))*2+5;
Alextimetoupracket = Alextimetodownracket*2;
AlexFuerzadepiernas = 1000;
AlexFuerzadetiros = (AlexFuerzadebrazos/1000+AlexFuerzadepiernas/5000)*1;
Alexrunspeed = AlexFuerzadepiernas/10000;
Alexrunspeedonserving = AlexFuerzadepiernas/1000;
AlexMinXposonserving = 408+Alexrunspeedonserving;
AlexMaxXposonserving = 512-Alexrunspeedonserving;
// ///////////////////////////////////////////////////////
// ////////////////////  Saca Alex  //////////////////////
// ///////////////////////////////////////////////////////
AlexX = 460;
AlexY = 548;
attachMovie("AlexMovie", "Alex", 100);
setProperty (Alex, _x, AlexX);
setProperty (Alex, _y, AlexY);
MaxBallZwhenstriked = 0;
Teclafuesoltada = 0;
// ///////////////////////////////////////////////////////
// ///////////////////////  Alex  ////////////////////////
// ///////////////////////////////////////////////////////
function Alexmovetoserve () {
// Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada.
// Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota.
// Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano.
if (Key.isDown(37)) {
// Se mueve a la izquierda, si no se sale del límite.
if (AlexX>AlexMinXposonserving) {
AlexX = AlexX-Alexrunspeedonserving;
} else {
AlexX = AlexMinXposonserving-Alexrunspeedonserving;
}
setProperty (Alex, _x, AlexX);
} else if (Key.isDown(39)) {
// Se mueve a la derecha, si no se sale del límite.
if (AlexX<AlexMaxXposonserving) {
AlexX = AlexX+Alexrunspeedonserving;
} else {
AlexX = AlexMaxXposonserving+Alexrunspeedonserving;
}
setProperty (Alex, _x, AlexX);
}
if (Teclafuesoltada == 0) {
if (Key.isDown(65)) {
} else {
Teclafuesoltada = 1;
// Ahora al presionar la tecla de nuevo Alex elevará la pelota.
}
} else if (Key.isDown(65)) {
// Tecla A, eleva la pelota.
Funcencurso = "Alexelevandoball";
Teclafuesoltada = 0;
// Qué tan arriba está la pelota y a qué Velocidad sube (todo al revés).
BallZ = -37.6;
BallZSpeed = -0.4;
Alex.gotoAndStop(2);
gotoAndStop (3);
}
}
//
function Alexelevandoball () {
if (Teclafuesoltada == 1 && Key.isDown(65)) {
// La tecla fue soltada y vuelta a presionar; Alex saca.
// La pelota y su sombra, que estaban en la movie Alex (para que se pudieran mover simplemente con mover a Alex), ahora son attached al lv0.
Funcencurso = "Alexserving";
BallX = AlexX+9;
BallY = AlexY;
attachMovie("BallShadowMovie", "BallShadow", 50);
setProperty (BallShadow, _x, BallX);
setProperty (BallShadow, _y, BallY);
BallZ = BallZ*-1;
BallZoom = 100+BallZ;
attachMovie("BallMovie", "Ball", 99);
setProperty (Ball, _x, BallX);
setProperty (Ball, _y, BallY-BallZ);
setProperty (Ball, _xscale, BallZoom);
setProperty (Ball, _yscale, BallZoom);
Timesincebeginserve = -1;
Alex.gotoAndStop(3);
setProperty (Alex.Chispa, _y, BallZ*-1-getProperty("Ball", _height)/2);
setProperty (Alex.Chispa, _xscale, AlexFuerzadetiros*10);
setProperty (Alex.Chispa, _yscale, AlexFuerzadetiros*10);
// Datos para determinar velocidades del tiro.
DistanciahastaDestinoX = 280.1-BallX;
DistanciahastaDestinoY = 180-BallY;
DistanciahastaMinsafeBallZ = BallZ-18.6;
BallZwhenstriked = BallZ;
DistanciahastaDestinoXY = Math.sqrt(DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY);
DistanciahastaRed = DistanciahastaDestinoXY * Math.abs(BallY-300) / DistanciahastaDestinoY;
// Determinando velocidades del tiro.
BallXSpeed = DistanciahastaDestinoX/DistanciahastaDestinoXY*AlexFuerzadetiros;
BallYSpeed = DistanciahastaDestinoY/DistanciahastaDestinoXY*AlexFuerzadetiros;
BallZSpeed = 0;
// Datos para determinar posiciones de la pelota.
Tiempotranscurridodeltiro = 0;
BallXwhenstriked = BallX;
BallYwhenstriked = BallY;
Ballreachedred = 0;
gotoAndStop (4);
} else {
if (Teclafuesoltada == 0) {
// Aún no se soltó la tecla.
if (Key.isDown(65)) {
} else {
Teclafuesoltada = 1;
// Ahora al presionarla de nuevo Alex saca.
}
}
// Disminuye la velocidad de subida y varía la altura.
BallZSpeed = BallZSpeed+0.01;
BallZ = BallZ+BallZSpeed;
if (BallZ<MaxBallZwhenstriked) {
MaxBallZwhenstriked = BallZ;
}
setProperty (Alex.Ball, _y, BallZ);
// Varía el tamaño de la pelota.
BallZoom = 100+BallZ*-1;
setProperty (Alex.Ball, _xscale, BallZoom);
setProperty (Alex.Ball, _yscale, BallZoom);
if (BallZ>=-37.6) {
// Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve.
Teclafuesoltada = 0;
Funcencurso = "Alexmovetoserve";
Alex.gotoAndStop(1);
gotoAndStop (2);
}
}
}
//
function Ballmoving () {
Tiempotranscurridodeltiro = Tiempotranscurridodeltiro+1;
BallX = BallXwhenstriked+BallXSpeed*Tiempotranscurridodeltiro;
setProperty (BallShadow, _x, BallX);
setProperty (Ball, _x, BallX);
BallY = BallYwhenstriked+BallYSpeed*Tiempotranscurridodeltiro;
setProperty (BallShadow, _y, BallY);
DistanciaXYrecorrida = AlexFuerzadetiros * Tiempotranscurridodeltiro * C;
Senodelangulodeltiro = Math.sqrt(1-C*C);
BallZ = BallZwhenstriked + AlexFuerzadetiros * Tiempotranscurridodeltiro * Senodelangulodeltiro;
BallZ = BallZ - 0.01 * Tiempotranscurridodeltiro*Tiempotranscurridodeltiro /2;
// BallZSpeed = BallZSpeed-0.01;
// BallZ = BallZ+BallZSpeed;
if (BallZ<=0) {
// Si la pelota llega al suelo, BallZSpeed se invierte con disminución según la cancha.
BallZ = 0;
BallZSpeed = BallZSpeed*Fuerzaderebotedepelota;
// Si BallZSpeed es menor que 0.01: Queda en 0.
if (BallZSpeed<0.01) {
BallZSpeed = 0;
}
// La pelots, al rozarse con el suelo, disminuye sus velocidades.
// BallXSpeed = BallXSpeed+Influenciadelrozamiento;
if (BallXSpeed>0) {
BallXSpeed = 0;
}
// BallYSpeed = BallYSpeed+Influenciadelrozamiento;
if (BallYSpeed>0) {
BallYSpeed = 0;
}
}
setProperty (Ball, _y, BallY-BallZ);
BallZoom = 100+BallZ;
setProperty (Ball, _xscale, BallZoom);
setProperty (Ball, _yscale, BallZoom);
if (Ballreachedred == 0) {
if (BallY <= 300) {
        // Si llegó a la red.
        Ballreachedred = 1;
        BallZwhenreachedred = BallZ;
attachMovie("BallShadowMovie", "BallShadow2", 49);
setProperty (BallShadow2, _x, BallX);
setProperty (BallShadow2, _y, BallY);
attachMovie("BallMovie", "Ball2", 98);
setProperty (Ball2, _x, BallX);
setProperty (Ball2, _y, BallY-BallZ);
setProperty (Ball2, _xscale, BallZoom);
setProperty (Ball2, _yscale, BallZoom);
        }
    }
}
//
function Alexserving () {
Ballmoving();
Timesincebeginserve = Timesincebeginserve+1;
if (Timesincebeginserve == Alextimetodownracket) {
// Desaparece la chispa y Alex queda con la raqueta abajo.
Alex.gotoAndStop(5);
} else if (Timesincebeginserve == 5) {
// Deaaparece la chispa.
Alex.gotoAndStop(4);
} else if (Timesincebeginserve == Alextimetoupracket) {
// Alex queda listo para moverse, etc.
Alex.gotoAndStop(6);
gotoAndStop (5);
// Funcencurso = ""; hay q ver si el saque toca la red.
}
}
// falta indicar dirección
// El rozamiento funciona mal, uno se reduce a 0 antes que el otro.
// El tamaño de la chispa debería depender de cuánta fuerza se use, no de la usable.
// Asignar demasiada fuerza hace que la animación no ocurra bien
Funcencurso = "Alexmovetoserve";
[/spoiler]

Sólo lo relevante:
[spoiler] // La mínima BallZ que no toca la red es 18.6.
// Datos para determinar velocidades del tiro.
DistanciahastaDestinoX = 280.1-BallX;
DistanciahastaDestinoY = 180-BallY;
DistanciahastaMinsafeBallZ = BallZ-18.6;
BallZwhenstriked = BallZ;
DistanciahastaDestinoXY = Math.sqrt(DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY);
DistanciahastaRed = DistanciahastaDestinoXY * Math.abs(BallY-300) / DistanciahastaDestinoY;
// Determinando velocidades del tiro.
BallXSpeed = DistanciahastaDestinoX/DistanciahastaDestinoXY*AlexFuerzadetiros;
BallYSpeed = DistanciahastaDestinoY/DistanciahastaDestinoXY*AlexFuerzadetiros;
BallZSpeed = 0;
// Datos para determinar posiciones de la pelota.
Tiempotranscurridodeltiro = 0;
BallXwhenstriked = BallX;
BallYwhenstriked = BallY;
function Ballmoving () {
Tiempotranscurridodeltiro = Tiempotranscurridodeltiro+1;
BallX = BallXwhenstriked+BallXSpeed*Tiempotranscurridodeltiro;
BallY = BallYwhenstriked+BallYSpeed*Tiempotranscurridodeltiro;
        DistanciaXYrecorrida = AlexFuerzadetiros * Tiempotranscurridodeltiro * C;
        Senodelangulodeltiro = Math.sqrt(1-C*C);
        BallZ = BallZwhenstriked + AlexFuerzadetiros * Tiempotranscurridodeltiro * Senodelangulodeltiro;
        BallZ = BallZ - 0.01 * Tiempotranscurridodeltiro*Tiempotranscurridodeltiro /2;
}
[/spoiler]

Si el personaje tiene poca fuerza:
https://drive.google.com/file/d/1bY60WE73Gvh7eUFoRX8NAeuBoWIaYtNJ/view?usp=share_link

Algún error cometí o cometió porque el personaje está aplicando más fuerza de la que tiene y además la pelota debe pasar más cerca de la red.

Con un poco más:
https://drive.google.com/file/d/1YEhAz8nrcztWpttScLOeMekfXlZHUVZ9/view?usp=share_link

¿Qué está mal en el código? ¿o qué falta, qué hago?
#46
General Programadores / ¿Qué valores pueden obtenerse ...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:21:05 AM
Variables/valores de tipo número, texto o tabla (sería como un array 2d supongo).

Empezaré a hacer una lista y pseudocódigos, uds favor vayan agregando o pongan un link donde se responda esta pregunta o algo así, gracias.

Supongamos que la variable se llama V.

Desde tipo número obtener un número:
(sólo usar si se sabe que V es número).

1- Cantidad de caracteres.
Los lenguajes de programación suelen tener una función para esto, quizá antes es necesario convertir al número en texto.
Sin esa función tendría que ser algo como:
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V != vacío
      Largo++
   sino
      Lupa = -1
mientras Lupa != -1

2- Cantidad de caracteres sin contar el "-" (si tiene).
Los lenguajes suelen tener una función que convierte un número a su absoluto, pero sino podría ser:
Igual que el anterior pero luego poner:
Si el 1er caracter de V == "-"
__Largo--

3- Cantidad de caracteres sin contar la "," (si tiene).
ValorObtenido = Largo de (Quitar decimales a V)
Sin esa función o similares habría que hacer algo como:
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V != vacío y != ","
      Largo++
   sino
      Lupa = -1
mientras Lupa != -1

4- Cantidad de caracteres sin contar los (inserte número de un caracter).
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V != vacío y != (caracter)
      Largo++
   sino
      Lupa = -1
mientras Lupa != -1

5- Cantidad de caracteres sin contar los (inserte caracter1) ni los (inserte2).
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V != vacío y != (caracter1) y != (c2)
      Largo++
   sino
      Lupa = -1
mientras Lupa != -1
Si se tienen muchas excepciones, para evitar poner muchos ifs se podría hacer algo como:
// Excepciones (1 es excepción), se pueden poner hasta 10:
Char0 = 1
Char1 = 1
Char3 = 1
Char4 = 1
Char5 = 1
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V != vacío
      Si eval("Char"+(caracter nro Lupa de V)) != 1
         Largo++
   sino
      Lupa = -1
mientras Lupa != -1
Si se quiere exceptuar "," o "-" no sé cómo evitar agregar ifs para eso.

6- Cantidad de caracteres sin contar los (inserte 2 caracteres).
NoContar = (inserte2c)
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V es != vacío
      Si caracter nro Lupa de V == caracter nro 1 de NoContar
         Lupa++
         Si caracter nro Lupa de V != caracter nro 2 de NoContar
            Lupa--
            Largo++
   sino
      Lupa = -1
mientras Lupa != -1
Creo...

7- Cantidad de caracteres sin contar los (inserte un número).
Se puede hacer como el anterior pero si la excepción es más larga que la cantidad de caracteres analizados en el código no funcionará bien. Para que funcione bien habría que meter un while pero no soy muy hábil en eso, a ver:
Excepcion = (inserte número)
ExcepcionLargo = Largo de Excepcion, duh!
Largo = 0
Lupa = -1
Repetir
   Lupa++
   Si caracter nro Lupa de V es != vacío
      Si caracter nro Lupa de V == caracter nro 1 de Excepcion
         LupaBackup = Lupa
         Lupa2 = 0
         Repetir
            Lupa2++
            Si caracter nro Lupa2 de Excepcion == vacío
               // La excepción ocurrió
               Lupa2 = -1
            sino si caracter nro Lupa2 de Excepcion != caracter nro Lupa de V
               // La excepción no ocurrió
               Largo++
               Lupa = LupaBackup
               Lupa2 = -1
            sino
               Lupa++
               Lupa2++
         mientras Lupa2 != -1
      sino
         Largo++
   sino
      Lupa = -1
mientras Lupa != -1
Probablemente tenga algún error.

8- Cantidad de caracteres sin contar los (inserte número1, número2...).
// Inserte todas las excepciones que quiera, con el formato Ex(número aquí).
Ex(inserte número1) = 1
Ex(inserte número2) = 1
Ex(inserte número3) = 1
Ex(inserte número4) = 1
Ex(inserte número5) = 1
ExMinLargo = (inserte)
ExMaxLargo = (inserte)
Largo = 0
Lupa = -1
MaxLupa = (Largo de V) - ExMinLargo
Si MaxLupa < 0
   // La excepción más corta es más larga que V, ergo no está incluída.
   Largo = Largo de V
sino si MaxLupa == 0
   // La excepción más corta es igual de larga que V, ergo basta con chequear ese largo.
   Si eval("Ex"+NumaChequear) != 1
      Largo = Largo de V
   sino
      Largo = 0
sino
   Repetir
      Lupa++
      Lupa2 = Lupa
      NumaChequear = ""
      // Lo siguiente toma tantos caracteres de V como son necesarios para tener el largo igual al largo de la excepción más corta.
      Repetir
         Lupa2++
         Si caracter nro Lupa2 de V es != vacío
            NumaChequear = Concatenar (NumaChequear, (Caracter nro Lupa2 de V))
         sino
            // V ya no tiene caracteres sin chequear, ergo no hay más excepciones, fin.
            Largo = Largo + Lupa2 - Lupa
            Lupa2 = ExMinLargo+1
      mientras Lupa2 < ExMinLargo
      Si Lupa2 != ExMinLargo+1
         // Si V aún tiene caracteres sin chequear.
         Si eval("Ex"+NumaChequear) != 1
            // El número tomado no es excepción. Se agregarán caracteres hasta que no haya, o hallar una excepción, o superar el largo de la excepción más larga.
            Repetir
               Lupa2++
               Si caracter nro Lupa2 de V es == vacío
                  Lupa2 = ExMaxLargo+1
               sino
                  NumaChequear = Concatenar (NumaChequear, (Caracter nro Lupa2 de V))
                  Si eval("Ex"+NumaChequear) == 1
                     // Es una excepción.
                     Lupa2 = ExMaxLargo+1
            mientras Lupa2 < ExMaxLargo
            Si Lupa2 == ExMaxLargo+1
               Largo++
   mientras Lupa < MaxLupa
Más probablemete tenga error, me perdí bastante.

Bueno dejaré de hacer estos códigos por un tiempo, primero me interesa ver qué se puede obtener de una variable.

Próximamente posteo casos de contar caracteres específicos e iré posteando más cosas.
#47
General / ¿Tienen un link o método para ...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:14:30 AM
Veo que tienen un link que dice ver temas recientes pero muestra los posts, yo quisiera ver una lista larga de sólo títulos ¿tienen algo así? Gracias.

PD: ¿Cuando me van a quitar la Verificación?
#48
General / ¿Cómo hacer un diagrama de flu...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:08:52 AM
Es un lío este asunto.

El diagrama lo quiero serio y con todas las opciones posibles, pero como base pueden imaginar algo así:


¿Por dónde empezar a hacerlo? Ese empieza en una pregunta, según eso yo debería empezar por plantear una pregunta ¿cual? Se me ocurre:
¿Qué nivel de complejidad quieres que tenga en qué consiste el desafío?
No se refiere a cuan difícil es de cumplir, sino de describir en qué consiste.

Las posibles respuestas yo diría que son números: 1, 2, 3... cada uno indica un nivel.

El nivel 1 debería ser el más sencillo de todos, pero no debe ser "intenta pasar el juego como te de la gana", eso no es un desafío como los que estoy planteando. Se me ocurre que en el nivel 1 se trate de pasar el juego, sólo se tenga en cuenta 1 variable 1 vez (al final del juego), y que sea tomada como tal, es decir no se toma una parte ni característica suya ni se transforma. Así, algunas posibles respuestas serían:
C: Juega de modo que cuando pases el juego la cantidad de cheats activos sea la mínima posible.
L: Juega de modo que cuando pases el juego el LV (nivel) de tu personaje nro1 sea el mínimo posible.
Debería entenderse que en el 1er caso es válido usar cheats hasta casi al final, sólo importa el valor en el momento final. Lo mismo pasa con el LV en el 2ndo caso, podría tenerse cualquiera durante casi todo el juego, sólo importa el valor final.

El nivel de complejidad podría medirse así:
"Es intentar pasar el juego(+1), y sólo se considera 1(+1) variable como tal(*1) 1 vez(*1)."
Los números entre paréntesis indican cuánto lo anterior está sumando a la complejidad.
1+1*1*1 = 2
Es decir, el nivel sería esa ecuación -1, o el nivel 1 podría ser "pásalo como quieras" y el nivel 2 sería este. Mejor así. También puede verse como tipo 1111.

En el nivel 3 se me ocurre que se aumente 1 cosita (sí... chiquita, que sólo con eso ya se poner complejísimo) de las mencionadas, o se aumenta un poquito la complejidad de alguna manera.
Nota: Por practicidad llamaré bugs también a los glitches, aunque de hecho la mayoría no sabemos la diferencia.
Tipo 111210P1: Es intentar pasar el juego(+1), y sólo se considera 1(+1) variable como tal(*1) 2 veces(*2): A(al inicio o luego de modificar el valor mediante algún X(+1 si X es cheat, +1 si bug, +2 si es cualquiera) por última vez) y B(al final, +0), siendo B más prioritario(+1) que A.
Esto es mínimo 1+1*1*2+1+0+1, que es 5, así que es de nivel 5, no va aquí.
Tipo 111210C11: Es intentar pasar el juego(+1), y sólo se considera 1(+1) variable como tal(*1) 2 veces(*2): A(al inicio o luego de modificar el valor mediante algún X(+1 si X es cheat, +1 si bug, +2 si es cualquiera) por última vez) y B(al final, +0), las cuales deben cumplir cierta relación entre sí(+1) sin interacción(*1).
Esto es mínimo 1+1*1*2+1+0+1*1+0, que es 5, tampoco va aquí.
Tipo 111210I11: Es intentar pasar el juego(+1), y sólo se considera 1(+1) variable como tal(*1) 2 veces(*2): A(al inicio o... +1 o +2) y B(al final, +0), las cuales interaccionan de modo simple(+1) sin condiciones(*1).
Mínimo 5 también, no va.
Tipo 112111: Es intentar pasar el juego(+1), y sólo se considera 1(+1) variable como base(*???) 1 vez(*1), sin interacción(*1) ni condiciones(*1). Ejemplos:
H: Juega de modo que cuando pases el juego el largo del HP (puntos de vida) de tu personaje nro2 sea el mínimo posible.
$: Juega de modo que cuando pases el juego la cantidad de tu dinero tenga la menor cantidad de caracteres repetidos posible.
¿Cómo se mediría la complejidad de considerar a una variable "como base", es decir del hecho de obtener un valor a partir de ella? Veremos más adelante.
Tipo 1211P1: Es intentar pasar el juego(+1), y sólo se consideran 2(+2) variables como tales(*1) 1 vez(*1), siendo A más prioritaria(+1) que B.
Mínimo 4, no va.
Tipo 1211C11: Es intentar pasar el juego(+1), y sólo se consideran 2(+2) variables como tales(*1) 1 vez(*1), las cuales deben cumplir cierta relación entre sí(+1) sin interacción(*1).
Mínimo 4, no va.
Tipo 1211I11: Es intentar pasar el juego(+1), y sólo se consideran 2(+2) variables como tales(*1) 1 vez(*1), las cuales interaccionan de modo simple(+1) sin condiciones(*1).
Mínimo 4, no va.
Tipo 2111: Es intentar llegar a cierto punto(+2), y sólo se considera 1(+1) variable como tal(*1) 1 vez(*1). Ejemplos:
M: Juega de modo que cuando venzas al enemigo más difícil el MP (puntos de magia) de tu personaje nro3 sea el máximo posible.
F: Juega de modo que cuando llegues a la ciudad nro4 la fuerza de tu personaje nro5 sea la mínima posible.

¿Cómo se mediría la complejidad de considerar a una variable "como base", es decir del hecho de obtener un valor a partir de ella?
Yo diría que según cuántos valores y condiciones se usen, aunque habría que especificar más.
Por ejemplo:
El largo de una variable se obtiene contando cuántos caracteres tiene, no se especifica algún valor para eso ni alguna condición; como complejidad vale *1. 0 valores: *(0+1).
Contar cuántas veces se repite el caracter 0 implica decir ese valor, como complejidad vale *2. 1 valor: *(1+1).
Valor de la complejidad: *(Cantidad de valores nombrados+1).

En fin, no parece tan complicado, pensé que iba a llegar pronto a la parte complicada, pero me equivoqué, iré a ello entonces. Una interacción entre variables es como una operación: A+B, A*B-C, etc. Una de las posibles interacciones es concatenar las variables. Eso puede dar resultados como 05 (0 y 5); -32-47 (-32 y -47); 0,19,6 (0,1 y 9,6), etc, los cuales parece claro que en cierto punto es necesario transformar en otros, pero es un tanto subjetivo en qué deben convertirse. Tampoco es que deban convertirse justo luego de una concatenación, se puedan obtener características de esos "valores sin sentido", como el valor simétrico más parecido. Y en definitiva, se puede transformar una variable o hacer que algunas interactúen, según condiciones. Así como se puede hacer algo como:
Si A es 01 o 02, etc
__A=0
es decir transformar un valor sin sentido en un número, también se podría hacer algo como:
Si 10 < A y A < 20
__A=11
es decir transformar un número en otro, o incluso en un valor sin sentido ¿para qué? No sé, en el ejemplo si A es la cantidad de enemigos vencidos y se pide que sean el mínimo posible, con esta especificación si se vencen más de 10 entonces se puede vencer hasta 19 sin problema. Es un posible desafío, puede que no tenga sentido, pero como dije puede haber alguna cosa parecida que sí. Convertir números en valores sin sentido puede que sirva para obtener propiedades de ellos como en el ejemplo que di (simétrico más parecido).

Y bueno, a mí me parece complicado porque no veo claro qué es cada cosa ni por dónde empezar.

¿Tomar como base es un tipo de transformación, o una transformación es un tipo de tomar como base, o eso no importa?
Lo que me parece es que ambos procesos usan una variable como base y obtienen un valor partir de eso, la diferencia es que una transformación siempre usa condiciones.

Lo que tenemos a partir de eso es que para ver las posibles transformaciones primero debemos ver las posibles condiciones.
Condiciones -> Transformaciones.

¿Cuales son las variaciones de tomar como base? O dicho de otro modo: ¿Qué valores se pueden obtener de una variable?
El proceso de obtener uno puede implicar condiciones e interacciones (no necesariamente entre variables, puede implicar valores fijos, es decir, no tomados del juego). Pero bueno, se podría empezar por esto, por los procesos de obtener un valor a partir de una variable, sin usar condiciones ni interacciones. Pensaré en ello.

Ahora tenemos:
Condiciones -> Transformaciones.
Condiciones -> Tomar como base.
Interacciones -> Tomar como base.

Las condiciones pueden implicar tomar como base e interacciones. ¿Y transformaciones? No sé, pero si fuera el caso es un problema porque contradice lo de la rayita que puse antes ¿para hacer la lista de A requiero hacer la lista de B y para hacer la lista de B requiero hacer la lista de A? ¿cómo rayos hago entonces?

¿Condiciones <-> Transformaciones?
¡Condiciones <-> Tomar como base!
Interacciones -> Tomar como base.
Interacciones -> Condiciones.

Las interacciones pueden implicar tomar como base, condiciones ¿y transformaciones? No sé.

¿Condiciones <-> Transformaciones?
¡Condiciones <-> Tomar como base!
¡Interacciones <-> Tomar como base!
¡Interacciones <-> Condiciones!

¿Se entiende? ¿cómo puedo hacer una lista de cosas X si para eso necesito una lista Y que para hacerla necesito una lista X? O estoy confundido en algo.
#49
General / Los botones del editor se me v...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:04:05 AM


¿Qué hago?
#50
General / Re:¿ERES NUEVO EN STRATOS? ¡PR...
Último mensaje de Tachikomaia - 29 de Abril de 2023, 07:02:51 AM
¿Dónde están las reglas? Mi presentación es mediante acciones. Ah, es que los botones del editor están mal, pensé que no se me permitían usar por ser nuevo, quería ver cuales eran los requisitos. Miren, así se me ven:

Lo publico en otro tema aparte, anyway.





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.