Option Explicit
Private Juego As TuteDLL.cJuego
Private bDebugging As Boolean
Public Sub ShuffleForDebbuging(sDeck As String, Cards() As String)
Dim dummy As String
Dim i As Integer
'Esta
rutina es para forzar un orden de las cartas. De esta forma, se pueden elegir
que cartas le toca a cada jugador y poder probar distintos
'escenarios, dependiendo de lo que se quiera
analizar o depurar en ese momento.
'NOTA: Si bien esta subrutina no será llamada
cuando no se esté jugando en modo ‘depuración’, no olvidarse comentar el código
para que la mezcla del mazo no se vea afectado en el juego final (por las
dudas)
If
Debugging Then
''' Estas líneas son para
que el jugador que reparta (en un juego de 5) reciba todos los bastos más
grandes.
''' Era para probar que la
rutina de revisar el capote, y si había cantado o no funciona correctamente.
' sDeck =
"01c02c03c04c01b05c06c07c10c03b11c12c01e02e12b03e04e05e06e11b" & _
"07e10e11e12e10b01o02o03o04o07b05o06o07o10o06b11o12o02b04b05b"
' dummy = sDeck
'
'
For i = 0 To 39
' Cards(i) = Left(dummy, 3)
' dummy = Mid$(dummy, 4)
'
Next i
' ******************************************************************
' Estas líneas son para que
el jugador que reparta tenga cuarenta y veinte.
' sDeck =
"01c02c03c04c12b05c06c07c10c11b11c12c01e02e01b03e04e05e06e03b" & _
"07e10e11e12e12o01o02o03o04o11o05o06o07o10o06b07b10b02b04b05b"
' dummy = sDeck
'
'
For i = 0 To 39
' Cards(i) = Left(dummy, 3)
' dummy = Mid$(dummy, 4)
'
Next i
'
******************************************************************
''
Estas líneas son para que el jugador que reparta tenga tute de 12, cuarenta y
veinte de oros.
' sDeck =
"01c02c03c04c12b05c06c07c10c11b11c06b01e02e01b03e04e05e06e03b" & _
"07e10e11e05b12o01o02o03o04o11o05o06o07o10o12c07b10b02b04b12e"
' dummy = sDeck
'
'
For i = 0 To 39
' Cards(i) = Left(dummy, 3)
' dummy = Mid$(dummy, 4)
' Next
i
'
******************************************************************
''
Estas líneas son para que el jugador que reparta tenga tute de 12 y cuarenta
(de copas) jugando de a 5.
' sDeck =
"10c02e05c01b12b04c06c02c03b11c04b05b01e07c03c03e04e05e06e01c" & _
"07e07o11e07b12o01o02o06b10e04o05o06o10o11o12c03o11b02b10b12e"
' dummy = sDeck
'
'
For i = 0 To 39
' Cards(i) = Left(dummy, 3)
' dummy = Mid$(dummy, 4)
'
Next i
'
' 'Secuencia de salida de
cartas para poder cantar Tute y haber fallado.
' 'sCarta = "05o"
' 'sCarta = "07c"
'
' 'Secuencia de salida de
cartas para poder cantar Tute y que sea válido fallado.
' 'sCarta = "05c"
'
******************************************************************
' ' Estas líneas son para
que el jugador que reparte tenga tute de 12 y tute de 11 jugando de a 3. Y los
triunfos: 01c, 03c, 10c y 07c
' sDeck =
"02e10b10c01b04c12b06c02c11b03b04b11c05b01e12c02b03e03c04e05e" & _
"11e06e07e01c07o07b12o01o02o11o06b10e12e04o05o06o10o03o07c05c"
'
dummy = sDeck
'
'
For i = 0 To 39
'
Cards(i) = Left(dummy, 3)
'
dummy = Mid$(dummy, 4)
'
Next i
End If
End Sub
Public Property Set Tute(cTute As
cJuego)
Set Juego = cTute
End Property
Public Function HagoElCanto(ByVal Coll As Collection, ByVal JugId As Integer, _
ByVal sCanto
As String, ByVal
iPuntos As Integer, ByVal sPalo As String) As Boolean
Dim Carta As cCarta
Dim Jug As
cJugador
'La idea de esta función es que decida si es
conveniente realizar el canto o no.
'Recibe:
' Coll: tengo una
colección con todas las cartas que están involucradas.
' JugId: ID del jugador que
podría cantar.
' sCanto: Canto a analizar
("Tute de 12", "Tute de 11", "Cuarenta",
'
"Veinte de Basto", "Veinte de Copa",
'
"Veinte de Espada", ""Veinte de Oro").
' iPuntos: Cantidad de puntos en juego
debido al canto. En el caso de Tute, iPuntos será
' igual a -1,
debido a que se gana la mano.
' sPalo: El palo que está
representado con el canto. En el caso de los tutes, esta variable
' estará vacía.
Set Jug =
Juego.Jugadores(JugId) 'Jugador
que podría cantar
For
Each Carta In Coll
'Cada una de las
cartas involucradas. Si fuera necesario recorrer la colección, esta es
'respecto de que
significa cada variable miembro.
Next
' Por el momento, devuelvo que SÍ debe
hacerse el canto. La idea es que esta función haga todo el análisis que
corresponda para
'que decida si es conveniente o no. En caso
de no serlo, debería contestar False.
HagoElCanto = True
End Function
Public Function AnalizarCartasElegidas(Restan As
cRestan, JugCartas As Collection, JugId As Integer) As Integer
'OJO!!
' La idea es analizar todas
las cartas que puedo tirar. Por ahora,
' estoy haciendo un random, pero acá
tendría que estar la lógica
' que decida que carta me
conviene tirar en función de las variables
' del juego.
' En JugCartas tengo
una Collection con todas las cartas que puedo tirar: Si
' soy mano están todas las cartas que
tengo en la mano. Si no lo soy, sólo están
' las cartas que puedo tirar:
' * Respondiendo al palo y
matando, o
' * Respondiendo al palo pero sin
matar porque no puedo hacerlo -en este caso están
' todas las cartas
que tengo del palo, o
' * Triunfos -si no tengo palo-
que matan a los triunfos de la mesa (o todos los que tenga si no pudiera
matar), o
' * Todas las cartas que tengo en
la mano, si no se cumple ninguna de las anteriores.
'Int((upperbound
- lowerbound + 1) * Rnd + lowerbound)
If
Juego.NivelJuego = ACaraDePerro Then
RomperCantos JugCartas,
JugId
End If
If
Juego.NivelJuego = Intermedio Or Juego.NivelJuego =
ACaraDePerro Then
' Sólo en
los niveles de intermedio y experto se protegerán los cantos. En el caso de
principiante no se intentará protegerlos y podría
'suceder, entonces,
que un canto sea desperdiciado.
'
Temporalmente, llamaré a ProtegerCantos... para evitar destruir un canto si
fuera posible. Obviamente, la idea sería analizar
'si vale la pena
proteger el canto o no.
ProtegerCantos JugCartas,
JugId
End If
Randomize Timer
AnalizarCartasElegidas = Int(JugCartas.Count *
Rnd + 1)
End Function
Private Function RomperCantos(JugCartas As Collection, JugId As Integer)
'
Esta función debería intentar romper cantos. O sea... debería analizar las
cartas que tenemos, las posibilidades de que alguien haga un canto...
'y si queremos ir a más, diseñar la
estrategia para romper el/los canto(s).
' Mirar la función
"ProtegerCantos" para saber como hacer una similar. En ella se revisa
que cartas se pueden evitar (para proteger el canto) y luego se fija
'si quedaría alguna carta que cumpla con las
reglas para ser tirada. Si existen, la(s) carta(s) será(n) removidas de la
colección para que éstas no sean tenidas
'en
cuenta.
End Function
Private Function ProtegerCantos(JugCartas As Collection, JugId As Integer)
Dim Coll As Collection
Dim sCanto As String
Dim iPuntos As Integer
Dim sPalo As String
Dim Carta As cCarta
Dim
CartaMano As cCarta
Dim i As Integer
' Cualquiera de las cartas que tengo en
la mano puede ser tirada cumpliendo
'las reglas. Puedo quitar las cartas que
forman cantos de la colección para
'proteger el canto... siempre y cuando quede alguna
carta para tirar.
Do
If
Juego.AnalizarCanto(Coll, JugId, sCanto, iPuntos, sPalo) Then
For Each Carta In Coll
For Each CartaMano In
Juego.Jugadores(JugId).Cartas
If Carta.ID = CartaMano.ID Then
CartaMano.ID = "-" & CartaMano.ID
Exit For
End If
Next
Next
Else
Exit Do
End If
Loop
iPuntos = 0
For Each CartaMano In JugCartas
If Left$(CartaMano.ID, 1) <> "-" Then
iPuntos = iPuntos + 1
End If
Next
If iPuntos Then
'Todavía quedan cartas que se podrían tirar protegiendo los
cantos
For Each
CartaMano In Juego.Jugadores(JugId).Cartas
If Left$(CartaMano.ID, 1) = "-" Then
CartaMano.ID = Mid$(CartaMano.ID, 2)
On Error Resume Next
'Puede que no sea una carta posible para tirar
JugCartas.Remove CartaMano.ID
On Error GoTo 0
End If
Next
End If
'Por las dudas
For Each
CartaMano In Juego.Jugadores(JugId).Cartas
If Left$(CartaMano.ID, 1) = "-" Then
CartaMano.ID = Mid$(CartaMano.ID, 2)
End If
Next
End Function
Public Property Get Debugging() As Boolean
Debugging = bDebugging
End Property
Public Property Let Debugging(ByVal bNewValue As Boolean)
bDebugging
= bNewValue
End Property
|