Feed The Beast Wiki

Follow the Feed The Beast Wiki on Discord or Mastodon!

READ MORE

Feed The Beast Wiki
Advertisement

Les bases

Introduction

ComputerCraft consiste essentiellement en trois composants importants; l'ordinateur (Computer), les Turtles, et les Périphériques (Peripherals) qui se relient aux deux éléments précédemment cités pour étendre leurs fonctionnalités de base. Il est possible de crafter les trois sans jamais écrire un vrai programme, en utilisant seulement les programmes intégrés fournis par le mod... mais ce serait ignorer le vrai potentiel de ComputerCraft. Ce guide présume que l'utilisateur n'a aucune expérience du Lua, le langage de programmation utilisé par ComputerCraft, et expliquera les bases au fur et à mesure de sa progression. Veuillez également noter que ce guide abordera seulement quelques uns des concepts et des composants de base de ComputerCraft; plus d'informations peuvent être trouvée sur le site officiel de ComputerCraft ainsi que sur ce wiki et dans des guides qui viendront dans le futur.

L'ordinateur

Le premier et plus simple des composants de ComputerCraft est le Computer. La recette est assez peu coûteuse et il peut être crafté relativement tôt si vous avez la chance de trouver de la redstone. Le Computer peut être placé où le joueur le souhaite et peut être récupéré en le cassant avec n'importe quel outil.


Faire un clic droit sur le Computer ouvre la ligne de commande de CraftOS (CraftOS est le système d'exploitation par défaut pour les computers); c'est à partir d'ici que la plupart des utilisateurs lancent des programmes sur leurs computers.

Commandes CraftOS basiques

Les commandes basiques utilisées dans CraftOS sont, pour la plupart, identiques ou très proches des commandes basiques utilisées par presque toutes les distributions des systèmes d'exploitation *nix; ainsi, la plupart des utilisateurs (même ceux qui ont occasionnellement utilisé la ligne de commande dans d'autres OS, comme Windows ou OSX) devraient se familiariser facilement avec celles-ci. Toutes les commandes sont exécutées depuis CraftOS. Notez que les paramètres en italique sont considérés optionnels.

commande/alias <paramètres> Description de la commande/utilisation
help <nom du sujet> Seul, retourne une liste de toutes les pages d'aide. Indiquer le nom du sujet après la commande retournes de l'information sur ce sujet.
programs Liste les programmes pouvant être exécutés.
apis Retourne la liste des APIs (application programming interfaces) disponibles que l'on peut utiliser (par le Lua) depuis CraftOS. Plus d'informations sur diverses APIs sont disponibles en tapant la commande help suivie du nom de l'API.
ls/list <répertoire> Liste le contenu d'un répertoire; si aucun nom de dossier n'est transmis, liste le contenu du répertoire courant.
cd <répertoire> Change le répertoire courant, .. peut être utilisé pour aller dans le dossier parent de celui dans lequel la commande est exécutée.
mkdir <nom du répertoire> Crée un nouveau dossier avec un nom de répertoire donné.
mv/move/rename <fichier source> <fichier de destination> Si utilisé sans un chemin de destination, renomme le fichier; sinon, déplace et renomme le fichier.
edit <nom de fichier> Ouvre un éditeur de texte simple pour modifier le fichier donné; si le fichier n'existe pas, il sera créé à la sauvegarde de son contenu. Appuyer sur CTRL ouvrira le menu des commandes, où l'on peut enregistrer ou fermer l'éditeur.
reboot Redémarre CraftOS.
pastebin <get/put> Important: Cette commande ne fonctionnera que si l'API HTTP est activée (elle l'est par défaut avec la plupart des packs FTB, mais peut être désactivée pour diverses raisons par les admins d'un serveur ou les créateurs d'un modpack).

Récupère le contenu du code Pastebin fourni et l'enregistre dans le fichier spécifié. Le code est typiquement les chiffres/lettres qui se trouvent dans le lien Pastebin après http://pastebin.com (par exemple, si le lien est http://pastebin.com/NotValid1 alors NotValid1 est le code). Cette commande est très utile pour partager le code que l'on crée ainsi que pour permettre d'écrire du code dans un éditeur externe puis de l'importer dans le jeu. Pastebin a 2 principaux arguments, put et get. Pastebin get <code> <nom de fichier> vous permet d'enregistrer des Pastebins sur le Computer, tandis que Pastebin put <nom de fichier> uploadera le fichier spécifié sur Pastebin comme un post public fait en tant qu'invité, et vous donnera également le code qu'il est nécessaire d'utiliser pour le récupérer.

Il existe de nombreuses autres commandes, mais l'on peut facilement en savoir plus à leur propos en utilisant la commande help.

Raccourcis clavier

Les raccourcis clavier suivants peuvent être utilisés pour contrôler l'ordinateur et sont pratiques pour sortir d'une boucle infinie ou tester des scripts de démarrage.

Combinaison de touches Résultat
CTRL + T Cela forcera un programme à quitter.
CTRL + R Cela forcera l'ordinateur à redémarrer.
CTRL + S Cela forcera l'ordinateur à s'éteindre.

Programmation

Pour commencer un nouveau programme, tapez simplement edit suivi d'un nom de fichier. Ce guide commencera avec les deux premiers programmes évidents pour commencer, mais s'orientera rapidement vers des exemples spécifiques qui s'appliquent à CraftOS et à l'interaction de ComputerCraft avec d'autres objets du monde. Les fonctions et les méthodes des APIs utilisées dans les exemples seront accompagnés de liens qui les expliqueront en détails.

Hello World

La première étape traditionnelle dans presque n'importe quel langage de programmation est d'apprendre comment afficher une simple ligne de texte (généralement "Hello world.") à l'écran. Cet exemple montrera au lecteur comment faire cela avec une utilisation basique de la fonction print().

Ouvrez un nouveau fichier dans l'éditeur (nom recommandé : hello), et entrez ce qui suit :

print("Hello world.")

Simple, n'est-ce pas? Enregistrez le fichier et fermez l'éditeur, puis entrez le nom du programme. Si tout va bien, ce qui suit devrait apparaître dans la fenêtre de CraftOS :

> hello
Hello world.
>

Félicitations pour vos premiers pas dans n'importe quel langage de programmation. Même si il ne fait qu'une ligne, ce programme montre comment afficher du texte dans la fenêtre. C'est généralement la principale manière de renvoyer de l'information à un utilisateur (en dehors du graphisme, qui est hors du cadre de ce guide).

Hello Username

Tandis que renvoyer du texte est important, il est aussi important de recevoir une entrée (que ce soit de l'information utilisable par le programme directement ou utilisable pour la navigation dans une interface). Ce programme va étoffer les explications à propos de la fonction print(), ainsi qu'introduire le concept de variables et les fonctions read() et write().

Ouvrez un nouveau fichier dans l'éditeur (nom recommandé: "hello2"). Entrez y ce qui suit...

write("Veuillez entrer votre nom: ")
local username = read()
print("Bonjour ", username, ".")

Enregistrez et fermez l'éditeur, puis exécutez le programme. Il attendra une saisie de l'utilisateur, mais la sortie devrait globalement avoir l'air de cela :

> hello2
Veuillez entrer votre nom: CoderJ
Bonjour CoderJ.
>

La fonction print dans cet exemple concentre plusieurs arguments, c.-à-d. que

print("Hello "..username..".")

revient à écrire

print("Hello ", username, ".")

Cet exemple montre comment créer un programme, comment afficher des informations à l'écran facilement, lire une entrée, et stocker les données dans une variable.

Ordinateur-interrupteur

Cet exemple requiert un peu plus de matériel que l'ordinateur de base. À gauche de l'ordinateur, placez soit un peu de redstone, soit un red alloy wire (un seul bloc suffit). À côté, placez une lampe (le type n'a pas d'importance). Notez que l'on peut faire cette installation de n'importe quel côté de l'ordinateur, toutefois, cela modifiera la manière dont le code doit être écrit (quoique c'est plutôt explicite).

Dans cet exemple, un certain nombre de nouvelles fonctions/déclarations sont introduites incluant la boucle while, les déclarations conditionnelles if...then...else, os.pullEvent(), print(), redstone.setOutput(), et les commentaires (pour faciliter la navigation/l'identification des sections du code). Le texte qui se trouve après un -- sont des commentaires.

Entrez le code suivant (n'hésitez pas à omettre les commentaires, ils sont présent pour faciliter la lecture du code, mais il est compréhensible que quelqu'un trouve que cela fait un peu trop à taper) :

-- Ordinateur-interrupteur
local side = "left"      -- Définit le côté pour le courant de redstone
local userinput = ""     -- Initialise user input
local event = ""         -- Initialise event

redstone.setOutput(side, false)    -- Réinitialise la sortie, au cas où.

while true do

-- Première partie de la boucle, la lampe est éteinte.
  term.clear()                       -- Efface l'écran
  term.setCursorPos(1,1)             -- Place le curseur dans le coin supérieur gauche
  print("Pour allumer la lampe, appuyez sur L.")
  print("Pour quitter, appuyez sur n'importe quelle autre touche.")
 
-- Attend une entrée de l'utilisateur (un caractère), le convertit en majuscule.
  event, userinput = os.pullEvent("char")
  userinput = string.upper(userinput)

-- Vérifie si l'entrée est un L, sinon, sort de la boucle.
  if userinput == "L" then
    redstone.setOutput(side, true) -- Active le courant de redstone
  else
    term.clear()
    break
  end

  term.clear()                     -- Efface l'écran
  term.setCursorPos(1,1)           -- Place le curseur dans le coin supérieur gauche
  print("Pour éteindre la lampe, appuyez sur L.")
  print("Pour quitter, appuyez sur n'importe quelle autre touche.")

-- Attend une entrée de l'utilisateur (un caractère), le convertit en majuscule.
  event, userinput = os.pullEvent("char")
  userinput = string.upper(userinput)

-- Vérifie si l'entrée est un L, sinon, sort de la boucle.
  if userinput == "L" then
    redstone.setOutput(side, true) -- Désactive le courant de redstone
  else
    term.clear()
    break
  end

end -- Fin de la boucle while

Exécuter ce code affichera quelque chose comme ce qui suit à l'écran :

 Pour allumer la lampe, appuyez sur L.
 Pour quitter, appuyez sur n'importe quelle autre touche.

(En supposant que l'utilisateur appuie sur L, la lampe s'allume et ce qui suit s'affiche...)

Pour éteindre la lampe, appuyez sur L.
Pour quitter, appuyez sur n'importe quelle autre touche.

Appuyer sur n'importe quelle autre touche renverra l'utilisateur vers l'invite de commande CraftOS. Ce programme a l'air compliqué, mais en réalité c'est seulement très désordonné (et il viole quelques conventions, en fait). Cependant, écrire ce code montre à l'utilisateur l'essence de ce qui se passe et le prépare pour le prochain exemple.

Ordinateur-interrupteur V2

Cet exemple utilisera l'installation de l'exemple précédent. Ici, l'utilisateur apprendra à utiliser les fonctions ainsi que d'autres aspects de l'API Redstone pour contrôler la lampe et éviter un code "volumineux". Il est recommandé de commencer un nouveau programme plutôt que d'éditer l'ancien (en raison de la manière dont fonctionne l'éditeur de CraftOS). Par simplicité je vais omettre la plupart des commentaires précédents pour permettre d'apréhender le code plus facilement. Ce programme utilise une nouvelle partie de la Redstone API, redstone.getOutput(direction), qui permet èa l'ordinateur de lire si il émet un courant de redstone ou pas, et admet un seul argument : la direction.

local side = "left"      
local userInput = ""     
local event = ""      
 
redstone.setOutput(side, false)   
 
-- because we are doing something repetitively in the previous program, a function can greatly simplify it
-- however the function is like a new room, it cannot access any variables unless it is given them, in this case the first argument will be named whichSide inside this room.
local function redraw(whichSide)
                         
  --term.setCursorPos(1,1)             
  if redstone.getOutput(whichSide) then -- here the lamps state is checked by reading if the Redstone is on
    print("To turn lamp off, press L.")
  else -- if it is not on then
    print("To turn lamp on, press L.")
  end
  print("To exit, press any other key.")
end
while true do
  -- this will run the code in the function, but the function needs to know what side in order to check if the lamp is on, so the first argument we give it is side, which tells the room that whichSide is side
  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) -- Turn on the redstone output
  elseif userInput == "L" and redstone.getOutput(side) then
    redstone.setOutput(side, false) -- Turn off the redstone output
  end
  if event=="char" and userInput~="L" then
    break
  end
 
end

The set of If statements can be simplified to:

if userInput == "L" then
  -- if false set true, if true set false
  redstone.setOutput(side, not redstone.getOutput(side))
elseif event == "char" then
  -- you already know userInput ~="L"
  break
end

Interrupteur intelligent

Contenu à venir.

Concepts Avancés

Exemples Avancés

Éclairage Intelligent De Toute Une Maison

Que faire quand les choses ne fonctionnent pas

Cela vous arrivera; on passe du temps à écrire méticuleusement du code seulement pour enregistrer et exécuter le programme et se rendre compte que... ça ne marche pas. Il y a généralement quelques choses à vérifier avant de jeter sa souris sur le premier curieux...

  1. Vérifier les messages d'erreur... 99.999% du temps ils vous disent exactement où vous avez fait une erreur (syntaxe incorrecte, oubli de déclaration end, etc).
  2. Vérifier la casse (lettres en majuscules et minuscules). Souvenez vous, les fonctions commencent généralement avec une lettre minuscule mais des 'mots' supplémentaires auront une majuscule (par exemple - redstone.setOutput).
  3. Vérifier les déclarations de contrôle (while, for, if, etc). Assurez vous qu'ils sont correctement déclarés et terminés correctement (quelquefois un end manquant ne sera pas enregistré avant quelques lignes).
  4. En cas de doute, réécrivez le. On est quelquefois surpris de voir comme une erreur est flagrante quand on la réécrit... malgré qu'on l'ait ratée la première fois.
  5. Demandez à la Communauté. Parfois les choses sont plus compliquées qu'il n'y parait, mais il est possible que quelqu'un ait fait la même erreur et ait compris comment s'en sortir, cependant, si ce n'est pas le cas, il est aussi possible qu'un autre regard sur le problème permette de le résoudre, voire de trouver une meilleure manière d'arriver au même résultat! Pensez juste à chercher dans les anciens posts sur les forums avant de lancer une nouvelle discussion.

Voir également

Advertisement