Clase Numero 15 – Ta-Te-Ti

Recurso para consultar

Ejercicio – Primera parte

"""
Juego de Ta-Te-Ti con clases y objetos
"""

import teclado as TEC


class Computadora:
    pass

class Humano:

    def __init__(self,nombre,ficha):
        self.nombre = nombre
        self.ficha = ficha
    
    def __str__(self):
        return self.nombre + " ==> "+str(self.ficha)

    def jugar(self,tablero):
        
        salir = False
        while not salir:
            fila = TEC.leerInt("FILA: ",0,tablero.cFilas)
            columna = TEC.leerInt("COLUMNA: ",0,tablero.cColumnas)
            if tablero.ver(fila,columna) == Ficha(' '):
                salir = True
        return (fila,columna)

class Tateti:

    def __init__(self,nombJug1,nombJug2):
        self.jugadorUno = Humano(nombJug1,Ficha('X'))
        self.jugadorDos = Humano(nombJug2,Ficha('O'))
        self.tablero = Tablero()

    def elOtro(self,jug):
        if jug == self.jugadorUno:
            return self.jugadorDos
        return self.jugadorUno

    def jugarTateti(self):

        jugX = self.jugadorUno
        terminar = False
        print(str(self.tablero))
        while not terminar: 
            print("JUEGA: ",str(jugX))
            coor = jugX.jugar(self.tablero)
            print("Coordenada: ",coor)
            self.tablero.poner(coor[0],coor[1],jugX.ficha)
            print(str(self.tablero))
            jugX = elOtro(jugX)




class Ficha:

    def __init__(self,caracter):
        self.caracter = caracter
    
    def __str__(self):
        return '[' + self.caracter + ']'



class Tablero:

    def __init__(self,cFilas=3,cColumnas=3):
        self.cFilas = cFilas
        self.cColumnas = cColumnas
        self.m = self.crear()
    
    def filaIgual(self,fila,ficha):
        for c in range(self.cColumnas):
            if self.m[fila][c] != ficha:
                return False
        return True

    def columnaIgual(self,columna,ficha):
        for f in range(self.cFilas):
            if self.m[f][columna] != ficha:
                return False
        return True
    
    def diagonal(self,ficha):
        for x in range(self.cFilas):
            if self.m[x][x] != ficha:
                return False
        return True
    
    def antiDiagonal(self,ficha):
        f = 0
        c = self.cColumnas-1
        while f < self.cFilas:
            if self.m[f][c] != ficha:
                return False
            f += 1
            c -= 1
        return True

    def existe(self,ficha):
        return ficha in self.m

    def crear(self):
        self.m = []
        for f in range(self.cFilas):
            fil = []
            for c in range(self.cColumnas):
                fil.append(Ficha(' '))
            self.m.append(fil)
        return self.m

    def poner(self,fila,columna,ficha):
        self.m[fila][columna] = ficha
    
    def ver(self,fila,columna):
        print("FILA: ",fila," COLUMNA: ",columna,str(self.m[fila][columna]))
        return self.m[fila][columna]

    def __str__(self):
        cadena = ""

        for f in range(self.cFilas):
            for c in range(self.cColumnas):
                cadena += str(self.m[f][c])
            cadena += '\n'

        return cadena

    def hayLugar(self):
        return self.existe(Ficha(' '))


def main():
    """
    tablero = Tablero()
    tablero.poner(0,0, Ficha('X'))
    tablero.poner(1,0, Ficha('X'))
    tablero.poner(2,0, Ficha('X'))
    
    print(str(tablero))
    """

    tateti = Tateti("Juan","Pinchame")
    tateti.jugarTateti()

main()

Resultado hasta el momento

>>> %Run tateti.py
[ ][ ][ ]
[ ][ ][ ]
[ ][ ][ ]

JUEGA:  Juan ==> [X]
FILA: 1
COLUMNA: 0

Nota: Usamos el Modulo TECLADO creado en clases anteriores, lo importamos

#LEER UN ENTERO CON CONTROL DE ERROR DE TIPO DE DATO
def leerInt(cartel,desde=-99999999,hasta=99999999):
    salir = False
    numero = 0

    while not salir:
        try:
            numero = int(input(cartel))
            if numero < desde or  numero > hasta:
                print("ERROR ==> numero fuera de rango\n")
            else:
                
                salir = True
                
        except:
            print("ERROR ==> Ingrese un numero entero\n")
    
    return numero

#LEER UN FLOAT CON CONTROL DE ERROR DE TIPO DE DATO
def leerfloat(cartel):
    salir = False
    numero = 0.0
    while not salir:
        try:
            numero = float(input(cartel))
            salir = True
        except:
            pass #SIN MOSTRAR CARTEL DE ERROR
            #print("\nERROR ==> Ingrese un numero decimal\n")
    return numero

Leave a Reply

Your email address will not be published. Required fields are marked *