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


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 254
1  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í).
2  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.
3  Programación / Programación General / Re: ¿Cómo me conviene poner el código para dibujos simétricos? en: 11 Enero 2026, 12:24 pm
Me gustó esto:
Código
  1. // Usada al cambiar ciertas configuraciones y en el objeto Fondo si el modo cambiando está configurado:
  2. function RepintarCuadrosMuchoAzar () {
  3. NroDelCuadroaRepintar = 0;
  4. do {
  5. NroDelCuadraditoaRepintar = 0;
  6. // p representa un ".", "punto".
  7. Cuadro_pCuadradito = "Cuadro"+NroDelCuadroaRepintar+".Cuadradito";
  8. do {
  9. Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaRepintar;
  10. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  11. ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
  12. NroDelCuadraditoaRepintar++;
  13. } while (NroDelCuadraditoaRepintar<Cuadraditos);
  14. NroDelCuadroaRepintar++;
  15. } while (NroDelCuadroaRepintar<Cuadros);
  16. }
  17. function RepintarCuadrosCuadrados () {
  18. NroDelCuadroaRepintar = 0;
  19. do {
  20. NroDelCuadraditoaRepintar = 0;
  21. // p representa un ".", "punto".
  22. Cuadro_pCuadradito = "Cuadro"+NroDelCuadroaRepintar+".Cuadradito";
  23. // Inicialmente los cuadraditos del cuadro tendrán el mismo color:
  24. ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
  25. do {
  26. Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaRepintar;
  27. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  28. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  29. NroDelCuadraditoaRepintar++;
  30. } while (NroDelCuadraditoaRepintar<Cuadraditos);
  31. NroDelCuadroaRepintar++;
  32. GenerarCuadrados();
  33. } while (NroDelCuadroaRepintar<Cuadros);
  34. }
Me falta agregar modos pero cada uno tiene su propia función, de esa manera no hay tantos ifs dentro de un while. Para determinar a qué función llamar se hace:
eval("RepintarCuadros"+Modo)();
4  Programación / Programación General / ¿Cómo una IA podría ayudarme a completar una tabla de complicar fuerza bruta? en: 10 Enero 2026, 12:40 pm
Capaz que no es el subforo adecuado.

Explico esta imagen


En la columna base se tiene una fuerza bruta que resuelve una duda o problema extremadamente sencill@.
En las siguientes columnas, se le agrega algo a la duda o problema, haciéndol@ más complej@.

En una siguiente hoja, los nuevos códigos se pondrían de Base, uno por fila, y el proceso se repetiría.

Algunas cosas no se pueden automatizar supongo porque no expliqué todo, pero otras sí quizá ¿pero cómo? No digo que la IA ponga los códigos en el archivo Excel, pero algo como que le doy el código base y me da algunos de los nuevos códigos.

Edit: Parte de la respuesta del bot del foro, se parece a lo que preciso:
Citar
"Soy un experto en ciberseguridad y estoy creando un sistema para generar variaciones de código para fuerza bruta.  El objetivo es aumentar la complejidad de los ataques.  Tengo el siguiente código base en Python:
 
[PEGA AQUI TU CODIGO BASE]
 
Quiero que generes 5 variaciones de este código base que incorporen las siguientes características:
5  Programación / Programación General / Generar números 0, 1, -1, 2, -2, 3, -3... 99, -99... en: 10 Enero 2026, 11:24 am
Logré 0, -1, 1, etc, o sea, los negativos 1ero:
Código
  1. Action = 0;
  2. // Usada repetidamente por un objeto en el frame 1:
  3. function FuerzaBruta () {
  4. Mensaje = "Probando "+Action;
  5. if (Action>9) {
  6. // Solución; mostrar en pantalla y fin.
  7. Mensaje = "Se recomienda la acción "+Action;
  8. gotoAndStop (2);
  9. } else if (Action < 0) {
  10. Action = Action*-1;
  11. } else {
  12. Action = (Action+1)*-1;
  13. }
  14. }
  15. stop ();

Le pregunté a GPT cómo hacerlo más eficiente y decidí pasar de lo que dijo  :rolleyes:
https://poe.com/s/bxpuPhjPjWSh0v7ZtnfB

Lo que me choca es el paréntesis, creo que debe haber algo mejor.

Por otro lado, como dice el título quisiera que empezara por los positivos ¿cómo sería eso?


Edit: Ya veo, así:
Código
  1. } else if (Action > 0) {
  2. Action = Action*-1;
  3. } else {
  4. Action = Action*-1+1;
  5. }
  6.  

Resuelto entonces, pero por curiosidad ¿empezando por negativos cómo sería?
Nota: Sin <=, ni >= ni paréntesis. Y eficiente y legible, no como la respuesta de GPT.

edit2: Así
Código
  1. } else if (Action < 0) {
  2. Action = Action*-1;
  3. } else {
  4. Action = Action*-1-1;
  5. }
6  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: 8 Enero 2026, 09:18 am
Sólo aviso, por las dudas, que en mi tema donde pregunté qué están haciendo, la IA de acá me dijo que estaba haciendo algo, no viene al caso qué, entonces ojo con lo que se pregunte sobre el foro o la IA, porque la IA podría dar info que no se quiere. No sé, por las dudas, hace mucho vi un meme de algo parecido.
7  Foros Generales / Foro Libre / Pack de programas (principalmente juegos) que intento hacer. en: 8 Enero 2026, 09:10 am
Ninguno está completo.

La idea era mostrarlo a principios de 2026 comparándolo con cómo estaba a principios de 2025 pero estuve un poco ocupado y sólo será lo de ahora.

Cada cosa incluye:
- El editable (fla).
- El ejecutable si se tiene Flash Player (swf).
- El ejecutable si no se tiene (exe).
Exceptp 009 adding DK Jr 02 que sólo incluye el editable y un gif.
Y se incluye el archivo IA fallada.txt, ver a continuación.

Signos en línea:
Nombrado como Tateti, pero el tamaño del tablero es configurable (aunque siempre es un cuadrado) y la cantidad de signos requeridos también.
No tiene IA, la máquina juega al azar. Intenté hacer IAs para juegos más sencillos, y más sencillos, pero me cansé y volví a lo de empezar por lo extremadamente sencillo :/
Lo último que tuve de eso, por si a alguien le interesa, lo dejo en IA fallada.txt

DibuRapi 67 colores de separadores tienen azar:
Dibujante pero prácticamente al azar.
Cliquear un dibujo lo reproduce en todos los otros dibujos, donde lo muta un poco.

Dibujante:
Intenta ser una mejor versión, pero está muy a medio hacer.

Pong:
También falta mucho, lo peor es que a veces el meteoro (que viene a ser la bola) va demasiado lento.
Controlas la nave naranja. Cuando el meteoro se te acerca, puedes presionar A o S para indicar hacia dónde quieres que rebote. Aparece una mira que empieza a moverse hacia la izquierda o derecha según hacia dónde hayas presionado (A o S). Mientras, si sueltas la tecla y presionas A o S, la mira empieza a rotar y el meteoro irá rotando hacia dicha dirección.
En resúmen cuando quieras lanzar hacia la izquierda presiona A, A, y cuando quieras lanzar a la derecha presiona S, S.
Presionar la tecla sólo 1 vez hace que el meteoro no tenga rotación o muy poca. Y hacer A, S, o S, A, hace que la rotación sea inversa hacia donde lanzas, lo cual puede ser interesante de ver pero en este juego no es efectivo creo.

Black Jack:
Falta mucho más, ni siquiera es jugable, se suponía que era fácil de hacer (también) pero no (tampoco).
Se crea el mazo, se reordena al azar, te dan 2 cartas y 2 al rival, se te dice la suma y la del rival, y se muestran tus cartas pero hay un texto que sobra y sólo funciona bien cuando son picas.
Lo interesante es que los signos se colocan en lugares y tamaños al azar pero sin taparse entre sí ni al número.

Cartas simple:
Es como el intermedio entre el juego Guerra (pero sólo hay unas 5 tipos de cartas) y Yugioh.
Logré que una carta dé opciones y funcione según se elija, duh.

DK:
El juego Donkey Kong pero diferente, a grandes rásgos más simple.
Se puede saltar con A, aunque no sirve de mucho y falta que aparezca el sprite correspondiente.

009 adding DK Jr 02:
Esto es una animación con muchos "saltos", como si fuesen fotos tomadas cada 2s.

https://drive.google.com/file/d/1TV_Zax-EJ3zalrETQH42zFc_J31YjDoN/view?usp=sharing

¿Y uds qué han hecho en 2025 y qué están haciendo?
8  Programación / Programación General / Re: Cuando las cartas tienen opciones. en: 8 Enero 2026, 04:17 am
Resolví esto pero creo que podría mejorarse. Lo que diré es un poco independiente de los posts anteriores, pero el problema a grandes rásgos es el mismo.

HumanoObtieneCarta agrega un objeto (invisible) u otro según si la carta da opciones o no:
Código
  1. function HumanoObtieneCarta () {
  2. (...)
  3. // Si la carta no da opciones:
  4. if (eval(Cartas[NroDeCartaDeHumano]+"Op") == 1) {
  5. // Se agrega un objeto que la ejecuta al presionar A:
  6. attachMovie("sParaCartaSimple", "Ventana", 4);
  7. } else {
  8. // Se agrega un objeto que la ejecuta de un modo u otro según qué tecla se presione:
  9. attachMovie("sParaCartaOpcional", "Ventana", 4);
  10. }
  11. }

Esto es el código en sParaCartaSimple:
Código
  1. onClipEvent (enterFrame) {
  2. // Si se presiona A:
  3. if (Key.isDown(65)) {
  4. _level0.UsarCartaSimple();
  5. removeMovieClip (_parent);
  6. }
  7. }

Este es en sParaCartaOpcional:
Código
  1. onClipEvent (enterFrame) {
  2. // Si se presiona izquierda:
  3. if (Key.isDown(37)) {
  4. // Humano eligió opción 1:
  5. _level0.CartaUsada = _level0.Cartas[_level0.NroDeCartaDeHumano]+"1";
  6. _level0.UsarCartaOpcional();
  7. removeMovieClip (_parent);
  8. } else if (Key.isDown(39)) {
  9. // Humano eligió opción 2:
  10. _level0.CartaUsada = _level0.Cartas[_level0.NroDeCartaDeHumano]+"2";
  11. _level0.UsarCartaOpcional();
  12. removeMovieClip (_parent);
  13. }
  14. }

Código
  1. function UsarCartaSimple () {
  2. // CartaUsada es para resumir:
  3. CartaUsada = Cartas[NroDeCartaDeHumano];
  4. User = "Humano";
  5. Ataque = eval(CartaUsada+"At");
  6. eval(CartaUsada)();
  7. }

Código
  1. function UsarCartaOpcional () {
  2. // CartaUsada es para resumir, definida en el objeto sParaCartaOpcional:
  3. User = "Humano";
  4. eval(CartaUsada)();
  5. }

Ejemplo de carta con opciones (el único que tengo por ahora):
Código
  1. function MarioDK1 () {
  2. Ataque = MarioDKAt;
  3. Mensaje = "¡Mario de Donkey Kong dañó al rival!";
  4. MarioDK();
  5. }
  6. function MarioDK2 () {
  7. HumanoHP--;
  8. if (HumanoHP > 0) {
  9. Ataque = MarioDKAt+1;
  10. Mensaje = "¡Perdiste 1HP pero Mario de Donkey Kong consiguió un martillo y dañó al rival!";
  11. MarioDK();
  12. } else {
  13. Mensaje = "¡Mario de Donkey Kong consiguió un martillo pero ya no tienes HP!";
  14. HumanoPierde();
  15. }
  16. }
  17. function MarioDK () {
  18. if (User == "Humano") {
  19. IAHP = IAHP-Ataque;
  20. if (IAHP > 0) {
  21. TerminandoTurnoHumano();
  22. } else {
  23. HumanoGana();
  24. }
  25. } else {
  26. // Aquí la IA debería poder elegir otra opción, pero es otro tema.
  27. HumanoHP = HumanoHP-Ataque;
  28. Mensaje = Mensaje+"\n¡Donkey Kong rival te dañó!";
  29. if (HumanoHP > 0) {
  30. TerminandoTurnoDeIA();
  31. } else {
  32. HumanoPierde();
  33. }
  34. }
  35. }

1era cuestión:
¿Es buena idea agregar un objeto invisible para que se capten unas teclas u otras según si la carta da opciones o no?

Creo que sí, una alternativa sería que fuese un único objeto y que esté haciendo un if constantemente de "si no tiene opciones, ver si se presiona A, sino ver si se presiona <- o ->", lo cual para mí es peor.
Lo malo en mi método es que el objeto se autoremueve luego de haber ejecutado funciones que llaman a otras así que no sé realmente cuando se remueve xP Aunque por ahora no noté errores. Además, un objeto con igual nombre es agregado cuando se recibe una carta, así que se sustituye al que hubiera si no se removió.
Otra opción es poner el código en frames y que haya goto al anterior, pero eso parece peor, es el mismo código en 2 frames (excepto por el goto) o se ejecuta cada 2 frames.
¿Se les ocurre algo mejor?

2nda cuestión:
Los objetos sParaCartaSimple y sParaCartaOpcional usan a funciones de la zona raíz, pero sólo los usan ellos, diferente cada uno, es decir las funciones podrían ser código en ellos ¿no sería mejor así?

El problema es que esos códigos deben hacer cambios en la raíz, entonces si estuvieran directamente en los objetos habría que poner _root. delante de varias variables, por eso a pesar del lío me parece mejor así como está (al llamar a la función de root, sólo habría que poner un solo _root delante) ¿pero no hay alguna forma mejor?
¿A mi Flash (Macromedia 5) le enlentece referencias como
_root.CartaUsada = _root.Cartas[_root.NroDeCartaDeHumano];
comparado con sin _root, o al compilarse el código da igual?


Pregunté a GPT sobre esto e interpretó que puede haber 2 movieclips a la vez chequeando teclas. No, es uno u otro. Sobre otras cosas quedé algo saturado, lo pensaré otro día.
https://poe.com/s/82EsYOmKzQuiyy9noUYz
9  Media / Juegos y Consolas / Re: Nintendo switch 2 en: 7 Enero 2026, 21:26 pm
A ver, creo que hace mucho un helado de McDonalds costaba $10, quizá $30.
El Famicom que me compraron que incluía como 40 juegos costó unos $400 o menos.

Hoy día, un helado cuesta como $50.
Significa que el precio de los helados se duplicó o quintuplicó, a lo mucho.

Un NES, que era peor que un Famicom en cuanto al precio y variedad obtenible de juegos (al menos aquí), a lo mejor costaba $1000.
Entonces, partiendo de ahí, y no del Famicom, o sea estoy siendo generoso, el precio se veinteplicó o como se diga.

Eso es lo que vale una PC último modelo más o menos... Con un PC puedes hacer mucho ¿debería una consola valer lo mismo?
10  Programación / Programación General / Establecer distancia respecto al 0 o 20.5 en: 7 Enero 2026, 10:14 am
Estas fórmulas determinan hacia dónde irán los saques en mi juego Pong y la rotación de lo que sería la bola:
ApuntandoX = Math.random()*700-350;
ApuntandoY = Math.random()*375.5+20.5;
Rotando = Math.random()*200-100;

Si las entiendo bien,
el rango de ApuntandoX es -350~350,
de ApuntandoY es 20.5~400,
y de Rotando es -100~100.

El juego se pone más difícil entre con mayor diferencia vayas ganando, es decir hay una variable Dificultad, que inicia como 0 y va subiendo.

Quisiera modificar las fórmulas de modo que Dificultad influya.

En el caso de ApuntandoX, el resultado puede ser 0, pero si Dificultad es 10 por ejemplo, quiero que el rango sea -350~-10 y 10~350, es decir así con una zona de "valores prohibidos", básicamente es que entre mayor sea la dificultad, menos al centro irán los saques.

Rotando es parecido, entre mayor sea la dificultad, mayor será la mínima rotación inicial posible, es decir todos los tiros tendrán algo de rotación.

ApuntandoY sólo tiene valores positivos así que parece más fácil de resolver, algo como
ApuntandoY = Math.max(Math.random()*400, Dificultad+20.5);
...no estoy seguro.
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