El código de mi Droid
Durante el CodeCamp casi todos los asistentes estuvimos preparando unos Droids para el concurso del Lego MindStorm NTX de Miguel Jimenez, el caso es que por problemas técnicos (versiones y alguna cosilla más) no fueron usados para el concurso dejando totalmente al azar la lucha de Legos.
El funcionamiento de los Droids espero que nos lo explique detalladamente Miguel un día de estos cuando publique los droids y la aplicación para la lucha.
Yo de momento os cuento que era lo que había que hacer.
Para empezar he importado los siguientes Namespaces:
Imports System
Imports CloneWars
Se trataba de implementar una interfaz en nuestra clase:
Public Class EugeBot
Implements CloneWars.IDroid
End Class
Al implementar la interfaz se crearon las siguientes propiedades que encapsulé:
Const _name As String = "eecsaky"
Const _faction As Faction = CloneWars.Faction.RebelAlliance
Private _status As Status
Private _combat As Combat
Public ReadOnly Property CombatMovements() As CloneWars.Combat Implements CloneWars.IDroid.CombatMovements
Get
Return _combat
End Get
End Property
Public ReadOnly Property Faction() As CloneWars.Faction Implements CloneWars.IDroid.Faction
Get
Return _faction
End Get
End Property
Public ReadOnly Property Name() As String Implements CloneWars.IDroid.Name
Get
Return _name
End Get
End Property
Public ReadOnly Property Status() As CloneWars.Status Implements CloneWars.IDroid.Status
Get
Return _status
End Get
End Property
Y el procedimiento:
Public Sub InitDroid(ByVal status As CloneWars.Status) Implements CloneWars.IDroid.InitDroid
End Sub
En este procedimiento debíamos de crear los cinco turnos de los que se componía cada combate, lo lógico sería pensar cual era el orden de ataque para sobrevivir y ganar el combate, pero claro eso era lo lógico no lo creativo.
Mi razonamiento era el siguiente, si creas un Droid que no puede ganar a ninguno lo has fastidiado, ¿Pero qué pasa si cada ataque es diferente? Pues estás en las manos de azar completamente. Entoces la solución era generar aleatoriamente, para ello cree, con la ayuda de Bruno
, los siguientes metodos privados:
Protected Function GetRandomTurn() As Turn
Dim TurnDef1, TurnDef2, TurnDef3 As TurnDefense
Dim myDef1, myDef2, myDef3 As CloneWars.Defense
myDef1 = GetRandomDefense()
myDef2 = GetRandomDefense()
Do Until myDef1 <> myDef2
myDef2 = GetRandomDefense()
Loop
myDef3 = GetRandomDefense()
Do Until myDef1 <> myDef2 And myDef1 <> myDef3
myDef3 = GetRandomDefense()
Loop
TurnDef1 = New TurnDefense(myDef1, GetRandomAttack())
TurnDef2 = New TurnDefense(myDef2, GetRandomAttack())
TurnDef3 = New TurnDefense(myDef3, GetRandomAttack())
Return New Turn(GetRandomAttack(), TurnDef1, TurnDef2, TurnDef3)
End Function
Protected Function GetRandomAttack() As CloneWars.Attack
Dim att As CloneWars.Attack
Randomize()
Dim rnd As New Random
Select Case rnd.Next(4)
Case Is = 0
att = Attack.ForcePike
Case Is = 1
att = Attack.LightCane
Case Is = 2
att = Attack.LightSaber
Case Is = 3
att = Attack.PunchFight
Case Else
att = Attack.UseTheForce
End Select
Return att
End Function
Protected Function GetRandomDefense() As CloneWars.Defense
Dim def As CloneWars.Defense
Randomize()
Dim rnd As New Random
Select Case rnd.Next(8)
Case Is = 0
def = Defense.CounterAttack
Case Is = 1
def = Defense.ForceShield
Case Is = 2
def = Defense.ProtectWithForce
Case Is = 3
def = Defense.PunchFight
Case Is = 4
def = Defense.SaberDefense
Case Is = 5
def = Defense.UseTheForce
Case Is = 6
def = Defense.WalkBack
Case Else
def = Defense.WristShield
End Select
Return def
End Function
Y esto lo apicamos al procedimiento InitDroid de la siguiente forma:
Public Sub InitDroid(ByVal status As CloneWars.Status) Implements CloneWars.IDroid.InitDroid
_status = status
_combat = New Combat()
With _combat
For i As Integer = 0 To 4
_combat.AddTurn(GetRandomTurn)
Next
End With
End Sub
Se que no fui el único que hizo esto para su Droid, pero bueno aquí dejo el código para quien lo quiera reutilizar para lo que necesite 