|
51
|
Sistemas Operativos / Windows / Re: esto es real? windows neptune hace esto?
|
en: 12 Mayo 2025, 12:21 pm
|
Tampoco parece real que lo hayas preguntado en serio.
Pero hablando en serio, si los espíritus existen, parecen no tener influencia en las máquinas porque sino se hubieran comentado muchas cosas al respecto y si bien no me ando informando de eso, tampoco he oído.
Te imaginas algo como La llamada, aunque el ghosto no salga de la tv?
Digo, se han visto videos en que las pantallas se apagan o prenden, pero no aparecen mensajes, me refería a eso, no tienen tanto control.
Si quieres algo creepy real, toma esto: Iba caminando y vi a un tipo vestido todo de blanco, parecía brillar, un fantasma, era de noche. Pero no creí que fuera un fantasma, pensé que era un carnicero o panadero, ya que hasta gorro tenía, aunque como digo el uniforme estaba impecable. Se paró en medio de un cruce de calles. Tiró el contenido de una bolsa, pop y un líquido. Un macumbero era. Por donde vivo hay gente que hace esas cosas. Macumbas, sacrificios para el diablo o algún ser así.
|
|
|
52
|
Foros Generales / Foro Libre / ¿En tu país hay convenciones relacionadas con programación? ¿cómo te fue?
|
en: 12 Mayo 2025, 10:21 am
|
Soy de Uruguay. Hace años fui a una. Gratis. Llevé un cd con algo que estaba haciendo. El profesor dijo que no lo pudo ver porque no tenìa una PC con Windows. Era de robótica en realidad. Había robots chiquitos levantando maderitas e intentando colocarlas en un sitio, fallaban en general. Peleas de sumos o algo así, tenían que hacerse caer. Siempre empezaban girando hacia un lado. Le pregunté a uno de los creadores si no podía cambiarse eso, dijo que no. Luego un profesor, escuché, les sugirió que los robots deberían girar para distintos lados. Un tipo hizo un autito a control remoto creo, usando una carcasa de mouse. Me interesó pero... ¿qué podía hacer? ¿pedirle un curso gratis? Mostraron parte de un partido de fútbol usando IA, pero eran unas pelotas (jugadores) quietas con unas lineas, como si fuera la trayectoria de la pelota, supongo que hacerla avanzar pasándosela a otros jugadores aliados intentando que no pase cerca de los rivales. Quizá las pelotitas se movían, la cosa es que duró muy poco y me intersó pero no me pareció que quisieran explicar cómo lo hicieron. En definitiva me pareció como "Miren lo que hicimos, aplaudan y cuando se aburran váyanse", algo para sabiondos nada más, o para ignorantes que quieran mirar, yo pensaba que sería bueno formar un grupo de aprendizaje, pero no parecía posible, estaban los sabiondos o ricos con sus robotitos y estábamos los demás mirando como ignorantes, varios parecían padres, ocupados. Ayer para evitar ser multado tuve que ir a un colegio a votar, vi en él un cartel de olimpiadas de robótica y programación de videojuegos, sólo para alumnos, pero pensé que sería interesante ir a mirar, pero en la página esta https://ceibal.edu.uy/plataformas-y-programas/olimpiada/no vi cuando ni dónde es. Quizá ya se hizo, quizá no es un evento para público, no sé... Se me ocurrió hacer este tema, a ver qué cuentan uds.
|
|
|
53
|
Media / Juegos y Consolas / Re: super mario bros 1985 mundo 9
|
en: 6 Mayo 2025, 14:53 pm
|
En algún sitio debe mencionarse la forma, pero es mejor que simplemente mires un video de cómo es, porque no funciona bien, se puede trancar, yo lo tenía en un Famicom que traía muchos juegos y muchos más repetidos (ej Mario 1, Mario 2, etc, hasta 9, pero era el mismo juego empezando de distinto nivel). Hay otros mundos más. No me acuerdo bien pero se dijo un truco en que ponías el juego de tenis, mal, luego el Mario, y pasaba algo raro, como que los juegos se mezclaban un poco. Si quieres hacerlo tú mismo lo más probable que te sirva es poniendo cheats. Haces que el juego empiece en el nivel 9-1 y listo. En un tema reciente de esta sección yo mismo busqué y expliqué el modo de hacer algo parecido. https://smbhacksw256.fandom.com/wiki/Glitched_worlds#:~:text=Glitched%20worlds%20are%20areas%20that,to%20load%20for%20its%20levels.https://www.youtube.com/watch?v=mMIvFqZi8-o
|
|
|
54
|
Programación / Programación General / Re: Array no se genera bien.
|
en: 4 Mayo 2025, 00:45 am
|
Por lo que pude ver, pasa esto, en cierto punto tengo: Array 1 = (definido correctamente, dice que es el objeto 1) Array 2 = (dice que es el objeto 1, como si fuera el mismo que el 1, lo cual tiene sentido porque no cree una copia con slice o splice (no recuerdo el nombre)) Array 3 = (definido correctamente, dice que es el objeto 2)
Luego digo que el array definido en 2ndo lugar, o sea el 2, sea como el 3. Eso hace que el 3 aparezca como si fuese una referencia al 2.
¿Qué me dicen? ¿puede dar un problema o es más bien un problema visual (o sea, una vez que array 2 sea definido de otro modo, array 3 vuelve a mostrarse normal)? ¿y cual sería la explicación de esto? Es como si Flash dijese "Ahora el objeto 2 es una referencia al 3, ah, bueno, pero si 2 son iguales muestro bien el objeto que se haya creado 1ero, y el otro lo muestro como una referencia, hasta que la referencia cambie, luego lo muestro normal". Medio raro @~@
Le pregunté a GPT pero no lo entendió y ya no tengo puntos para repreguntárselo.
|
|
|
55
|
Foros Generales / Sugerencias y dudas sobre el Foro / Re: Se puede saber porque motivo han bloqueado el post ?
|
en: 3 Mayo 2025, 00:37 am
|
Al final creo que pusiste un video de un conspiranoico, de que se venía un gran apagón, no vi bien eso ¿fue así? Podría decirse que te fuiste por las ramas. También el tema se desvió un poco a si está bien hacer drama o no (pero conste que yo no lo discutí) y qué sistema usan en el país o la zona del que se "quejó" del drama.
Simplemente la posible explicación que le veo, no es que esté de acuerdo con cerrarlo.
|
|
|
56
|
Programación / Programación General / Re: Haciendo juego muy sencillo de cartas, dudas.
|
en: 2 Mayo 2025, 09:19 am
|
Apliqué la recomendación 1 más o menos: Cartas = ["MarioDK", "DK"]; // Lo anterior se usa para hacer sus efectos, // esto es cómo se muestran sus nombres: ShowerDeCartas = ["Mario de Donkey Kong", "Donkey Kong"]; HumanoHP = 10; IAHP = 10; // Frame 1: Se dan cartas, el mensaje no tiene saltos de línea. // F2: Un objeto repite TurnoDeHumano hasta que se presione A. NroDeCartaDeHumano = random(Cartas.length); Mensaje = "Tu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; NroDeCartaDeIA = random(Cartas.length); function TurnoDeHumano () { // Si se presiona A: if (Key.isDown(65)) { // Usa la carta (dando su estadística AT a la función): eval(Cartas[NroDeCartaDeHumano])(eval(Cartas[NroDeCartaDeHumano]+"AT")); } } function HumanoObtieneCarta () { NroDeCartaDeHumano = random(Cartas.length); Mensaje = Mensaje+"\n\nTu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; } function FinDelTurnoDeHumano () { HumanoObtieneCarta(); play(); // Turno de la IA: } function Victoria () { Mensaje = Mensaje+"\n\n¡Ganaste!"; gotoAndStop (4); } // Estadísticas: MarioDKAT = 1; DKAT = 2; // Efectos: function AplicarAtaque (ataque) { IAHP = IAHP-ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); } } function MarioDK (ataque) { Mensaje = "¡Tu rival ha sido enjaulado!"; AplicarAtaque(ataque); } function DK (ataque) { Mensaje = "¡Rival dañado!"; AplicarAtaque(ataque); }
target.HP -= ataque; Eso creo que no funcionaría, target debería ser una película. El mensaje depende de la carta así que no tiene sentido meterlo en una función para todos, o no veo bien cómo lo tendría. También debería variarse qué turno termina y de quién es la victoria. Aunque me cuesta mucho creo que puedo hacer estas cosas, lo que no puedo es hacerlo de un modo que me parezca bien, o no veo bien cómo. 2: Pasar un objetivo es lo que había comentado, pero no imagino cómo eso quedaría bien. 3: Nunca vi algo así y por lo que anduve preguntando, no funciona en Macromedia Flash 5. No le había comentado al bot que era para eso. 4: Lo de los turnos ni siquiera lo tengo completo así que paso de eso por ahora. Le muestro el nuevo código a GPT diciéndole que es de MF5 a ver qué me dice. En resumen: ```actionscript function AplicarAtaque(ataque, objetivo) { if (objetivo == "IA") { IAHP = IAHP - ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); } } else if (objetivo == "Humano") { HumanoHP = HumanoHP - ataque; if (HumanoHP > 0) { // Aquí iría el siguiente paso del juego (turno IA, etc.) } else { Derrota(); // Deberías crear esta función } } } ```
Entonces, tus funciones de carta se pueden actualizar así:
```actionscript function MarioDK(ataque) { Mensaje = "¡Tu rival ha sido enjaulado!"; AplicarAtaque(ataque, "IA"); } ```
Y si luego la IA usa la carta contra el jugador, cambiarías:
```actionscript function MarioDK_IA(ataque) { Mensaje = "¡Has sido enjaulado!"; AplicarAtaque(ataque, "Humano"); } ```
O incluso puedes hacer que **ambas versiones usen una misma función** con el objetivo como parámetro:
```actionscript function MarioDK(ataque, objetivo) { if (objetivo == "IA") { Mensaje = "¡Tu rival ha sido enjaulado!"; } else { Mensaje = "¡Has sido enjaulado!"; } AplicarAtaque(ataque, objetivo); } ```
Y la llamarías así:
```actionscript MarioDK(MarioDKAT, "IA"); // Si el humano ataca MarioDK(MarioDKAT, "Humano"); // Si la IA ataca ```
---
### ✅ Ventajas de este enfoque:
- **Sin `eval`**: Usar `eval` puede hacer el código más difícil de mantener. - **Más escalable**: Puedes agregar más jugadores, enemigos o efectos fácilmente. - **Control total**: Puedes decidir qué pasa según el objetivo y mostrar mensajes distintos.
---
### 🧠 Consejo adicional
Si haces muchos efectos de cartas, podrías pensar en tener un sistema de cartas con objetos o arrays de objetos, por ejemplo:
```actionscript Cartas = [ { nombre: "MarioDK", mostrar: "Mario de Donkey Kong", ataque: 1, efecto: MarioDK }, { nombre: "DK", mostrar: "Donkey Kong", ataque: 2, efecto: DK } ]; ```
Pero eso es más avanzado y Flash 5 no tiene soporte completo para objetos complejos como en JS moderno. Aun así, puedes simularlo con arrays paralelos como ya estás haciendo. haces esto if (objetivo == "IA") { al aplicar el efecto de una carta y lo vuelves a hacer al aplicar el ataque de la carta, quisiera que sólo se haga 1 vez ¡Perfecto! Si quieres **evitar repetir el `if (objetivo == "IA")`** tanto en la función del efecto como dentro de `AplicarAtaque`, la mejor forma es que `AplicarAtaque` simplemente **modifique el HP del objetivo directamente**, sin preocuparse por quién es.
### 💡 Solución: Pasar una *referencia* al HP del objetivo
En Flash 5 (ActionScript 1.0), **no puedes pasar variables por referencia** como en lenguajes modernos, pero puedes simularlo con objetos o propiedades dentro de objetos.
Así que, en lugar de pasar `"IA"` o `"Humano"`, puedes pasar un objeto que contenga el HP. Por ejemplo:
---
### 🧱 Paso 1: Crear objetos para los jugadores
```actionscript Humano = { nombre: "Jugador", hp: 10 }; IA = { nombre: "IA", hp: 10 }; ```
---
### 🧱 Paso 2: AplicarAtaque sin `ifs`
```actionscript function AplicarAtaque(ataque, objetivo) { objetivo.hp = objetivo.hp - ataque; if (objetivo.hp > 0) { if (objetivo == IA) { FinDelTurnoDeHumano(); } else { // Fin del turno de la IA (a implementar si no existe) } } else { if (objetivo == IA) { Victoria(); } else { Derrota(); // Deberías definir esta función } } } ```
---
### 🧱 Paso 3: Efectos de cartas usan sólo una línea
```actionscript function MarioDK(ataque, objetivo) { Mensaje = (objetivo == IA) ? "¡Tu rival ha sido enjaulado!" : "¡Has sido enjaulado!"; AplicarAtaque(ataque, objetivo); } ```
---
### 🧱 Paso 4: Llamada desde el turno humano
```actionscript if (Key.isDown(65)) { eval(Cartas[NroDeCartaDeHumano])(eval(Cartas[NroDeCartaDeHumano]+"AT"), IA); } ```
Y si la IA juega:
```actionscript eval(Cartas[NroDeCartaDeIA])(eval(Cartas[NroDeCartaDeIA]+"AT"), Humano); ```
---
### ✅ Ventajas:
- El **objetivo se evalúa una sola vez**, y se pasa como objeto. - Puedes **acceder directamente a `hp`** sin `eval` o `if`s innecesarios. - Muy fácil de extender si luego agregas más jugadores, enemigos, curación, etc.
---
¿Quieres que te ayude a reescribir todo tu código con esta estructura completa? Me mareó. Lo intento a mi manera. Tengo esto: HumanoHP = 10; IAHP = 10; Cartas = ["MarioDK", "DK"]; // Lo anterior se usa para hacer sus efectos, // esto es cómo se muestran sus nombres: ShowerDeCartas = ["Mario de Donkey Kong", "Donkey Kong"]; // Frame 1: Se dan cartas, el mensaje no tiene saltos de línea. // F2: Un objeto repite TurnoDeHumano hasta que se presione A. // F3: Pequeña pausa. // F4: Turno de la IA. // F5: Nada, sólo para mostrar victoria o derrota. NroDeCartaDeHumano = random(Cartas.length); Mensaje = "Tu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; NroDeCartaDeIA = random(Cartas.length); function TurnoDeHumano () { // Si se presiona A: if (Key.isDown(65)) { trace("A presionada"); // Usa la carta (dando su estadística AT a la función): eval(Cartas[NroDeCartaDeHumano])(eval(Cartas[NroDeCartaDeHumano]+"AT"), "IA"); } } function HumanoObtieneCarta () { NroDeCartaDeHumano = random(Cartas.length); Mensaje = Mensaje+"\nTu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; } function FinDelTurnoDeHumano () { HumanoObtieneCarta(); // Turno de IA: play(); } function FinDelTurnoDeIA () { NroDeCartaDeIA = random(Cartas.length); // Turno de Humano: Mensaje = Mensaje+"\nEs tu turno"; gotoAndStop (2); } // Estadísticas: MarioDKAT = 1; DKAT = 2; // Efectos: function TipicoFinDelTurnoDeHumano (ataque) { IAHP = IAHP-ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Mensaje = Mensaje+"\n¡Ganaste!"; gotoAndStop (5); } } function TipicoFinDelTurnoDeIA (ataque) { HumanoHP = HumanoHP-ataque; if (HumanoHP > 0) { FinDelTurnoDeIA(); } else { Mensaje = Mensaje+"\n¡Perdiste!"; gotoAndStop (5); } } function MarioDK (ataque, objetivo) { if (objetivo == "IA") { Mensaje = "¡Tu rival ha sido enjaulado!"; TipicoFinDelTurnoDeHumano(ataque); } else { Mensaje = Mensaje+"\n\n¡Has sido enjaulado!"; TipicoFinDelTurnoDeIA(ataque); } } function DK (ataque, objetivo) { if (objetivo == "IA") { Mensaje = "¡Rival dañado!"; TipicoFinDelTurnoDeHumano(ataque); } else { Mensaje = Mensaje+"\n\n¡Te dañaron!"; TipicoFinDelTurnoDeIA(ataque); } }
Frame 4: // Turno de IA: eval(Cartas[NroDeCartaDeIA])(eval(Cartas[NroDeCartaDeIA]+"AT"), "Humano");
Perdí la capacidad de analizarlo, me concentré en que funcionen los turnos, y funcionan. Pero ya está, no se hacen 2 ifs para ver si aplicar el daño al humano/IA y luego qué mensaje mostrar, se hace con un if. Lo que me parece un poco mal es que se pasen parámetros si al fin y al cabo todas esas funciones (cartas, pondré más) lo van a necesitar, mejor creo un par de variables. El patrón: if (objetivo == "IA") { Mensaje1 TipicoFinDelTurnoDeHumano(ataque); } else { Mensaje2 TipicoFinDelTurnoDeIA(ataque); }
Parece que va a repetirse mucho, pero si los mensajes son distintos... ¿qué puedo hacer? O sea, una misma carta dará mensajes distintos según quien la use, y cómo la use (por ahora no les puse opciones pero algunas las tienen). Si quisiera evitar esos ifs o esa repetición tendría que... ¿? Lo pensaré. En vez de dar el parámetro ataque por tantos lados voy a crear una variable. Una muestra del juego: Nota: El efecto de ser enjaulado no lo programé aún. https://youtu.be/bmLwILSr5mo
|
|
|
57
|
Sistemas Operativos / Windows / Re: ¿En Windows 7 cómo busco archivos modificados entre 2 fechas?
|
en: 2 Mayo 2025, 08:47 am
|
1. Revisa las Opciones de Búsqueda en "Opciones de carpeta y búsqueda", no vaya a ser que moviste algo ahí ¿Como qué? puedes arrastrar y soltar para seleccionar pequeños rangos o usar Shift + click para seleccionar un rango mucho más grande. Eso me solucionó el problema. Yo cliqueaba una fecha inicial y esperaba que me diera opción de cliquear la final, pero empezaba la búsqueda a penas ponía la inicial, hacía la búsqueda únicamente el día indicado. Que yo sepa no hay instrucciones de que se debe arrastrar o presionar shift :/ Podrían haber hecho un tutorial estilo Age of Empires 2, o algo un poquito parecido... https://www.youtube.com/watch?v=mqS_UXbo3PUEs de Microsoft también.
|
|
|
58
|
Programación / Programación General / Haciendo juego muy sencillo de cartas, dudas.
|
en: 2 Mayo 2025, 00:30 am
|
Por ahora es que un jugador y la máquina... Tienen puntos de vida (HP). Obtienen 1 carta al azar cada uno. No hay mazo con cartas ordenadas de X modo, simplemente cartas posibles. Es el turno del humano, debe usar su carta. La carta puede tener opciones. La carta hace su efecto según cómo se especificó. Si la IA aún tiene HP, el humano toma otra carta y es el turno de la IA, que deberá seguir el mismo proceso que el humano. Sino, se muestra un mensaje de victoria. Cartas = ["MarioDK", "DK"]; // Lo anterior se usa para hacer sus efectos, esto es cómo se muestran sus nombres: ShowerDeCartas = ["Mario de Donkey Kong", "Donkey Kong"]; HumanoHP = 10; IAHP = 10; // Frame 1: Se dan cartas, el mensaje no tiene saltos de línea. // F2: Un objeto repite TurnoDeHumano hasta que se presione A. NroDeCartaDeHumano = random(Cartas.length); Mensaje = "Tu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; NroDeCartaDeIA = random(Cartas.length); function TurnoDeHumano () { // Si se presiona A: if (Key.isDown(65)) { // Usa la carta (dando su estadística AT a la función): eval(Cartas[NroDeCartaDeHumano])(eval(Cartas[NroDeCartaDeHumano]+"AT")); } } function HumanoObtieneCarta () { NroDeCartaDeHumano = random(Cartas.length); Mensaje = Mensaje+"\n\nTu carta ahora es "+ShowerDeCartas[NroDeCartaDeHumano]; } function FinDelTurnoDeHumano () { HumanoObtieneCarta(); // Turno de la IA: } function Victoria () { Mensaje = Mensaje+"\n\n¡Ganaste!"; gotoAndStop (4); } // Estadísticas: MarioDKAT = 1; DKAT = 2; // Efectos: function MarioDK (ataque) { Mensaje = "¡Tu rival ha sido enjaulado!"; IAHP = IAHP-ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); } } function DK (ataque) { Mensaje = "¡Rival dañado!"; IAHP = IAHP-ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); } }
Quisiera que me digan cómo lo mejorarían (no en cuanto a gráficos, sonido, etc, sino el código, eficiencia y claridad) y cómo puedo hacer que los efectos de las cartas se apliquen al humano o a la IA según quién las juegue. Así como están siempre afectan a la IA. La forma que se me ocurre es pasar un parámetro extra a las funciones, por ejemplo target, y luego meter un if para que afecten a uno u otro, pero pregunto si hay algo mejor. Esto se repite: IAHP = IAHP-ataque; if (IAHP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); }
Es que antes ponía 1ero el daño, luego el mensaje (que varía según la carta) y luego esos ifs, pero tengo pensado que algunas cartas hagan daño a quien las usa o den una carta extra y deba descartarse una, así que ese código dudo que pueda servir repetirlo. Bueno, en general supongo que sí. Respuesta de Deepseek: # Análisis y Mejoras para el Juego de Cartas
## Mejoras de Código y Estructura
1. **Eliminar duplicación de código**: El patrón de reducir HP y verificar victoria se repite. Podrías crear una función común: ```actionscript function aplicarAtaque(target, ataque, mensajeEfecto) { target.HP -= ataque; Mensaje = mensajeEfecto; if (target.HP > 0) { FinDelTurnoDeHumano(); } else { Victoria(); } } ```
2. **Sistema de objetivos más flexible**: En lugar de hardcodear el objetivo, puedes pasar el objetivo como parámetro:
```actionscript function MarioDK(ataque, objetivo) { aplicarAtaque(objetivo, ataque, "¡Tu rival ha sido enjaulado!"); }
// Llamada: eval(Cartas[NroDeCartaDeHumano])(eval(Cartas[NroDeCartaDeHumano]+"AT"), IA); ```
3. **Estructura de datos más organizada**: En lugar de tener arrays separados para nombres y estadísticas, podrías usar objetos:
```actionscript Cartas = [ {nombre: "Mario de Donkey Kong", ataque: 1, efecto: MarioDK}, {nombre: "Donkey Kong", ataque: 2, efecto: DK} ]; ```
4. **Sistema de turnos más robusto**: Implementar un sistema de gestión de turnos que alterna entre jugadores.
## Implementación Mejorada
Aquí tienes una versión mejorada que aborda estos puntos:
```actionscript // Configuración inicial Cartas = [ {nombre: "Mario de Donkey Kong", ataque: 1, efecto: function(objetivo) { aplicarAtaque(objetivo, this.ataque, "¡Tu rival ha sido enjaulado!"); }}, {nombre: "Donkey Kong", ataque: 2, efecto: function(objetivo) { aplicarAtaque(objetivo, this.ataque, "¡Rival dañado!"); }} ];
Jugador = {HP: 10, nombre: "Humano"}; IA = {HP: 10, nombre: "IA"}; turnoActual = Jugador; Mensaje = "";
// Frame 1: Repartir cartas iniciales repartirCartas();
// Frame 2: Lógica del juego function repartirCartas() { NroDeCartaDeHumano = random(Cartas.length); NroDeCartaDeIA = random(Cartas.length); Mensaje = "Tu carta ahora es " + Cartas[NroDeCartaDeHumano].nombre; }
function TurnoDeHumano() { if (Key.isDown(65)) { // Si se presiona A var carta = Cartas[NroDeCartaDeHumano]; carta.efecto(IA); // Siempre ataca a la IA en este caso } }
function aplicarAtaque(objetivo, ataque, mensajeEfecto) { objetivo.HP -= ataque; Mensaje = mensajeEfecto; if (objetivo.HP <= 0) { Victoria(); } else if (turnoActual == Jugador) { FinDelTurnoDeHumano(); } else { // Turno de la IA turnoIA(); } }
function FinDelTurnoDeHumano() { turnoActual = IA; repartirCartas(); // La IA juega inmediatamente después turnoIA(); }
function turnoIA() { var carta = Cartas[NroDeCartaDeIA]; carta.efecto(Jugador); // La IA siempre ataca al jugador // Volver al turno del jugador turnoActual = Jugador; repartirCartas(); }
function Victoria() { var ganador = (IA.HP <= 0) ? Jugador : IA; Mensaje = "¡" + ganador.nombre + " ha ganado!"; gotoAndStop(4); } ```
## Ventajas de esta implementación:
1. **Flexibilidad en objetivos**: Las funciones de efecto ahora reciben explícitamente su objetivo. 2. **Estructura más clara**: Los datos de las cartas están encapsulados en objetos. 3. **Sistema de turnos**: Más fácil de extender para más jugadores o mecánicas complejas. 4. **Menos duplicación**: La lógica común está centralizada en `aplicarAtaque`.
## Para futuras expansiones:
1. **Efectos complejos**: Puedes añadir propiedades adicionales a las cartas (como "dañoAutomatico", "curar", etc.) 2. **Selección de objetivo**: Modificar la UI para permitir elegir objetivo cuando sea relevante. 3. **Múltiples jugadores**: El sistema de turnos ya está preparado para escalar.
Esta estructura hace que sea más fácil añadir nuevos tipos de cartas con efectos variados sin tener que modificar mucho la lógica principal del juego. Mucha cosa, lo pensaré.
|
|
|
60
|
Sistemas Operativos / Windows / ¿En Windows 7 cómo busco archivos modificados entre 2 fechas?
|
en: 1 Mayo 2025, 14:35 pm
|
Fui a C, hice clic en la lupa, apareció un calendario, elegí una fecha suficientemente antigua. Resultado: Pocos archivos hallados. Pregunté a GPT, me dijo que pegue esto: datemodified:>=01/04/2025, lo hice. Resultado: Ningún archivo hallado. Le dije, dijo que pegue esto: datemodified:01/04/2025..01/05/2025, lo hice. Resultado: Ningún archivo hallado. La fecha de mi PC muestra 1ero el año ¿será por eso? Siempre tuve problemas con este buscador. Me dijeron que era ineficiente, que use otro, pero esta es otra duda: ¿Por qué si en versiones anteriores funcionaba bien, lo han jodido? Antes había como un asistente, ahora son unas ventanitas chiquitas. ¿No queda más remedio que instalar un buscador, o qué pasa? ¿Será por algo del índice como dice acá?  No sé qué es.
|
|
|
|
|
|
|