en to de translation catalogue (24 entries)

note: type: Title-text
en: Remote control #4
de: Fernsteuerung 4

note: type: Resume-text
en: Remote control a bot without using an information exchange post by defining a class for the orders.
de: Definieren Sie eine neue Klasse, um einen Roboter fernzusteuern.

note: type: ScriptName-text
en: Remote4
de: Steuerung4

note: type: Plain text
en: Remote control a slave robot without using an <a object|exchange>information exchange post</a>. The robot should pass over the 6 blue crosses. You must use a <code><a cbot|static>static</a></code> variable to pass the orders to the slave bot.
de: Steuern Sie einen Slave-Roboter ohne Verwendung eines <a object|exchange>Infoservers</a> fern. Der Roboter muss alle 6 blauen Kreuze passieren. Sie müssen eine <code><a cbot|static>statische</a></code> Variable verwenden, um den Slave Befehle zu erteilen.

note: type: Plain text
en: The two main actors of this exercise are:
de: Die beiden Hauptakteure dieser Übung sind:

note: type: Bullet: '1)'
en: The <a object|botgr>wheeled grabber</a> without an energy pack and therefore immobile. This is the master you should program so it will transmit orders to the slave.
de: Der <a object|botgr>Radtransporter</a>, der keine Batterie hat und dadurch unbeweglich ist. Dies ist der Master den Sie so programmieren sollen, dass er Befehle zum Slave sendet.

note: type: Bullet: '2)'
en: The slave <a object|bottr>practice bot</a> which is already programmed and just waits for orders from the master.
de: Der Slave-<a object|bottr>Übungsroboter</a> ist schon mit einer Programmierung versehen und wartet auf Befehle vom Master.

note: type: \b; header
en: The slave
de: Der Slave

note: type: Plain text
en: First of all we must understand how the program of the slave works. The <a cbot|class>class</a> <code>order</code> contains two members: <code>m_type</code> is the order to execute (move or turn) and <code>m_param</code> is the distance to move or the rotation angle:
de: Zu allererst müssen wir klären, wie der Slave funktioniert. Die <a cbot|class>Klasse</a> <code>order</code> besitzt zwei Variablen: <code>m_type</code> ist der auszuführende Befehl (bewegen oder drehen) und <code>m_param</code> ist die Entfernung oder der Drehungswinkel:

note: type: Plain text
en: A second <a cbot|class>class</a> <code>exchange</code> contains the mechanism for exchanging the orders. We declare a <code><a cbot|static>static</a></code> class member <code>m_order</code> which will contain the order to be executed. The word <code>static</code> insures that the member <code>m_order</code> is shared between all instances of the <a cbot|class>class</a> exchange.
de: Eine zweite <a cbot|class>Klasse</a>, <code>exchange</code>, enthält die Mechanismen zum Austausch von Befehlen. Wir deklarieren eine <code><a cbot|static>statische</a></code> Klassenvariable <code>m_order</code>, die den auszuführenden Befehl enthalten wird. Das Wort <code>static</code> stellt sicher, dass auf die Variable <code>m_order</code> von allen Instanzen der <a cbot|class>Klasse</a> <code>exchange</code> zugegriffen werden kann.

note: type: Plain text
en: <n/>The <code>put</code> method will be used by the master robot for transmitting an order. As long as <code>m_order</code> is different from <code><a cbot|nan>nan</a></code>, the slave has not finished the order and the <code>put</code> method will return <code>false</code> and will do nothing:
de: <n/>Die Methode <code>put</code> wird vom Master dazu verwendet, Befehle zu übermitteln. Solange <code>m_order</code> nicht <code><a cbot|nan>nan</a></code> ist, hat der Slave seinen Befehl noch nicht abgearbeitet und die Methode <code>put</code> gibt <code>false</code> zurück und tut sonst nichts:

note: type: Plain text
en: Another method <code>get</code> will be used by the slave to retrieve the orders. This method returns the order to be executed:
de: Eine andere Methode, <code>get</code>, wird vom Slave dazu benutzt, Befehle abzuholen. Diese Methode gibt den Befehl zurück, der abgearbeitet werden soll:

note: type: Plain text
en: A third method <code>delete</code> will be used by the slave to indicate that the order has been executed:
de: Eine dritte Methode, <code>delete</code>, verwendet der Slave, um anzuzeigen, dass er den Befehl ausgeführt hat:

note: type: Plain text
en: The main program of the slave contains an instance of the class <code>exchange</code> called <code>list</code>. We put () after the word <code>list</code> in order to create an instance of the class <code>exchange</code>.
de: Das Hauptprogramm des Slaves enthält eine Instanz der Klasse <code>exchange</code> namens <code>list</code>. Wir setzen Klammern () hinter das Wort <code>list</code>, um eine Instanz der Klasse <code>exchange</code> zu erzeugen.

note: type: Plain text
en: The outer <code>while</code> loop lasts for ever. The inner <code>while</code> loop waits for an order by using the <code>get</code> method of the <code>exchange</code> class. As soon as <code>get</code> returns a value different from <code>nan</code>, the while loop stops.
de: Die äußere <code>while</code>-Schleife wird nie verlassen. Die innere <code>while</code>-Schleife wartet auf einen Befehl, wobei die Methode <code>get</code> der Klasse <code>exchange</code> verwendet wird. Sobald <code>get</code> einen Wert zurückgibt, der nicht <code>nan</code> ist, wird die Schleife verlassen.

note: type: Plain text
en: Now we have received the order in the <code>todo</code> variable. All we have to do is execute it:
de: Nun haben wir einen Befehl empfangen, der in der Variablen <code>todo</code> steht. Wir müssen ihn nur noch ausführen:

note: type: Source code
en: 		{
    			move(todo.m_param);
    		}
    		else if ( todo.m_type == 2 )
    		{
    			turn(todo.m_param);
    		}
    		else
    		{
    			message("Unknown order");
    		}
de: 		{
    			move(todo.m_param);
    		}
    		else if ( todo.m_type == 2 )
    		{
    			turn(todo.m_param);
    		}
    		else
    		{
    			message("Unbekannter Befehl");
    		}

note: type: Plain text
en: As soon as the execution of the order is finished, we must call the <code>delete</code> method so the master knows that another order can be sent:
de: Wenn wir einen Befehl vollständig bearbeitet haben, müssen wir die Methode <code>delete</code> aufrufen, damit der Master weiß, dass er den nächsten Befehl senden kann:

note: type: \b; header
en: The master
de: Der Master

note: type: Plain text
en: In the master we write an function called <code>SendOrder</code> which will send an order to the slave:
de: Für den Master schreiben wir eine Funktion namens <code>SendOrder</code>, die einen Befehl zum Slave sendet:

note: type: Plain text
en: The <code>while</code> loop waits until a pending order has been terminated, that is the slaved has exited from the <code>get</code> method and the <code>delete</code> method has been called.
    Now the main program of the master is very simple:
de: Die <code>while</code>-Schleife wartet ab, bis ein früher gesendeter Befehl bearbeitet wurde, der Slave also die Methode <code>get</code> verlassen und <code>delete</code> aufgerufen hat.
    Das Hauptprogramm für den Master ist nun sehr einfach:

note: type: Plain text
en: <format key><key help/></format> show these instruction at any time.
de: Mit <format key><key help/></format> können Sie diese Anweisungen jederzeit einsehen.

note: type: \t; header
en: See also
de: Siehe auch

note: type: Plain text
en: <a command>Controls</a> and <a cbot>programming</a>.
de: Die <a cbot>CBOT-Sprache</a>, die <a cbot|type>Variablentypen</a> und die <a cbot|category>Kategorien</a>.
