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


Tema destacado: Recopilación de Tutoriales y Manuales del blog ordenados por categorías


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 257
41  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
42  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?
43  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.
44  Programación / Programación General / ¿Cómo me conviene poner el código para dibujos simétricos? en: 7 Enero 2026, 08:10 am
El programa es un generador de 3 tipos de imágenes por ahora:

MuchoAzar: Lo que sería cada píxel lo pinta de un color al azar de una lista:


Cuadrados:


Y el que intento agregar: AzarrazA, que es como el azar pero simétrico así horizontalmente como se muestran las letras, no verticalmente.

Cuando se presiona un botón para cambiar el modo (en este caso a MuchoAzar), sucede esto:
Código
  1. on (release) {
  2. Modo = "MuchoAzar";
  3. RepintarCuadraditos();
  4. }

Es decir se usa esto:
Código
  1. function RepintarCuadraditos () {
  2. NroDelCuadroaRepintar = 0;
  3. do {
  4. NroDelCuadraditoaRepintar = 0;
  5. // p representa un ".", "punto".
  6. Cuadro_pCuadradito = "Cuadro"+NroDelCuadroaRepintar+".Cuadradito";
  7. if (Modo == "Cuadrados") {
  8. // Inicialmente los cuadraditos del cuadro tendrán...
  9. // el mismo color:
  10. ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
  11. trace("ColorDelCuadro: "+ColorDelCuadro);
  12. }
  13. do {
  14. Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaRepintar;
  15. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  16. if (Modo == "MuchoAzar") {
  17. ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
  18. } else if (Modo == "Cuadrados") {
  19. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  20. }
  21. NroDelCuadraditoaRepintar++;
  22. } while (NroDelCuadraditoaRepintar<Cuadraditos);
  23. NroDelCuadroaRepintar++;
  24. if (Modo == "Cuadrados") {
  25. GenerarCuadrados();
  26. }
  27. } while (NroDelCuadroaRepintar<Cuadros);
  28. }

En ese código debo poner el caso para el modo AzarrazA ¿cómo me conviene ponerlo?
Es que en ese código todos los cuadraditos se pintan de una u otra forma, pero en este caso si están a la derecha del medio (de un cuadro, no de la pantalla) van a tener que imitar el color que se haya seleccionado para su pixel (o cuadradito) opuesto, lo que se me acaba de ocurrir es poner:
Código
  1. if (Modo == "MuchoAzar") {
  2. ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
  3. } else if (Modo == "AzarrazA") {
  4. Si el cuadradito a pintar no está a la derecha del centro del cuadro:
  5. ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
  6. sino
  7. pintarlo igual que su opuesto
  8. fin del si
  9. } else if (Modo == "Cuadrados") {
  10. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  11. }

Creo que con eso estaría bien, pensé que no porque tengo la manía de querer evitar ifs, ah, cierto ¿no sería mejor crear un código aparte para los que deba pintar al azar y luego otro para los que deban ser imitaciones? El problema es que parece más complicado hacerlo.
45  Media / Juegos y Consolas / Re: Nintendo switch 2 en: 7 Enero 2026, 05:49 am
Según vi son 469.99 euros, que en pesos uruguayos son casi $22000. A menos que la consola ponga huevos de oro o algo parecido, para mí no. También habría que gastar en juegos. Si tienes PC debería bastarte con juegos de PC y emuladores. Con ese dinero, capaz que podrías abrir una empresa o algo, no sé.
46  Foros Generales / Foro Libre / Re: Un lobo, una boya y una trampa de cangrejos: ¿estamos ante el primer caso documentado de uso de herramientas en lobo en: 6 Enero 2026, 22:20 pm
¿Es una especie de jaula y los cangrejos quedan en una especie de vasito? No entendí eso.

Bien por los lobos, pero ¿ellos las vuelven a poner? Sino, no creo que sea uso de herramientas, es más como arrastrar a un animal mordiéndole una pata en vez de las costillas o algo así.
47  Foros Generales / Foro Libre / Re: EE UU ataca objetivos militares en Venezuela y detiene a Nicolás Maduro en: 6 Enero 2026, 02:00 am
En otro foro se habló de rescatar a un presidente (de EEUU creo), luego se dijo como chiste que a Maduro, yo hice un chiste parecido, y alguien (posiblemente de EEUU) dijo que podría ser ofensivo para los venezolanos llamarle presidente, entonces le expliqué que al parecer hay gente que lo apoya, le mostré el video de aquí que literalmente dice que fue un ataque contra los venezolanos (no lo creo, pero él lo dice), que algunos dicen que Venezuela está mal debido a un bloqueo de EEUU, y mi post fue borrado  :-X
48  Programación / Programación General / Evitar línea en blanco. en: 5 Enero 2026, 06:57 am
Problema tontuelo se supone.

Normalmente ocurre algo como esto:
lo normal es algo como
-----------------------------------------------------------------
¡(tu carta causó un efecto)!

Es el turno del rival
¡(su carta causó un efecto)!

Es tu turno
Has obtenido a (carta)
-----------------------------------------------------------------
Al usar una carta, todo eso se borra. Pero hay una carta que deja una línea en blanco antes de borrar. Cuando se obtiene, da 2 opciones, se ejecuta la elegida y luego (si se sobrevive) se ejecuta otro código.

Código
  1. function MarioDK1 () {
  2. Ataque = MarioDKAt;
  3. Mensaje = "";
  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!";
  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. Mensaje = Mensaje+"\n¡Mario de Donkey Kong dañó al rival!";
  21. if (IAHP > 0) {
  22. TerminandoTurnoHumano();
  23. } else {
  24. HumanoGana();
  25. }
  26. } else {
  27. // No viene al caso.
  28. }
  29. }

El efecto de otras cartas cuando el usuario es humano sustituye el mensaje por otro.
Pero en el caso de Mario, la función MarioDK, no puede hacer eso porque hay una de las opciones que da un mensaje que no debe borrarse. Creo que no me explico, a ver, se obtiene la carta:

Si se presiona izquierda:
Debe ocurrir MarioDK1, luego MarioDK y el mensaje debe ser:
¡Mario de Donkey Kong dañó al rival!

Sino si se presiona derecha:
Debe ocurrir MarioDK2.
Si se sobrevive, debe ocurrir MarioDK y el mensaje en pantalla debe quedar así:
---------------------------------------------------------------------------------------------------------
¡Perdiste 1HP pero Mario de Donkey Kong consiguió un martillo!
¡Mario de Donkey Kong dañó al rival!
---------------------------------------------------------------------------------------------------------
si no se sobrevive, no debe ocurrir MarioDK y el mensaje debe ser:
¡Mario de Donkey Kong consiguió un martillo pero ya no tienes HP!


En otras palabras, al ejecutarse MarioDK...

Si se ejecutó MarioDK1, el mensaje debe borrar todo lo anterior y ser:
¡Mario de Donkey Kong dañó al rival!
sino si se ejecutó MarioDK2, el mensaje debe conservar el que se dió en esa función, quedando:
¡Perdiste 1HP pero Mario de Donkey Kong consiguió un martillo!
¡Mario de Donkey Kong dañó al rival!

No quiero usar un if, creo que hay otra solución, quizá poniendo /n al final en un caso en vez de al inicio ¿cómo sería?

Otra cosa que se me acaba de ocurrir es poner los mensajes necesarios en MarioDK1 y MarioDK2, ninguno en MarioDK, voy a probarlo, pero me interesa cómo sería de otra forma.
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!\n¡Mario de Donkey Kong 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. // No viene al caso.
  27. }
  28. }
49  Foros Generales / Foro Libre / Re: Empezamos el año 2026 con la Captura de Maduro junto con su Esposa por Estados Unidos en suelo Venezolano en: 3 Enero 2026, 22:03 pm
Que EEUU atrape al presidente de Venezuela no creo que signifique que los presidentes de Rusia y China deban tener miedo, más bien el de México, Colombia o cualquiera donde la situación sea parecido en cuanto a narcos.

¿Fue muy sorpresivo o no? No soy de informarme de estos temas, así que no sé, pero pareció medio sorpresivo, bastante efectivo, no como Rusia que lleva como 5 años. Felicitaciones a EEUU por eso, esperemos que sea para bien.
50  Foros Generales / Foro Libre / Re: Equipos secuestrados por un hacker en: 1 Enero 2026, 18:15 pm
No tengo mucha idea de estos asuntos.

Leí que no tienes pruebas o no se consideraron suficientes, eso no parece tener sentido ¿sigues igual que hace años, no has conseguido mejores pruebas? ¿o incluso así siguen diciéndote que son insuficientes?

Si dices que uno de los problemas es tu cuenta de Google, habla con esa empresa a ver si te puede crear una cuenta nueva, si sirve de algo, no sé, porque si se ve en el blog la persona te la puede volver a ver, pero te puede servir hablar con esa empresa ya que podrían interesarse en ver cómo es que el supuesto hacker hackea esa cuenta, si es el caso.

También podrías decir a los jueces, secretarios o lo que sea, que si no te ayudan a atrapar al hacker al menos te ayuden a mudarte, sé que puede ser muy difícil o incluso en vano si te vuelve a hallar, pero al menos es mejor que recurrir a unos matones...
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 257
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines