Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
 

Autor Hilo: Gambito de Monguer (ZX Spectrum) - ¡Jaque al BASIC! (Leído 2886 veces)

Zael

  • T-600
  • Mensajes: 7 006
  • El Caloret
Desde tiempos inmemoriales el hombre ha soñado con fracasar. Fracasó Napoleón, fracasó Alex Ubago... ¡y ahora fracasaremos nosotros! No hay compañía de videojuegos de culto que se precie que no tenga un buen fracaso en su haber, y en Ancient Bits no vamos a ser menos. Os presento el que va a ser, sin lugar a dudas, el mayor batacazo en la historia de Ancient Bits, os presento...



GAMBITO DE MONGUER
(ZX SPECTRUM 48/128K)





Viendo Gambito de Dama me entraron ganas de hacer un juego de ajedrez para ZX Spectrum. Hasta ahí todo bien. Pensé que habría cientos de listados BASIC de ejemplo. Incluso recordaba que había un juego llamado "1K Chess" para ZX-81. Si alguien había sido capaz de programar un juego de ajedrez en 1K, debería ser fácil... ¿no? (a estas alturas ya imagináis por dónde van los tiros del título).

Iluso de mi, me puse a buscar en Google y no sólo no encontré ningún listado BASIC de ejemplo, sino que descubrí... ¡¡que no había ningún juego de ajedrez para ZX Spectrum programado en BASIC puro!! ¡Todos están escritos en código máquina, tan sólo uno parece que tiene una parte de BASIC!

Leer este hilo fue como mirarme en un espejo. En él, un usuario expresa su frustración al no saber más que BASIC y que todo el mundo le diga que es imposible hacer un juego en ZX BASIC.

Pero para ese momento ya era demasiado tarde, yo ya tenía la carátula hecha, y el título (Gambito de Monguer) era demasiado bueno para dejarlo escapar.









LA HISTORIA




La historia es apasionante. Mariano "El Siciliano", el mejor jugador español de ajedrez de la historia que está a punto de enfrentarse a los mejores grandes maestros de ajedrez del mundo. Una lesión en el escroto de última hora obliga a ser sustituido por un anónimo cuarentón friki aficionado al retro llamado J.L. Monguer... ¡tú!  ;)










EL JUEGO




¡Vale, lo reconozco, no tengo ni una pantalla (mal empezamos)!



Mi idea es representar un tablero de ajedrez de 128*128 pixels con piezas (sprites) de 8*8 (UDGs). Se iría avanzando durante 6 rondas donde nos enfrentaríamos a grandes maestros de ajedrez de todo el mundo con nombres cachondos: Tommy Al Phil (EE.UU.), Jaque Al Jeque (Arabia Saudi), etc. que estarían representados con un pequeño gráfico en la parte superior. El enemigo final es obvio para todo aquel que le guste el ajedrez y el buen cine...  :rolleyes:

A mi esto me parece una locura, pero si conseguimos hacer un juego que mueva las fichas (aunque sea aleatoriamente) sin romper las reglas de ajedrez me parecería una pasada. Seríamos los primeros. Seríamos los mejores.

¿Hacer un juego de ajedrez para ZX Spectrum en BASIC? Sin duda, se trata de una locura. Pero... ¿y si no lo fuera? ¿y si en realidad se tratara de un gambito? De un gambito... ¡de monguer!  ;)

última modificación: 23 Marzo 2021, 22:43:22 por Zael





jose365

  • T-7T
  • Mensajes: 312
Jajaja, es súper original!!
Yo estoy convencido de que Es posible hacer un juego de Ajedrez en Basic, no será un juego bueno, y puede que resulte aburrido para el gran público. Pero creo que es posible.

Se me ocurre que podemos hacer que cada rival haga una apertura de juego diferente :la Siciliana, la Khare o Kan, la Hawaiana, la 4 quesos, etc
Y una vez acabada la apertura, viene el juego medio, donde hay un objetivo puede ser matar piezas (creo que sería lo más fácil)
Y para acabar la partida, propongo programar varios tipos Jaques (con 2 Torres, reina y torre, etc. ), pero esta parte no la conozco. Habría que buscar info. Y si el enemigo tiene más proponer tablas antes de perder!!

Si os parece poco friki, podemos buscar las reglas del ajedrez en 3D que usaban en Star Trek. Eso llamará la atención seguro. ..  >:D

Future

  • T-600
  • Mensajes: 1 412
  • superviviente marciano
    • futublock
Ya sabes que tu grafista oficial se une a filas...

apunta su sueldo al debe, que ya debe de haber cuatro páginas (apunta las 4 páginas al debe tambien)

Zael

  • T-600
  • Mensajes: 7 006
  • El Caloret
Jajaja, es súper original!!
Yo estoy convencido de que Es posible hacer un juego de Ajedrez en Basic, no será un juego bueno, y puede que resulte aburrido para el gran público. Pero creo que es posible.


¡Esa es la idea, @jose365! Hacer un juego de ajedrez MUY BÁSICO (nunca mejor dicho), simplemente que siga las reglas básicas (incluso aunque dejemos fuera movimientos poco habituales como enroque, como el 1K Chess del ZX81).







Se me ocurre que podemos hacer que cada rival haga una apertura de juego diferente :la Siciliana, la Khare o Kan, la Hawaiana, la 4 quesos, etc
Y una vez acabada la apertura, viene el juego medio, donde hay un objetivo puede ser matar piezas (creo que sería lo más fácil)


Joer, buenísima idea. Meter aperturas prefijadas y a partir del 3er o 4o movimiento hacerlo casi aleatorio. Con algo así bastaría. No necesitamos hacer una IA que derrote a Kasparov, con algo que "parezca" que juega a ajedrez sería suficiente. De todos modos tengo que poner un tutorial muy bueno que encontré en www.chessprogramming.org donde te indicaban los pasos a seguir a la hora de programar un juego de ajedrez (independientemente del lenguaje y máquina donde programes)

Y lo de los nombres cachondos de las aperturas me parece genial, podría aparecer el nombre de la apertura sobre el tablero. Muy buenas ideas.








Ya sabes que tu grafista oficial se une a filas...


Ahora mismo no se me ocurre nadie más preparado para dibujar a Tommy Al Phil, Jeque al Jaque y compañía que tú, @Future. Pero tranquilo, por ahora céntrate en acabar el Jarl, para este tenemos más de un año de tiempo. Yo iré buscando bocetos de los caretos de los adversarios y ya te los pasaré para que hagas tu "magia pixelada".  ;)







explorer

  • T-70
  • Mensajes: 144
Todo lo necesario para programar juegos de Ajedrez está en Chess Programming Wiki.

Allí hay de todo. Incluso en la sección Programming > Languages > BASIC hay un enlace a una versión en BASIC de un juego programado en 1983.

Zael

  • T-600
  • Mensajes: 7 006
  • El Caloret
Todo lo necesario para programar juegos de Ajedrez está en Chess Programming Wiki.

Allí hay de todo. Incluso en la sección Programming > Languages > BASIC hay un enlace a una versión en BASIC de un juego programado en 1983.


¡Gracias @explorer! De hecho, casi todas mis búsquedas en Google me llevaban inexorablemente a www.chessprogramming.org, pero no encontraba nada de ZX BASIC y lo mejor que encontré fue una especie de guía con los pasos a seguir para programar un juego de ajedrez (independientemente del lenguaje que uses).

En fin, un rayo de esperanza para escapar del jaque al BASIC en el que nos encontramos.  ;)





jose365

  • T-7T
  • Mensajes: 312
Todo lo necesario para programar juegos de Ajedrez está en Chess Programming Wiki.

Allí hay de todo. Incluso en la sección Programming > Languages > BASIC hay un enlace a una versión en BASIC de un juego programado en 1983.


Estupendo!! En serio que no se como lo haces para encontrar estas cosas. Yo busqué y no encontré nada.

Zael

  • T-600
  • Mensajes: 7 006
  • El Caloret
"HIARCS is much better positionally than Deep Blue." - Garry Kasparov 1997 (after game 5 of the rematch)


¿Pero cómo es posible que pongan una cita de Kasparov diciendo que el programita BASIC este es mejor que Deep Blue? Debe referirse al programa comercial, no a esta versión BASIC... supongo.


No sé hasta qué punto se parecerá el BASIC+ y el ZX BASIC, pero este listado puede ser una buena base de partida. La primera página de código la entiendo perfectamente (la del menú de opciones, vamos  ;D)... a partir de la segunda (Listing 1) la cosa se pone soviética y no entiendo casi nada... ¿Para qué dijimos que servía el comando DIM? Me parece recordar que @jmpuk lo usó en su minijuego musical "Go! Go! Goonies!" del TXT.









jmpuk

  • T-600
  • Mensajes: 1 432
Que ambicioso!!
Dim se usa para definir vectores/matrices donde puedes ir guardando datos.
Si no recuerdo mal, en goonies las usaba para guardar la secuencia aleatoria de notas que se iba generando.. en la primera dimension iba la nota y en la segunda la duracion.
Intentare pensar a ver si puedo aportar ... pero ultimamente estoy apolillado total!!

Enviado desde mi SM-T500 mediante Tapatalk
última modificación: 25 Marzo 2021, 22:01:14 por jmpuk

briefer

  • Visitante
En menudo lío te has metido

Hacer un juego de ajedrez implica implementar recursividad y en el spectrum es muy difícil porque no tienes una pila tienes que hacer la recursividad a mano y es un follón

Y ralentiza bastante el proceso por cierto

jmpuk

  • T-600
  • Mensajes: 1 432
En menudo lío te has metido

Hacer un juego de ajedrez implica implementar recursividad y en el spectrum es muy difícil porque no tienes una pila tienes que hacer la recursividad a mano y es un follón

Y ralentiza bastante el proceso por cierto
O un algoritmo de machine learning.... en basic... ahi es na....

Enviado desde mi ZX-82 en 1985


Zael

  • T-600
  • Mensajes: 7 006
  • El Caloret

En menudo lío te has metido


Nada de donde un buen "monguer" como yo sepa salir con dignidad.

No tengo ni idea de qué es recursividad @briefer, pero recursos... algunos tengo. La idea es intentar hacer un juego de ajedrez real, aunque sea "nivel mono" (movimientos aleatorios de la máquina). Me haría mucha ilusión hacer el PEOR juego de ajedrez del mundo, y hacer vídeos de Youtube enfrentándolo a otras IA de ajedrez y reírnos un rato.

Pero si eso no es posible, siempre me guardo un as en la manga. Un gambito... ¡de monguer!  ;) :P :P





jose365

  • T-7T
  • Mensajes: 312
Yo tengo curiosidad por intentarlo. Supongo que analizar los movimientos será muy lento, pero estoy dispuesto a intentarlo
A ver si podemos hacer alguna prueba para ver cómo funciona

josepzin

  • T-600
  • Mensajes: 2 054
  • Habitacus!
    • Mi blog
La opción de hacer que las piezas se muevan de forma aleatoria siguiendo las reglas del juego me parece la mas fácil de hacer y SOBRE TODO la más monguer!!! recomiendo ese camino :D :D

Luego en esa aleatoriedad me imagino que se podrían hacer algunas validaciones minimas (si la velocidad lo permite) por ejemplo que no se mueva en una casilla que pueda ser comida de otra pieza, pero eso quizas ya lleve mas trabajo, asi que en principio la opcion monguer de mover piezas completamente al azar me parece un experimiento interesante :D

Podrías empezar con esa eopcion y si luego ves que le puedes agregar la validacion de no mover en una casilla peligrosa, dejas lo anterior como NIVEL FACIL y a esta como NIVEL MEDIO.