@startuml 
title Diagrama General


class Ciudad{
    - nombre : String
    - lugares{String, LugarDeInteres}
    + visitar(grado, lugar) : Pista
    + nombre() : String

}
class Partida{
    - policiaACargo : Policia
    - ladronBuscado : Ladron
    + {static} registrarPoliciaACargo()
    + {static} registrarLadron()
    + comenzarPartida()
    + viajar(ciudad)
    + mostrarPista()
    + entrarEdificio(lugar)
}

class Comisaria{
    + ordenDeArresto(sospechoso)
    + atrapado(sospechoso) : boolean
}
class Ladron{
    - sexo : String
    - hobbie : String
    - cabello : String
    - seña : String
    - vehiculo : String
    - objetoRobado : ObjetoRobado
    + {static} registro(objetoRobado, cantidadArrestos)
    + {static} registroEspecifico(cantidadArrestos, objetoRobado, sexo, hobbie, seña, vehiculo)
    + anotarGenero(genero) : String
    + comparar(sospechoso) : boolean
    + acuchillar(Policia) : int
}

class Policia{
    - grado : GradoDePolicia
    - sospechoso : Ladron
    - ciudadActual : Ciudad
    - cantLugaresVisitados : int
    - cantidadArrestos : int
    + {static} registro(objetoRobado, cantidadArrestos, Ciudad)
    + viajar(ciudad) : int
    + entrarEdificio(lugar) : Pista
    + anotarGenero(genero)
    + ordenDeArresto()
    + capturar() : boolean
    + recibirCuchillazo() : int
    + dormir() : int
    + tiempoDeVisita(cantLugaresVisitados) : int
}

abstract Mapa{
    - posicionesDeCiudades[]
    + obtenerPosicion(): Posicion
    + calcularDistancia(ciudad, ciudad) : int
}

interface GradoDePolicia{
    + calcularTiempoDeViaje(kilometros) : int
    + consultarNivelDePistaDisponible() : String
}

interface LugarDeInteres{
    + visitar(grado) : Pista
}

interface Pista{
    - descripcion : String
    + buscarPista() : Pista
    + mostrarPista()
    + consultarEstado(grado) : boolean
}

interface ObjetoRobado{
    - cantidadPaises : int
	+ obtenerObjeto() : Objeto
}

interface Tiempo{
    - tiempo : int
    + tiempoTotal(tiempo) : int
}


Partida "1" --o "1..*" Ladron
Partida"1" --* "1"Policia
Partida --o Tiempo
Policia --* GradoDePolicia
Policia --> Comisaria
Policia --> Mapa
Partida "1" --* "1..*" Ciudad
Policia --> Ciudad
Ciudad "1" --> "1..5"LugarDeInteres
LugarDeInteres "1" --o "1..*" Pista
Ladron --* "1..*" ObjetoRobado
Comisaria --o "*" Ladron

@enduml