|
VB2008 ExpressDownload : FishFaceTXVB.ZIP Klasse HanoiTowerImports FishFaceTXModule HanoiTower Dim hr As HanoiRobot Sub Main() hr = New HanoiRobot() Console.WriteLine("--- Main gestartet, Abbruch ESC-Taste ---") Console.WriteLine("--- Auf Grundstellung ---") hr.OpenController("COM4") hr.Grundstellung() Console.WriteLine("--- Bei der Arbeit ---") Hanoi(3, 2, 22, 38) Console.WriteLine("--- FINITO : RETURN drcken ---") hr.CloseController() Console.Read() End Sub Sub Hanoi(ByVal n As Integer, ByVal TAnf As Integer, _ ByVal TMit As Integer, ByVal TEnd As Integer) If n = 1 Then Console.WriteLine("Scheibe {0:0} : von {1:00} nach {2:00}", n, TAnf, TEnd) hr.Ziehe(TAnf, TEnd) Else Hanoi(n - 1, TAnf, TEnd, TMit) Console.WriteLine("Scheibe {0:0} : von {1:00} nach {2:00}", n, TAnf, TEnd) hr.Ziehe(TAnf, TEnd) Hanoi(n - 1, TMit, TAnf, TEnd) End If End Sub Hier wurde auf die Methode Action() verzichtet und deren Code in Main() untergebracht. VB nennt Console-Klassen Module und bastelt die fällige Instanzierung intern. Klasse HanoiRobotClass HanoiRobotInherits FishFace Const SpeedFull As Integer = 512 Const mSaule As Mot = Mot.M1 Const mArm As Mot = Mot.M2 Const iArmOben As Unv = Unv.I3 Const iArmUnten As Unv = Unv.I4 Const oGreifer As Out = Out.O5 Dim robPos As Integer Sub Grundstellung() SetLamp(oGreifer, Dir.Off) ArmHeben() robPos = 9999 SauleNach(0) End Sub Sub Ziehe(ByVal von As Integer, ByVal nach As Integer) SauleNach(von) ArmSenken() SetLamp(oGreifer, Dir.On) ArmHeben() SauleNach(nach) ArmSenken() SetLamp(oGreifer, Dir.Off) ArmHeben() End Sub Sub SauleNach(ByVal zielPos As Integer) If robPos < zielPos Then StartRobMotor(mSaule, Dir.Right, SpeedFull, zielPos - robPos) robPos = zielPos + WaitForMotor(mSaule) Else StartRobMotor(mSaule, Dir.Left, SpeedFull, robPos - zielPos) robPos = zielPos - WaitForMotor(mSaule) End If End Sub Sub ArmSenken() SetMotor(mArm, Dir.Left) WaitForInput(iArmUnten, True) SetMotor(mArm, Dir.Off) End Sub Sub ArmHeben() SetMotor(mArm, Dir.Right) WaitForInput(iArmOben, True) SetMotor(mArm, Dir.Off) End Sub End Class End Module Hier wurde auf die Angabe der Zugriffsmodifizierer (Public/Private) verzichtet. So sieht es noch mehr nach Basic aus. Stand : 19.04.2010 |