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

5 thoughts on “El código de mi Droid

  1. Los Navarros pensamos en una estrategia diferente (creo que se le ocurrió a Alberto) era crear un droid que siempre ganaría a otro droid, y la pequeña trampa estaba en subir un droid ganador y muchos perdedores, de manera que en cada lucha de el ganador con los perdedores, el ganador obtendría los máximos puntos posibles.

    En el resto de batallas nuestro droid ganador seguramente perdería. Pero pensábamos subir un numero de droids perdedores lo suficientemente grande.

    Para que el droid perdedor no beneficiara a otros droids, los ataques y defensas estaban perfectamente sincronizados.

    Hecha la ley hecha la trampa, pero no había limite de subidas x usuario.

    csegura.

  2. Si, no se quien me lo estaba contando en la cabaña de Miguel mientras preparaba la final. Pero quien me lo contó ya se dio cuenta del error, ¿qué pasa si tu droid perdedor casualmente era vencido por otro droid y además te gana al tuyo? Pues le estarias dejando en bandeja la victoria.

    Saludos, por cierto, creo que tu y yo no nos conocimos, para otra vez ya sabes 😉

  3. No dije que fuera perfecto, solo que era un buen planteamiento. Fue Alberto el que se dio cuenta de eso, pero Miguel nos dejo con las ganas de probar el asunto, aunque era puro AZAR.

    Si, nos conocimos es cierto … 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *