Einführung in ComputerCraft

From Feed The Beast Wiki
Jump to: navigation, search
This page is a translated version of the page Getting Started (ComputerCraft) and the translation is 100% complete.

Die Grundlagen

Einführung

ComputerCraft besteht im Wesentlichen aus drei Hauptkomponenten, den Rechnern, Turtles und den Peripheriegeräte, welche die grundlegenden Funktionalitäten der beiden anderen erweitert. Es ist möglich, alle drei Sachen herzustellen, ohne jemals selber ein Programm zu schreiben. Dies geht auch mit Hilfe der schon bestehenen Programmen von der Modifikation... Dabei ignoriert man aber das wahre Potenzial von ComputerCraft. Diese Einführung bietet Informationen über einige Grundlagen und geht davon aus, dass der Nutzer keine oder wenig Erfahrung mit der Programmiersprache Lua hat die von ComputerCraft verwendet wird. Es ist zu beachten das diese Einführung nur auf einige der grundlegenden Aspekte und Komponenten von ComputerCraft eingeht. Weitere Informationen findet man auf der Offiziellen ComputerCraft-Website sowie hier im Wiki.

Der Rechner

Die erste und grundlegende Komponente von ComputerCraft ist der Rechner(Engl. Computer). Das Rezept ist verhältnismäßig billig und kann relativ früh, falls man über Redstone verfügt, hergestellt werden. Der Rechner kann überall plaziert werden und durch das Zerstören mit einem beliebigen Werkzeug wieder aufgenommen werden.


Rechtsklick auf den Rechner öffnet die CraftOS-Befehlszeile (CraftOS ist das Standardbetriebssystem der Rechner), von hier aus werden die meisten Programme auf dem Rechner ausgeführt.

Grundlegende CraftOS-Befehle

Die grundlegenden Befehle die im CraftOS verwendet werden sind zum größten Teil entweder identisch oder sehr ähnlich zu den grundlegenden Befehle die in fast allen Distributionen von *nix-Betriebssystemen verwendet werden; ansonsten sollten diejenigen Nutzer die mit Progammiersprachen grundlegend vertraut sind (Auch die die nur gelegentlich eine Befehlszeile in andere Betriebssystemen, wie Windows oder OSX verwendet haben) leicht in der Lage sein, sich mit ihnen vertraut zu machen. Die folgenden Befehle laufen vom CraftOS aus. Es ist zu beachten, dass Parameter in kursiv als optional angesehen werden.

Befehl/Befehl alias <Parameter> Befehlsbeschreibung/Verwendung
help <Name des Themas> Der Befehl alleine zeigt eine Liste an Themen an. Falls das Thema bereits spezifiziert wurde gibt der Befehl Informationen über das Thema aus.
programs Listet alle zur Verwendung vorhandenen Programme auf.
apis Gibt eine Liste von verfügbaren APIs (application programming interfaces) aus, die man (via Lua) innerhalb des CraftOS verwenden kann. Man erhält weitere Informationen zu den APIs durch den help Befehl und dem Namen der API als Parameter.
ls/list <directory> Zeigt die Inhalte der directory an. Ohne directory angegeben werden die Inhalte der gegenwärtigen ausgegeben.
cd <directory> Ändert die gegenwärtige directory, .. kann verwendet werden um zur parent directory von dem Ort zu kommen von welchen aus der Befehl ausgeführt wird.
mkdir <directory name> Erstellt eine neue directory mit dem gegebenen Namen.
mv/move/rename <Quelldatei> <Zielverzeichnis> Ohne Angabe einer Zieldatei, wird die Quelldatei einfach umbenannt. Bei Angabe eines Zielverzeichnisses, wird die Quelldatei umbenannt und zum Zielverzeichnis verschoben.
edit <Dateiname> Öffnet einen Texteditor zur Bearbeitung der ausgeählten Datei; Falls die Datei nicht existiert wird eine neue erstellt. Bei Druck auf die STRG Taste öffnet sich eine Auswahl zum Speichern und Verlassen der Datei.
reboot Startet das CraftOS neu.
pastebin <get/put> Wichtig: Dieser Befehl funktioniert nur wenn die HTTP API aktiviert ist (ist standartmäßig in den meißten FTB Modpacks aktiv, kann aber von Serveradmins oder Modpackentwicklern deaktiviert worden sein).

Speichert die Inhalte des PastebinCodes in der angeführten Datei. Der Code ist normalerweise die Zahlenkombination in der Pastebin URL die hinter http://pastebin.com steht(z.Bsp. , wenn der Link http://pastebin.com/NotValid1 ist dann ist NotValid1 der Code). Dieser Befehl wird meißtens genutzt um Dateien zu teilen. Auch macht er es möglich Programme auserhalb von Minecraft zu schreiben und diese dann zu implementieren. Pastebin hat zwei Hauptargumente, put und get. Pastebin get <code> <filename> speichert die Datei von Pastebin auf dem Computer, während Pastebin put <filename> die Datei auf Pastebin hochlädt und dem Benutzer ebenfalls mitteilt welche Code er braucht um die Datei zu erreichen.

Es gibt viele weitere Befehle die man mit dem help-Befehl nachlesen kann.

Tastenkombinationen

Die folgenden Tastenkombinationen können verwendet werden, um den Computer zu steuern und sind praktisch um aus einer Endlosschleife zu entkommen oder startup-Skripts zu testen.

Tastenkombination Geschehen
STRG + T Zwangsbeendet ein Programm.
STRG + R Startet den computer neu.
STRG + S Fährt den computer herunter.

Programmierung

Um ein neues Programm zu erzeugen, nutzen sie den oben genannten edit <Dateiname> Befehl. Diese Anleitung beginnt zuerst mit zwei einfachen Programmen und fährt dann mit spezifizen Beispielen für die 'CraftOS' und ComputerCraft Interaktion mit anderen Objekten in der Umgebung fort. Funktionen und API-Methoden die in den Beispielen verwendet werdem haben Links, die sie weiter erklären werden.

Hallo Welt

Der traditionelle erste Schritt in fast jeder Programmiersprache ist es zu lernen, wie man eine einfache Textzeile (in der Regel "Hallo Welt") auf dem Bildschirm erzeugt. Dieses Beispiel wird dem Leser dies, unter Verwendung des print()-Befehles, erläutern.

Öffne eine neue Programmdatei im Bearbeitungsprogramm (empfohlener Name: "hallo") und gib folgendes ein:

print("Hallo Welt.")

Einfach, oder ? Speichere nun die Datei, verlasse den Bearbeitungsprogramm und tippe den Namen des Programms ein. Falls alles richtig eingegeben wurde, sollte nun folgendes im CraftOS Fenster erscheinen:

> hallo
Hallo Welt.
>

Herzlichen Glückwunsch zum ersten Schritt in einer beliebigen Programmiersprache. Obwohl es nur ein paar Zeilen lang, zeigt das Programm, wie die Ausgabe von einem Text funktioniert. Dies ist in der Regel der erste Weg, um Informationen zu dem Benutzer des Computers (abgesehen von Grafiken, diese werden in diesem Handbuch nicht behandelt) auszugeben.

Hallo Benutzername

Während die Ausgabe von Text wichtig ist, ist es auch wichtig, Eingaben (ob es nun Informationen, die von einem Programm verwendet werden, oder Navigationen durch ein Programmschnittstelle sind) zu erhalten. Dieses Programm wird von der print ()Funktion aus fortfahren, sowie Variablen und die read () und [http:// computercraft.info/wiki/Write write ()] Funktionen vorstellen.

Öffne eine neue Programmdatei im Bearbeitungsprogramm (empfohlener Name: hallo2). Geben Sie Folgendes ein...

write("Bitte geben Sie Ihren Namen ein:") 
local benutzername = read()
print("Hallo", benutzername, ".")

Speichere die Datei, schließe den Bearbeitungsprogramm und führe dann das Programm aus. Es wird einige Eingaben vom Benutzer erwarten, aber das Gesamtergebnis wird so aussehen:

 
> hello2 
Bitte geben sie ihren Namen ein: CoderJ 
Hallo CoderJ. 
>

Die "print"-Funktion (dt. drucken) in diesem Beispiel bündelt mehrere Argumente z.B.

print("Hallo "..benutzername..".")

ist das gleiche wie

print("Hallo ", benutzername, ".")

Das Beispiel zeigt, wie ein Programm erstellt wird, wie Informationen auf einem Bildschirm ausgegeben wird, wie Eingaben eingelesen und wie Daten in einer Variable gespeichert werden.

Lichtschalter mit einem Rechner

Dieses Beispiel ist ein wenig mehr als nur der Grundaufbau: Der Rechner. Auf der linken Seite des Rechners, legen Sie entweder etwas Redstone oder Red-Legierungs-Draht (nur ein Block ist nötig). Setze daneben eine Lampe (es spielt keine Rolle, welche Art). Bitte beachte, man kann diesen Aufbau auf jeder Seite des Rechners platzieren, jedoch wird die Platzierung beeinflussen, wie der Kode geschrieben werden muss (es ist aber ziemlich selbsterklärend).

In diesem Beispiel sind durchaus ein paar neue Funktionen/Anweisungen eingeführt, einschließlich der while-Schleife,if...then...else-Anweisungen, os.pullEvent(), print(), das ist, redstone.setOutput(), und Kommentare (zur Vereinfachung der Navigation/Identifizierung von Kode-Abschnitte). Kommentare sind die Texte, die nach -- stehen

Gebe den folgenden Kode ein (fühle dich frei Kommentare zu unterlassen, sie sind da, für das einfache Lesen des Kodes. Es ist verständlich, wenn man meint das man ein bisschen zuviel eingetippt hat):

-- Computer-Lichtschalter 
local side ="left"      -- Stellen Sie die Seite für das Redstone-Signal ein.
local userinput =""      -- Initialisierung von Benutzereingaben 
local event =""      -- Initialisierung des Ereignisses

redstone.setOutput(side, false)    -- Setz, nur für den Fall, die Richtung des Redstone-Signals zurück.

while true do

-- Der erste Abschnitt der Schleife, die Lampe ist aus.
term.clear() -- Löschen des Bildschirmes
term.setCursorPos(1,1) -- Positioniert den Zeiger an der oberen linken Ecke.
print("Um die Lampe einzuschalten, drücke L.")
print("Zum Beenden, drücke eine beliebige Taste.")

-- Wartet auf Benutzereingabe (als Buchstaben), wandelt diese in Großbuchstaben um.
event, userinput = os.pullEvent("char")
userinput = string.upper(userinput)

-- Überprüft ob die Eingabe ein "L" ist, andernfalls wird die Schleife unterbrochen.
if userinput == "L" then
redstone.setOutput(side, true) -- Schaltet das Redstone-Signal an
else
 term.clear()
 break
end

  term.clear() -- Löscht den Bildschirm
term.setCursorPos(1,1) -- Positioniert den Zeiger in die obere linke Ecke
print("Um die Lampe auszuschalten, drücke L.")
print("Zum Beenden, drücke eine beliebige andere Taste.")

-- Wartet auf Benutzereingabe (als Buchstaben), wandelt diese in Großbuchstaben um.
event, userinput = os.pullEvent("char")
userinput = string.upper(userinput)

-- Überprüft ob die Eingabe ein "L" ist, andernfalls wird die Schleife unterbrochen.
if userinput == "L" then
redstone.setOutput(side, false) -- Schaltet das Redstone-Signal an
else
 term.clear()
 break
end

end -- Ende der while true Schleife.

Nach dem Ausführen dieses Kodes, wird in etwa folgendes auf dem Bildschirm zu sehen sein:

 Um die Lampe einzuschalten, drücken Sie L. 
 Zum Beenden, drücken Sie eine beliebige andere Taste. 

(Vorausgesetzt der Benutzer drückt L, schaltet sich die Lampe an und das folgende wird angezeigt, ...)

Zum Auschalten der Lampe, drücken Sie L. 
Zum Beenden, drücken Sie eine beliebige andere Taste.

Durch drücken einer beliebigen anderen Taste, wird der Benutzer auf die CraftOS Eingabeaufforderung zurückzukehren. Dieses Programm sieht kompliziert aus, aber in Wirklichkeit ist es nur sehr chaotisch (und verletzt tatsächlich ein paar Konventionen). Das Schreibe dieses Codes zeigt jedoch dem Benutzer die Essenz dessen, was geschieht, und stellt den Benutzer auf das nächste Beispiel ein.

Rechner-Lichtschalter Mk. II

Dieses Beispiel nutzt den Aufbau aus dem vorherigen Beispiel. Hier wird der Benutzer lernen, Funktionen sowie andere Aspekte der Redstone-API zu verwenden, um die Lampe zu steuern und um "sperrigen" Kode zu vermeiden. Es wird empfohlen, eine neue Programmdatei zu starten, anstatt die alte Datei weiter zu bearbeiten (wegen der Art und Weise wie der CraftOS-Bearbeitungsprogramm funktioniert). Um es zu vereinfachen, werde ich die meisten der früheren Kommentare weglassen, damit der Kode leichter zu lesen ist. Das Programm verwendet einen neuen Teil der Redstone-API, redstone.getOutput (Seite). Dies ermöglicht dem Rechner Redstone-Signale zu erkennen, welches der Rechner an der angegebenen Seite ausgibt oder nicht, und gibt ein ein Argument wieder.

local side = "left"      
local userInput = ""     
local event = ""      
 
redstone.setOutput(side, false)   
 
-- weil wir etwas wiederholendes gemacht haben in dem vorherigen Programm, kann eine Funktion es sehr vereinfachen
-- aber die Funktionen sind wie neue Räume, es kann nicht zu allen Variablen zugreifen es sei denn man gibt es ihr an, in dem Falle wird das erste Argument whichSide genannt in dem Raum.
local function redraw(whichSide)
                         
  --term.setCursorPos(1,1)             
  if redstone.getOutput(whichSide) then -- hier wird der Status der Lampe abgefragt durch das Schauen ob das Redstone an ist
    print("Drücke L, um die Lampe auszumachen.")
  else -- wenn es nicht an ist dann
    print("Drücke L, um die Lampe anzumachen.")
  end
  print("Drücke irgendeine Taste, zum verlassen.")
end
while true do
  -- dies lässt den Kode laufen in der Funktion, aber die Funktionen müssen wissen auf welcher Seite der Reihe nach geprüft werden sollte, ob die Lampe an ist, und so wird das Argument die Seite angeben, welches den Raum mitteilt welche Seite whichSide ist
  redraw(side)
 
  event, userInput = os.pullEvent("char")
  userInput = string.upper(userInput)
  print(userInput)
 
  if userInput == "L" and not redstone.getOutput(side) then
    redstone.setOutput(side, true) -- Aktiviert den Redstone-Ausgang
  elseif userInput == "L" and redstone.getOutput(side) then
    redstone.setOutput(side, false) -- Deaktiviert den Redstone-Ausgang
  end
  if event=="char" and userInput~="L" then
    break
  end
 
end

Das Paket von If-Anweisung kann vereinfacht werden zu:

if userInput == "L" then
  -- wenn false stelle auf true, wenn true stell auf false
  redstone.setOutput(side, not redstone.getOutput(side))
elseif event == "char" then
  -- du kennst schon bereits userInput ~="L"
  break
end

Intelligenter Rechner-Lichtschalter

Inhalt kommt bald.

Weiterführende Konzepte

Erweiterte Beispiele

Intelligente Hausbeleuchtung

Was tun, wenn etwas nicht funktioniert

Es wird passieren, das man viel Zeit für das sorgfältige Schreiben des Kodes verbringt, speichert und das Programm ausführt ... um dann festzustellen, dass es nicht funktioniert. Es gibt in der Regel ein paar wichtige Dinge zu überprüfen, bevor Sie Ihre Maus gegen den nächstgelegenen Unbeteiligten werfen...

  1. Prüfen Sie die Fehlermeldung... 99,999 % der Fälle wird es so sein, das genau angezeigt wird wo (welche Zeile) der Fehler (falsche Syntax, fehlendes End-Statement, etc.) gemacht wurde.
  2. Prüfen Sie den Einsatz von Groß- und Kleinbuchstaben. Denke daran das die Funktionen in der Regel mit einem Kleinbuchstaben beginnen, aber zusätzliche 'Worte' großgeschrieben werden (zum Beispiel - redstone.setOutput) .
  3. Prüfen sie die Steueranweisungen (while, for ,if , etc). Stellen Sie sicher, dass sie korrekt für beendet erklärt wurden (manchmal kann es auch sein, dass eine fehlende Endeanweisung für mehrere Linien nicht registriert wird).
  4. Wenn Sie Zweifel haben, schreiben Sie sich es heraus. Man kann manchmal überrascht werden, wie offensichtlich ein Fehler ist, wenn man es sich nochmal anschaut.
  5. Falls es Fragen gibt, stelle diese an die [ http://forum.feed-the-beast.com Gemeinschaft]. Manchmal sind die Dinge schwieriger, als sie zu sein scheinen aber die Chancen, dass jemand den gleichen Fehler gemacht und gelöst hat, sind sehr hoch. Denke aber daran, dass Forum nach vorherigen Beiträgen zu durchsuchen, bevor du selbst etwas fragst.

Siehe auch

Other languages:
Deutsch • ‎English • ‎Nederlands • ‎français • ‎italiano • ‎српски / srpski