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 [:)]