elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 254
1  Foros Generales / Foro Libre / Re: Pack de programas (principalmente juegos) que intento hacer. en: Ayer a las 02:31
Si no explicaba iba a haber mucha decepción o enojo por lo incompleto que está. Y en el caso del Pong no se podría jugar bien.

Por qué Flash/ActionScript:
Intenté algunos otros entornos, IDES o como se llame y lenguajes pero no me gustaron o no me funcionaron tan rápido.
RPG maker nunca lo probé, en aquella época estaba enganchado con Flash y cada vez que intentaba hacer algo (principalmente dibujos o animaciones estilo novela visual pero como parte de RPGs) era con eso. Luego es que, pasaron muchas cosas, pero oí que algunos programas no te daban suficiente libertad, y a su vez quise aprender a usar esto, por curiosidad. Pero como digo no es que sea curioso en el sentido de probar cada alternativa, hay muchísimas que no probé.

Últimamente he estado deprimido o enojado por los ruidos y el humo, así que no he avanzado mucho en estas cuestiones.

Signos en línea:
Estoy practicando hacer IAs cada vez más complejas. Por un lado tengo una "tabla de IAs" que no sirve de mucho. Por otro lado tengo una IA muy básica:
Código
  1. // Situaciones a investigar:
  2. S1 = "";
  3. S2 = "0";
  4. S3 = "1";
  5. // Investigar S3 y S2:
  6. SInvestigandose = 3;
  7. do {
  8. BaseS = eval("S"+SInvestigandose);
  9. trace(BaseS);
  10. Action = 0;
  11. BestAction = 0;
  12. // Usando BestAction:
  13. BestChanceOfWin = 0;
  14. // Considerando todas las acciones:
  15. Wins = 0;
  16. Loses = 0;
  17. do {
  18. S = BaseS+Action;
  19. if (S == "11") {
  20. Wins++;
  21. BestAction = Action;
  22. BestChanceOfWin = 100;
  23. } else {
  24. Loses++;
  25. }
  26. Action++;
  27. } while (Action<2);
  28. // Guardar datos descubiertos de las situaciones:
  29. set ("S"+BaseS+"BestAction", BestAction);
  30. // Usando BestAction:
  31. set ("S"+BaseS+"BestChanceOfWin", BestChanceOfWin);
  32. // Considerando todas las acciones:
  33. set ("S"+BaseS+"Wins", Wins);
  34. set ("S"+BaseS+"Loses", Loses);
  35. set ("S"+BaseS+"ChanceOfWin", Wins*100/(Wins+Loses));
  36. // Investigar la situación anterior de la lista:
  37. SInvestigandose--;
  38. } while (SInvestigandose>1);
  39. // Investigar S1:
  40. BaseS = eval("S"+SInvestigandose);
  41. trace(BaseS);
  42. Action = 0;
  43. BestAction = "";
  44. // Usando BestAction:
  45. BestChanceOfWin = 0;
  46. // Considerando todas las acciones:
  47. Wins = 0;
  48. Loses = 0;
  49. do {
  50. S = BaseS+Action;
  51. NewS_ = "S"+S;
  52. NextBestChanceOfWin = eval(NewS_+"BestChanceOfWin");
  53. // La NewS da más chance de ganar, se sustituyen datos sobre qué hacer en esta y por qué:
  54. if (NextBestChanceOfWin>BestChanceOfWin) {
  55. BestAction = Action;
  56. BestChanceOfWin = NextBestChanceOfWin;
  57. }
  58. // Se agregan datos de la NewS:
  59. Wins = Wins+eval(NewS_+"Wins");
  60. Loses = Loses+eval(NewS_+"Loses");
  61. Action++;
  62. } while (Action<2);
  63. // Guardar datos descubiertos de la situación:
  64. set ("S"+BaseS+"BestAction", BestAction);
  65. // Usando BestAction:
  66. set ("S"+BaseS+"BestChanceOfWin", BestChanceOfWin);
  67. // Considerando todas las acciones:
  68. set ("S"+BaseS+"Wins", Wins);
  69. set ("S"+BaseS+"Loses", Loses);
  70. set ("S"+BaseS+"ChanceOfWin", Wins*100/(Wins+Loses));
La idea es agregarle la posibilidad de empate, un aliado que siempre haga lo mismo, optimizar el código, en fin, tengo anotadas cosas, ahora no recuerdo.

Dibujante:
Estoy mejorando el código y agregando opciones. Es posible generar:
- Dibujos totalmente al azar (con los colores que se especifique, esto es siempre).
- Simétricos (como si tuvieran un espejo vertical).
- Cuadrados.
- Rectángulos.
Y sí, la idea es agregar más, pero es un proceso lento...

Pong:
Puse que el rival tarde en reaccionar más según la diferencia de puntos y estoy mejorando la velocidad de los tiros, por ejemplo para que nunca sean tan lentos. También tengo varias ideas a aplicar.

Black Jack:
Ya se muestran bien todos los signos, salvo cuando hay muchos, digamos 50 (o sea muchas cartas también), no sé el motivo, pero lo que intento hacer por ahora es que al pedir otra carta (puede ser más de una vez) se reacomoden bien en la pantalla.

Cartas simple:
Esto lo dejé porque iba a seguir agregando cartas pero seguiría siendo un juego de demasiado azar así que me pareció que no tenía mucho sentido, decidí enfocarme en los demás proyectos.

DK:
Ya se muestra la animación de saltando, intento que pueda quedar encima de plataformas si cae en una.

La película:
No avancé hasta algo significativo.

Algo nuevo (aunque ya lo había intentado) es que con una tabla intento percibir juegos. Pero spn sólo cantidades de variables, no incluye situaciones o diferencias específicas como que debe rescatar a alguien o huir de algo, etc.
2  Foros Generales / Foro Libre / ¿Esto fue hecho con IA? Impresionante mini película de Final Fantasy 6. en: 7 Febrero 2026, 00:30 am
https://www.youtube.com/watch?v=FysJWe3oVZw

 :o :o :o

Si han visto algo parecido, muestren.

¿Las imágenes y las voces también? Otro día me fijo lo de las voces, pero es que lo dicen de forma confusa y en inglés, que es IA pero que están en contra ¿?
3  Programación / Programación General / ¿Por qué dice que no hay solución si se supone que sí? en: 3 Febrero 2026, 14:24 pm
Código
  1. Action1 = "";
  2. Action2 = "";
  3. // Usada repetidamente por un objeto en el frame 1:
  4. function FuerzaBruta () {
  5.    Mensaje = "Probando "+Action1+" y "+Action2;
  6.    if (Action1<Action2) {
  7. trace("Action1<Action2");
  8.        // Solución; mostrar en pantalla y fin.
  9.        Mensaje = "Se recomiendan las acciones "+Action1+" y "+Action2;
  10.        gotoAndStop (2);
  11.    } else if (Action1<"111") {
  12.        Action1 = Action1+"1";
  13. trace("Action1");
  14.    } else if (Action2<"111") {
  15.        Action1 = "";
  16.        Action2 = Action2+"1";
  17. trace("Action2");
  18.    } else {
  19.        Mensaje = "No se pudo hallar una solución";
  20.        gotoAndStop (2);
  21.    }
  22. }
  23. stop ();
  24.  

Ni siquiera me muestra los traces, o sea nunca se cumplen estas condiciones:
    if (Action1<Action2) {
    } else if (Action1<"111") {
    } else if (Action2<"111") {

Pero según GPT cuando una cadena se compara con otra se mira el valor ASCII o algo así de cada caracter, algo parecido a que se chequea qué cadena va 1ero en orden alfabético.

    if (Action1<Action2) {
deberia cumplirse en el par "" y "1", o en el par "1" y "11", etc. Salvo que cuando no haya caracteres diga "no hay con qué comparar, false".

    } else if (Action1<"111") {
Action1 empieza como "", y "" < "111", así que esta condición debería cumplirse.

En fin, intentaba hacer un código simple, sin usar lenght ¿es realmente necesario?

Citar
Operadores > < (menor que)

< (menor que)
Sintaxis

expresión1 < expresión2
Argumentos

expresión1, expresión2 Números o cadenas.

Descripción

Operador (de comparación); compara dos expresiones y determina si expresión1 es menor que expresión2 (true), o si expresión1 es mayor o igual que expresión2 (false). Las expresiones de cadena se evalúan y comparan basándose en el número de caracteres de la cadena.

Reproductor

Flash 4; Flash 5 o posterior. En Flash 5 < es un operador de comparación capaz de manejar varios tipos de datos. En Flash 4, < es un operador numérico. Los archivos de Flash 4 que se incorporen a un entorno de creación de Flash 5 sufren un proceso de conversión para mantener la integridad de los tipos de datos. El primer ejemplo a continuación muestra el proceso de conversión.

Ejemplo

A continuación se muestra un ejemplo de conversión de un archivo de Flash 4 que contenga una comparación de cualidad numérica.

Archivo de Flash 4:

x < y
Archivo de Flash 5 convertido:

Number(x) < Number(y)
El ejemplo siguiente muestra las devoluciones de true y false tanto para cadenas como para números:

3 < 10 or "Al" < "Jack" return true
10 < 3 or "Jack" < "Al" return false

Hmp. Tampoco es como dijo GPT del código ASCII, es por la longitud de la cadena, no es necesario poner length ¿pero entonces qué pasa?
Se debería cumplir esto
 } else if (Action1<"111") {
"" < "111"
¿por qué no se cumple?

Edit: El bot de acá tampoco acertó, dijo:
Citar
Ejemplo 1: "" < "1" → false

En ActionScript, una cadena vacía ("") no es menor que ninguna otra cadena en términos de comparación lexicográfica (basada en el orden de caracteres Unicode, no en longitud).
Pero acabo de poner que las variables Action inicien como "1" y al resetearse también, y el resultado es el mismo.
"1" no es < "11"

Edit2: Más simple:
Código
  1. Action1 = "1";
  2. Action2 = "1111";
  3.    if (Action1<Action2) {
  4. trace("jdbhbdhbdf");
  5. }
No se cumple.

Código
  1. Action1 = "1";
  2. Action2 = "a";
  3.    if (Action1<Action2) {
  4. trace("jdbhbdhbdf");
  5. }
Se cumple.

Código
  1. Action1 = "1";
  2. Action2 = "aaa";
  3.    if (Action1<Action2) {
  4. trace("jdbhbdhbdf");
  5. }
Se cumple.

O sea, lo que copié del manual parece que está equivocado ¿?
"Las expresiones de cadena se evalúan y comparan basándose en el número de caracteres de la cadena."
¿Quizá lo tradujeron mal del inglés?

Edit3: Creo que ya entendí al bot.
"1" < "11" no se cumple porque
"1" == "1"
"" nada "1" o sea se considera false según dijo.
4  Programación / Programación General / Problema al tomar cartas. en: 31 Enero 2026, 14:32 pm
En el siguiente video notarán varios errores pero céntrense en la posición de las cartas, estoy diciendo al juego que me de otra y otra, etc, y debería mostrarlas mejor posicionadas (las cartas, los símbolos en ellas son otro tema) ¿cómo lo logro?
https://youtu.be/o0IiQwvmSOY
Código
  1. // para tomar otra carta: Crear función para distribuir cartas y agregar 1, en vez de agregar y redistribuir todas cuando ya están.
  2.  
  3. // Generar array de cartas:
  4. Cartas = [];
  5. Nro = 0;
  6. do {
  7. Nro++;
  8. Cartas[Cartas.length] = "P"+Nro;
  9. Cartas[Cartas.length] = "T"+Nro;
  10. Cartas[Cartas.length] = "C"+Nro;
  11. Cartas[Cartas.length] = "D"+Nro;
  12. } while (Nro < 13);
  13.  
  14. // Ordenarlas al azar:
  15. // Eso creo que no tiene que ver así que no lo pongo acá.
  16.  
  17. // Dar 2 a jugadores:
  18. SiguienteNroDeCarta = 0;
  19. CartasDeHumano = [];
  20. // Para facilitar las sumas:
  21. NumerosDeHumano = [];
  22. CartasDeIA = [];
  23. do {
  24. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  25. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  26. CartasDeIA[CartasDeIA.length] = Cartas[SiguienteNroDeCarta+1];
  27. SiguienteNroDeCarta = SiguienteNroDeCarta+2;
  28. } while (SiguienteNroDeCarta < 4);
  29.  
  30. // Mostrarlas en pantalla:
  31. function MostrarCartasDeHumano () {
  32. NroDeCartaaMostrar = 0;
  33. if (CartasDeHumano.length % 2 == 0) {
  34. PosicionDe0 = 256 - CartasDeHumano.length-1 * 50 - 25;
  35. } else {
  36. PosicionDe0 = 256 - CartasDeHumano.length * 50;
  37. }
  38. // trace(PosicionDe0);
  39. do {
  40. NombreDeCarta = "CartaDeHumano"+CartasDeHumano[NroDeCartaaMostrar];
  41. attachMovie ("sCarta", NombreDeCarta, NroDeCartaaMostrar);
  42. setProperty (NombreDeCarta, _x, PosicionDe0+(NroDeCartaaMostrar)*150);
  43. setProperty (NombreDeCarta, _y, 192);
  44. // Para el interior de la carta:
  45. // Eso creo que no tiene que ver así que no lo pongo acá.
  46. NroDeCartaaMostrar++;
  47. } while (NroDeCartaaMostrar < CartasDeHumano.length);
  48. }
  49. MostrarCartasDeHumano();
  50.  
  51. // Calcular suma de humano:
  52. // Eso creo que no tiene que ver así que no lo pongo acá.
  53.  
  54. // Calcular suma de IA:
  55. // Eso creo que no tiene que ver así que no lo pongo acá.
  56.  
  57. // Tomar carta sí o no. Un objeto en F2 repite esto:
  58. function TomarCartaSoN () {
  59. // Si se presiona izquierda:
  60. if (Key.isDown(37)) {
  61. // Eso creo que no tiene que ver así que no lo pongo acá.
  62. } else if (Key.isDown(39)) {
  63. SiguienteNroDeCarta++;
  64. CartasDeHumano[CartasDeHumano.length] = Cartas[SiguienteNroDeCarta];
  65. NumerosDeHumano[NumerosDeHumano.length] = Number(Cartas[SiguienteNroDeCarta].substring(1, Cartas[SiguienteNroDeCarta].length));
  66. Mensaje = "Has recibido "+CartasDeHumano[CartasDeHumano.length];
  67. MostrarCartasDeHumano();
  68. }
  69. }
5  Foros Generales / Foro Libre / Re: Evaluen su equipo. en: 28 Enero 2026, 23:25 pm

A mi me sale lo mismo que a ti no se a que se debe si he puesto el comando exactamente igual que pone Songoku. :-(
Fue la 1era vez que usé un powershell, le pregunté a GPT cómo hacerlo.
Tiempo después de mostrar aquí el fallo le mostré la imagen y dijo que probablemente se deba a que mi versión de PS es demasiado antigua. No averigué más que eso.
6  Foros Generales / Noticias / Re: Los diputados franceses aprueban prohibir las redes sociales a menores de 15 años en: 27 Enero 2026, 20:29 pm
Parece que algunos políticos son adictos a prohibir cosas, ojalá los protejan de su adicción.
7  Programación / Programación General / ¿Pasos a seguir en "imitación" de Donkey Kong? en: 27 Enero 2026, 06:00 am
Me refiero a qué debería agregar o mejorar.

Foto:


Por ejemplo:
1- Debería haber un martillo en el centro de la pantalla y Mario debería poder agarrarlo.
2- Los barriles al tocar el suelo deberían empezar a rodar por él en vez de seguir de largo.
3- El objetivo del juego debería ser subir, así que debería haber...

El orden debe ser teniendo en cuenta qué es más fácil de hacer (eso se prefiere que esté 1ero) y qué es más importante (idem). Puede que sea imposible cumplir ambos criterios a la vez, pero más o menos.

Me interesa lo de que Mario pueda subir ¿pero cual sería la forma más fácil? No que una plataforma lo suba, claro, Mario debe poder moverse hacia los lados para esquivar los barriles.
Ya puse que Mario pueda saltar, y lo que se me ocurre es poner pisos con subida como en el juego original pero mucho más juntos, de modo que si Mario salta en el extremo de uno, puede que llegue al otro:
/
\
No tan así extremo pero si está en el de abajo a la izquierda, está tan cerca del de arriba que al saltar quedaría arriba.
Entonces por ahora no tendría que poner escaleras y que las pueda subir, que parece más difícil.
Otra posibilidad es que haya muchas plataformas, no, mejor pisos sin inclinación, muy juntos, y al saltar debe quedar en un piso de arriba y la pantalla debe bajar, como si la cámara siguiera a Mario y siempre mostrara lo que hay arriba, sino... Bueno, pueden ser 2 versiones distintas del juego, uno en que subes infinitamente y la cámara siempre te muestra abajo (algo como Ice Climber pero infinito, la dificultad aumenta al subir), y otro en que pasas de pantalla cuando llegas arriba del todo. Como es una imitación, haré eso último.

La pregunta así sería ¿cual sería la forma "correcta" de hacer que si el personaje saltó y cayó en una plataforma quede encima de ella?
En mi juego por ahora Mario no podría bajar, o sea, no sería como en el original en que muere si cae o si salta hacia un sitio muy bajo, ese no es el problema, lo que digo es que se podría poner que si salta queda más arriba al caer, porque no importa hacia dónde lo haga, hay piso, pero eso sería trampa, debe estar programado para chequear que haya piso y si hay que quede encima. A eso me refiero con "correcta".
La función que se ejecuta al saltar es:
Código
  1. function Jump () {
  2. Player._x = Player._x+DKMarioSpeedX;
  3. Player._y = Player._y+DKMarioSpeedY;
  4. DKMarioSpeedY = DKMarioSpeedY+0.015;
  5. if (Player._y >= 568) {
  6. Player._y = 568;
  7. Player.gotoAndStop(1);
  8. Quiet();
  9. }
  10. }
En vez de ese if debo poner que si DKMarioSpeedY es negativa... ¿entonces empezar a chequear piso por piso a ver si toca alguno? Sólo los que estén en la pantalla, pero en este caso son todos. No es que sean muchos, pero me parecía poco eficiente.
Pero no es "si lo toca", es "si está por encima, pero no tan por encima", m... ¿Entonces algo así:
Si Mario está cayendo
   PisoaChequar = 9
   do
      Si Mario está tocando el piso PisoaChequar
         Si Mario está por encima de (posición del piso PisoaChequar)
...más o menos entiendo la idea, pero me entrevera eso de que si está encima pero no tan encima. La posición de Mario está en los pies, eso ya lo tengo, así que si está tocando y está encima ¿alcanza con eso, debe quedar encima? La posición de la plataforma está en su centro.
Si la plataforma fuese muy alta:
M6
____M5_
M4
 P M3
M2
----M1--

M1 (Mario en la posición 1) la está tocando pero no está encima, así que seguirá subiendo por el salto.
M2 lo mismo.
M3 está justo en el centro vertical de la plataforma, pero no está bajando, así que seguirá. ¿Y si estuviera bajando? Debe seguir bajando, supongo.
M4 está por encima del centro, pero no encima de la parte de arriba. Si está subiendo seguirá ¿y si está bajando? Ponerlo encima de la plataforma suena mal, debe ocurrir sólo si estuvo encima.
M5 está justo en el suelo de la plataforma. ¿Acaso ese es el punto vertical que importa, no el centro? Obviamente si M está cayendo debe quedar encima, pero este caso es poco probable (posiciones exactamente iguales mientras M cae).
M6 no está tocando así que sigue su curso.

Haré las plataformas y "la trampa", el modo fácil, pero quisiera hacerlo bien y como ven no tengo del todo claro cómo sería.
8  Foros Generales / Foro Libre / Re: Evaluen su equipo. en: 27 Enero 2026, 02:38 am
9  Programación / Programación General / Re: Establecer distancia respecto al 0 o 20.5 en: 11 Enero 2026, 16:22 pm
Lo tengo así:
Código
  1. ApuntandoX = Math.max(Math.random()*350, Dificultad*10);
  2. ParaSigno = random(2);
  3. if (ParaSigno == 0) {
  4. ApuntandoX = -ApuntandoX;
  5. }
  6. ApuntandoY = Math.max(Math.random()*400, Dificultad*10+20.5);
  7. Rotando = Math.max(Math.random()*100, Dificultad*10);
  8. ParaSigno = random(2);
  9. if (ParaSigno == 0) {
  10. Rotando = -Rotando;
  11. }

Me falta confirmar que funcione como espero y crear la variable D¡ficultadx10 para no tener que estar multiplicando Dificultad a cada rato (o si siempre va a usarse como *10 la voy a ajustar, tengo que fijarme si se puede así).
10  Foros Generales / Sugerencias y dudas sobre el Foro / Re: AIehnBOT. Nueva Característica para usuarios registrados del foro. Un LLM (Como ChatGPT) que responde a los temas. en: 11 Enero 2026, 14:09 pm
Sugiero que el bot no se active cuando intento responder algo. No sé si lo habían corregido o no, pero pasa eso, te manda para el fondo de la pantalla y tienes que subir. Cuando quiero leerlo lo leo antes, así que cuando intento responder es molesto.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 254
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines