Autor Tema: programar juego del tres en raya o vieja en TurboBasic  (Leído 10169 veces)

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
programar juego del tres en raya o vieja en TurboBasic
« en: 09 de Enero 2014, 01:39 »
Muchas gracias César, me acompañaste durante todo este proceso y realmente me ayudaste mcho, he aprendido más contigo de lo que he aprendido en la uni, ahora quedará en mis manos el estudiarme los cursos para cubrir las fallas que tengo.

Saludos, ¿alguna recomendación o consejo antes de dar por cerrado el tema?.



Otra cosa que no tiene nada que ver con php, si no más bien como un proyecto que nunca pude realizar (El juego de La Vieja, en TurboBasic), si ya se que está obsoleto, pero quería practicar para divertirme un rato programando.

Descripción:

Es un programa hecho en TurboBasic, que tiene como objetivo codificar el juego de manera que, despues de haber elegido previamente que letra se desea jugar, permita al usuario (Jugador) ingresar coordenadas que se pedirán en formato Fila, Colu y que al hacer esto termine su turno.

Luego que el sistema verifique cada espacio en el cuadro mostrado en pantalla y vea si está ocupado o no, si es así, que mande un mensaje al usuario que ya está ocupada y que intente de nuevo, pero que también verifique en el turno de la computadora lo mismo y que coloque la letra que le tocó en otra casilla para contrarrestar al jugador, es un gran reto y buena practica de lógica, pero ya llevo algo avanzado.

Código: [Seleccionar]
COLOR 7,1
CLS

REM CuadroGrande:

  FOR I= 2 TO 79
  LOCATE 1,I:PRINT "Í"
NEXT I

  LOCATE 1,2:PRINT "É"

  LOCATE 1,79:PRINT "»"

  LOCATE 24,2:PRINT "È"

  FOR I = 2 TO 23
  LOCATE I,2 :PRINT "º"
NEXT I

  FOR I =3 TO 79
  LOCATE 24,I :PRINT "Í"
NEXT I

  LOCATE 24,79:PRINT "¼"


  FOR I =2 TO 23
  LOCATE I,79 : PRINT"º"
NEXT I

 REM  CuadroVieja:

  FOR I= 23 TO 58
  LOCATE 10,I:PRINT "Í"
NEXT I

  FOR I= 23 TO 58:
  LOCATE 16,I:PRINT "Í"
NEXT I

  FOR I =4 TO 21:
  LOCATE I,47:PRINT "º"
NEXT I

  FOR I =4 to 21
  LOCATE I,35:Print "º"
NEXT I

 REM  CuadroExternoVieja:

  For I= 5 to 20
  locate I, 23:print "º"
NEXT I

  FOR I= 5 TO 20
  LOCATE I,58:PRINT "º"
NEXT I

  FOR I = 24 TO 57
  LOCATE 4,I:PRINT "Í"
NEXT I

  FOR I =23 TO 57
  LOCATE 21,I:PRINT "Í"
NEXT I

  Locate 4,58:print "»"
  Locate 4,23:print "É"
  Locate 21,23:print "È"
  Locate 21,58:print "¼"

REM LineaIntersecc:

  For I= 2 to 23
  Locate I,20:print "º"
Next I

  Locate 24,20:print "Ê"

  Locate 1,20:print "Ë"

REM LineaIntersecc2:

  For I =2 to 23
  Locate I,62:print "º"
Next I

  Locate 24,62:print "Ê"

  Locate 1,62:print "Ë"


REM VariablesX :

A$= "X"

VariablesO:

B$= "O"

REM ColumnaDer:

 Locate 3,64:Print "Instrucciones:"
 Locate 4,63:Print "Coordenadas:"
 LOCATE 5,63:Print "Fila Sup. :7"

 LOCATE 6,63:PRINT  "Fila Med.:13"
 LOCATE 7,63:PRINT  "Fila Inferior:19"
 LOCATE 9,63:PRINT "Columnas: Izq:29"
 LOCATE 10,63:PRINT "       Media:42"
 Locate 11,63:PRINT "     Derecha:53"
 Locate 13,65:PRINT "Colocar F,C"

 LOCATE 15,64:PRINT "Ej: F 19, C 42"

REM Jugador:

A$= " "

 locate 2,28:Print "Bienvenido al Juego (La Vieja)"
 locate 3,5:INPUT "Elija X u O: ",A$
 locate 5,5:INPUT "Elija Fila:",FILA
 locate 7,5:INPUT "Elija Colu:",COLU
 locate FILA,COLU:PRINT A$

REM ** CODIFICAR PARA QUE CADA VEZ QUE UN JUGADOR HAGA UNA JUGADA VENGA EL SISTEMA Y COLOQUE LA LETRA CONTRARIA EN UNA ESQUINA Y QUE VERIFIQUE SI ESTA OCUPADA O NO***"



Esto es lo que llevo hecho hasta ahora César, ¿me puedes orientar por favor?.
« Última modificación: 15 de Septiembre 2014, 14:07 por Alex Rodríguez »

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
Re:Re:programar juego del tres en raya o vieja
« Respuesta #1 en: 10 de Enero 2014, 18:11 »
Lo del juego no importa, ya que no vale nota ni es una evaluacion, es más un proyecto personal :D.
« Última modificación: 13 de Enero 2014, 08:37 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re: programar juego del tres en raya o vieja
« Respuesta #2 en: 11 de Enero 2014, 10:01 »
La recomendación principal sería que si quieres ser buen programador no basta con estudiar, hay que estudiar lo correcto y en el orden correcto. Lo del juego voy a mirarlo a ver qué tal, pero no acabo de entender en qué consiste el juego. Hay que ir colocando letras, pero ¿para qué?, es decir, ¿cuál es el objetivo y cómo se llega a ganar el juego?
« Última modificación: 13 de Enero 2014, 08:37 por César Krall »
Responsable de departamento de producción aprenderaprogramar.com

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
Re: programar juego del tres en raya o vieja
« Respuesta #3 en: 12 de Enero 2014, 19:42 »
Buenos días, el programa de Turbo Basic consiste en una pantalla azul con dos paneles con información y con el recuadro del "Tres en raya, o Vieja".

Te lo voy a describir paso a paso en forma lógica:

1- Lo primero que te pide el programa recién ejecutado es que si quieres jugar con las "X" o las "O" y dependiendo del equipo que elija el jugador, la computadora será el otro equipo.

2- Mostrar por pantalla un mensaje que diga ("Es Su Turno, Inserte Fila".) y debajo  ("Inserte Columna") va a ser un loop (se mostrará cada vez que sea el turno del jugador)

3- Luego te pide que insertes coordenadas, la fila primero y despues la columna en la que quieres jugar (solo numeros); ej: (F:19 C:37, y deberia colocar tu "X" o tu "O" dentro del recuadro en esa coordenada), automáticamente la computadora debería contrarrestar la jugada colocando al azar en uno de los nueve recuadros su jugada e identificar si estan ocupadas o no.

3- El jugador gana al colocar 3 de sus "X" u "O" seguidas ya sea en diagonal, o raya (Vertical u Horizontal), debería mostrar un mensaje, ("Han ganado las "X"/"O").

4- En código aparecen letras extrañas dentro de los "LOCATE" eso es por que son los simbolos ASCII con los que formé el cuadrado.

5- He visto que el juego lo hacen con arrays, pero nos dijeron que se podia hacer de esta manera.

Espero que no haya sido demasiado complicada mi explicación. Buen día.
« Última modificación: 13 de Enero 2014, 08:38 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re: programar juego del tres en raya o vieja
« Respuesta #4 en: 13 de Enero 2014, 08:35 »
Ahora sí lo he entendido, de hecho conocía el juego pero no como "vieja" sino como "tres en raya"  ;D. Voy a mirarlo. Muevo el asunto a un nuevo hilo del foro para no mezclar cosas.
« Última modificación: 13 de Enero 2014, 08:38 por César Krall »
Responsable de departamento de producción aprenderaprogramar.com

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:programar juego del tres en raya o vieja
« Respuesta #5 en: 14 de Enero 2014, 09:02 »
He visto lo que tienes hecho y te comento alguna cosa. En primer lugar, que lo más lógico sería que para el jugador el juego ha de ser lo más simple posible. En lugar de indicarle que introduzca una fila a elegir entre 7, 13 y 19 y columna a elegir entre 29, 42 y 53 sería más lógico decirle que elija fila 1, 2 ó 3 y columna 1, 2 ó 3 (luego si tú tienes que transformar esa información ya sería una cosa interna del programa, pero el jugador no tendría por qué conocer esto).

Luego, ¿cómo seguir? Antes de programar tienes que saber lo que quieres hacer, y esto es bueno plantearlo incluso con el computador apagado.

A mí se me ocurre elegir entre alguna de estas opciones:

a) El ordenador juega "tonto" y pone su símbolo buscando la primera casilla libre en el siguiente orden: (7, 29) (7, 42), (7,53) (13, 29) (13,42) (13,53) (19,29) (19,42) (19,53). Si no hay casilla libre el juego ha terminado.

b) El ordenador juega "a suerte" y pone su símbolo eligiendo una casilla al azar. Comprueba si está libre, si lo está pone ahí su símbolo, si no lo está vuelve a elegir otra casilla al azar y continúa repitiendo hasta colocar su símbolo. Hay que ponerle un límite por ejemplo de 100 repeticiones, de modo que si no encuentra casilla libre el juego se de por terminado. Si no se le pone límite el programa podría bloquearse (bucle infinito).

c) El ordenador juega "inteligente" y trata de poner su símbolo buscando obtener tres en raya. Es la opción más complicada de programar.

Primero tienes que decidir cómo quieres hacerlo, luego deberías plantear cómo tiene que ser la lógica sobre un papel, y finalmente, pasar a programarlo una vez lo tengas claro.

Responsable de departamento de producción aprenderaprogramar.com

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
Re:programar juego del tres en raya o vieja
« Respuesta #6 en: 14 de Enero 2014, 20:45 »
Buenos dias, no he tenido tiempo para seguir programando el juego, pero escribí en un cuaderno todo lo que quiero hacer y aquí te lo planteo:

Titulo: Juego "Tres en raya o Vieja"

Objetivo: Hacer el programa "Tres en Raya" de manera que al ejecutarse permita elegir al usuario la figura con la que quiere jugar (X,O), luego que imprima un mensaje en pantalla pidiendo la Fila,Colu (En ese formato) en la que se desea jugar, un ejemplo es : (1,1 1,2 1,3...) luego que en el turno de la COM esta juegue su variable al azar dentro de las nueve casillas disponibles (Que deberían estar asociadas a las coordenadas que escribiré más adelante) y revisar si están ocupadas o no, de ser así que siga buscando hasta que encuentre un espacio libre y si no hay espacio el juego termina en Empate, si está libre, pues simplemente coloque su figura y le dé el turno al jugador.

Condiciones:

**Un jugador gana al colocar su figura tres veces seguidas, de manera lineal o diagonal.

** El juego cae en empate si ninguno de los dos jugadores cumple la condicion estipulada arriba, y no hay más espacio para jugar.

Variables a utilizar:

Para las X: "A$"

Para las O: "B$"

Quizás una variable o un array para FILA,COLU para almacenar estas coordenadas segun la FILA,COLU elegida.

Coordenadas Filas:

Superior: 7
Media: 13
Inferior 19

Coordenadas Columnas:

Izquierda: 29
Media: 42
Derecha: 53



He aquí unas pequeñas modificaciones al código ya que no he tenido el tiempo para meterme de lleno en el programa.

Código: [Seleccionar]
COLOR 7,1
CLS

REM CuadroGrande:

  FOR I= 2 TO 79
  LOCATE 1,I:PRINT "Í"
NEXT I

  LOCATE 1,2:PRINT "É"

  LOCATE 1,79:PRINT "»"

  LOCATE 24,2:PRINT "È"

  FOR I = 2 TO 23
  LOCATE I,2 :PRINT "º"
NEXT I

  FOR I =3 TO 79
  LOCATE 24,I :PRINT "Í"
NEXT I

  LOCATE 24,79:PRINT "¼"


  FOR I =2 TO 23
  LOCATE I,79 : PRINT"º"
NEXT I

 REM  CuadroVieja:

  FOR I= 23 TO 58
  LOCATE 10,I:PRINT "Í"
NEXT I

  FOR I= 23 TO 58:
  LOCATE 16,I:PRINT "Í"
NEXT I

  FOR I =4 TO 21:
  LOCATE I,47:PRINT "º"
NEXT I

  FOR I =4 to 21
  LOCATE I,35:Print "º"
NEXT I

 REM  CuadroExternoVieja:

  For I= 5 to 20
  locate I, 23:print "º"
NEXT I

  FOR I= 5 TO 20
  LOCATE I,58:PRINT "º"
NEXT I

  FOR I = 24 TO 57
  LOCATE 4,I:PRINT "Í"
NEXT I

  FOR I =23 TO 57
  LOCATE 21,I:PRINT "Í"
NEXT I

  Locate 4,58:print "»"
  Locate 4,23:print "É"
  Locate 21,23:print "È"
  Locate 21,58:print "¼"

REM LineaIntersecc:

  For I= 2 to 23
  Locate I,20:print "º"
Next I

  Locate 24,20:print "Ê"

  Locate 1,20:print "Ë"

REM LineaIntersecc2:

  For I =2 to 23
  Locate I,62:print "º"
Next I

  Locate 24,62:print "Ê"

  Locate 1,62:print "Ë"


REM VariablesX :

A$= "X"

VariablesO:

B$= "O"

REM ColumnaDer:

 Locate 3,64:Print "Instrucciones:"
 Locate 4,63:Print "Coordenadas:"
 LOCATE 5,63:Print "Fila Sup. : 1"

 LOCATE 6,63:PRINT  "Fila Med.: 2"
 LOCATE 7,63:PRINT  "Fila Inferior: 3"
 LOCATE 9,63:PRINT "Columnas: Izq: 1"
 LOCATE 10,63:PRINT "       Media: 2"
 Locate 11,63:PRINT "     Derecha: 3"
 Locate 13,65:PRINT "Colocar F,C"

 LOCATE 15,64:PRINT "Ej: 1,1"

REM Jugador:

A$= " "

  locate 2,28:Print "Bienvenido al Juego (La Vieja)"
  locate 3,5:INPUT "Elija X u O: ",A$

REM ** Lo que deberia ir aqu¡ es algo que indique que:  IF (FILA,COLU = "1,1" THEN) haga un locate 7,29:print "X" u "O" ya que esa seria la casilla 1,1 en coordenadas.

  locate 5,5:INPUT "Elija F,C:",FILA,COLU
  locate FILA,COLU:PRINT A$

REM ** UN ejemplo de una respuesta por parte de la COM, lo que no se es como plantear en código una respuesta RANDOM (o aleatoria), ¿necesito arrays?.
       
 IF A$ = "X" then
 
 LOCATE 13,42:PRINT "O"

end if




Preguntas:

1- ¿Cómo hacer que las casillas o coordenadas sean identificables para la COM.?

2- ¿Cómo hacer que busque o que haga las jugadas de manera aleatoria?.


Ya he tratado de aplicar los fundamentos un poco más y me ha servido, aunque no he leido toda la guía por el tiempo, pero ¿no te parece muy burócratico o complejo por así decirlo, hacer por cada programa los diagramas de flujo, esquemas, etc?.

Lo que me falta es saberme los códigos de turboBasic, que no he conseguido una guía por internet :(.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:programar juego del tres en raya o vieja
« Respuesta #7 en: 15 de Enero 2014, 11:26 »
Te comento algunas cuestiones:

Para trabajar en un lenguaje es importante tener una referencia, ayuda o guía del lenguaje. Creo que esto puede servir para Turbo Basic: http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/Borland_Turbo_BASIC_Owners_Handbook_1987.pdf

Ahí puedes mirar cosas como cómo generar aleatorios entre otras.


Indicas que: variables a utilizar Para las X: "A$", Para las O: "B$"

Esto incumple una regla de fundamentos de programación: debe intentarse que una variable describa su contenido o lo que hace. Si yo te digo A$ ¿te digo algo? En cambio si te digo $JugadaActualX ó si te digo $posicionesOcupadasX ó si te digo $numeroDeCoches sí te estoy diciendo algo, te hago más comprensible el programa. Por tanto una recomendación sería que utilices nombres que informen en la medida de lo posible.

Sobre  ¿no te parece muy burócratico o complejo por así decirlo, hacer por cada programa los diagramas de flujo, esquemas, etc?.

Pues sí y no. Te diré que al principio me sirvió mucho para aprender. Cuando adquieres experiencia ya eres capaz de decidir cuándo es necesario y cuándo no. Como te digo, al principio sirve para que un programador se acostumbre a trabajar con los esquemas adecuados. Una vez "interioriza" estas cuestiones en algunos casos ya no resultan necesarias. Yo sigo escribiendo pseudocódigo antes de programar cuando lo que hay que programar tiene cierta complejidad. Ponerse delante del ordenador puede llevar a perder el tiempo, pero eso son cosas que tiene que decidir cada uno y según el problema que esté abordando.
Responsable de departamento de producción aprenderaprogramar.com

Jigsaw_MGO

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 113
    • Ver Perfil
Re:programar juego del tres en raya o vieja
« Respuesta #8 en: 16 de Enero 2014, 03:02 »
Buenas noches, si ese programa lo tenía escrito así de hace tiempo y ahora lo quiero modificar, pero no conseguía nada de TurboBasic en internet, así que gracias, cuando haya algún avance te escribo por aquí.

No es un proyecto urgente pues no es para la uni, que empiezo el martes por cierto, pero si me avocaré a esto cuando tenga tiempo, no cierres el tema por favor.

Hasta luego.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".