CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Minecraft
  • Tout support
  • PC
  • Xbox Series
  • Switch
  • Switch 2
  • PS4
  • ONE
  • WiiU
  • PS3
  • 360
  • Vita
  • iOS
  • Android
  • Web
  • New 3DS
Forum
  • Accueil
  • Actus
  • Tests
  • Vidéos
  • Images
  • Soluces
  • Forum
Liste des sujets

[MOD] Comment programmer sous ComputerCraft ?

Redall
Redall
Niveau 5
07 novembre 2015 à 11:21:23

Informations aux administrateurs : Si je n'ai pas mis ce forum au bon endroit, s'il vous plait me faire parvenir un petit message et le déplacer. Merci.

-----------------------------------------------------------------------------------------------------------------------------------------------------

Bonjour et bienvenue dans ce petit forum pour parler bien-sûr (comme vous le constaterez dans le titre :hap:) c'est bien et bel ComputerCraft, un mod qui ajoute plusieurs ordinateurs, lecteurs disquettes... bref le mod des geeks comme moi :-).

Si vous n'avez pas acheté Minecraft, pas de panique, un programme nommé CCEmuRedux (que j'utilise pour ce forum) est en fait un émulateur d'ordinateurs de ce mod. Il est simple et efficace à utiliser. Mais je ne ferais pas un tuto pour installer CCEmuRedux ou le mod, car Google ou Yahoo sont vos amis :-))) .

---------------------------------------------------------------------------------------------------------------------------------------------------

C'est parti ! Donc vous allez poser ou créer un ordinateur (qu'il soit Advanced ou Normal, il n'y a pas d'intéret dans cette partie). Faitez clique-droit la dessus pour l'allumer (pour ceux qui sont sur Minecraft) et vous voyez écrire 'CraftOS <version>'. Cela indique que vous avez bien démarré la machine avec succès (si l'écran reste noir, il y a un problème de d'interférence avec un mod ou un autre petit problème, mais cela concerne ceux qui sont sur Minecraft). Je ne ferais pas de tuto comment le crafter, encore une fois, Google ou Yahoo sont vos amis :-))).

Nous allons d'abord apprendre les bases des commandes dans ce mod. Voici un tableau de toutes les commandes les plus utiles dans ce mod:

(argument) : Argument non obligatoire
[argument] : Argument obligatoire
DIR (adresse) : Permet de lister tous les fichiers du répertoire en cours ou de celui de l'adresse indiqué.
DELETE [adresse] : Permet de supprimer un fichier ou un répertoire.
CD [adresse] : Permet d'aller dans un dossier :
adresse peut accepter '..' comme argument pour aller dans un dossier parent.
HELP (argument) : Permet d'obtenir l'aide
PASTEBIN [arguments] : Permet d'obtenir un fichier depuis "www.pastebin.com".
EDIT [adresse] : Permet de créer, de lire ou écrire un fichier LUA.
PAINT [adresse] : Permet de créer, de lire ou écrire un fichier image (non .png ou .jpeg).

Je crois que je l'ai ait tous cités. Ditez-le moi si j'en ait oublié :-).

---------------------------------------------------------------------------------------------------------------------------------------------------

L'heure est enfin arrivé de programmer :-d. Nous allons d'abord faire un petit 'Hello world!' avec deux fonctions de base LUA. Tapez 'edit startup' dans le computer. Analysez d'abord le code petit à petit, c'est comme cela que j'ai appris LUA + APIS ComputerCraft :-))).

Le voici :
print("Hello world !") --Va écrire 'Hello world !' avec retour à la ligne.
write("Hello world !") --Va écrire la même chose mais sans faire le retour à la ligne.
write("\n") -- '\n' sert de retour à la ligne.
Comme vous pourrez le constater, print sert de retour à la ligne, mais write fait le même travail mais sans le retour à la ligne. Les commentaires peuvent êtres écrites de différentes manières, la première manière, comme indiqué, est noté -- Votre commentaire et la deuxième manière est noté :
--[ A partir de ici, tout ce texte n'est pas exécuté
Première ligne de commentaire
Deuxième ligne de commentaire
A partir du crochet ']', le texte qui suit sera exécuté ]--
Redémarrez votre ordinateur en tappant 'reboot' dans l'invite de commandes. Vous verrez vos messages ! Pourquoi ? : Car startup sert de fichier de démarrage, soit, le autoexec.bat qu'il y avait sous MS-DOS.
La syntaxe des commentaires sont les mêmes en Java, C#...

Nous allons maintenant nous intéresser aux variables, utilisé pour définir une donné ou plusieurs à une valeur ou plusieurs.

Voici le code :
Texte = "Je m'appelle Michel et ceci est faux" Valeur = 2 print("Valeur de 'Texte': ".. Texte) print("Valeur de 'Valeur': ".. Valeur)
Eh oui, il n'y a pas besoin de préciser le type de variable, un gros point fort de LUA :cool:. Il suffit juste de mettre le nom de la variable + la valeur, quel soit de type string, int, double, tout sera automatisé :-d. Vous aurez remarqué que pour insérer une variable, il suffit :
Si il y a un texte à écrire avant : print("Test de Valeur: ".. ''valeur'') ou si vous souhaitez juste mettre la valeur : print(''valeur''). C'est juste grâce aux deux points que on peut insérer une variable ou l'écrire tout simplement.

Maintenant, nous allons parler de la variable locale. Pourquoi "locale" ? : Parce-que c'est une variable spéciale qui permet de pouvoir, par exemple charger une image avec l'api paintutils (nous reviendrons à cet api plus tard). Voici l'exemple :
local monImage = paintutils.loadImage(''adresse'') paintutils.drawImage(monImage, ''positionX'', ''positionY'')
En détail, c'est très utile pour plein de choses que vous verrez après (suspens... :rire:).

Nous allons parler des conditions (du if quoi...). Le code :
maBelleVariable = "Je suis feerique !!!" --Quoi!? Mais c'est un exemple x) if maBelleVariable == "Je suis feerique" then print("Vous etes bien féerique !") error() end
Oui je sais, c'est loufoque :rire2:. Mais c'est un bon exemple pour ma part :-))). C'est très très ressemblant au Java et au C#. Ce qui se passe, c'est en fait que il va détecter si maBelleVariable est à Je suis féerique. Donc cela va exécuter le code et afficher 'Vous etes bien feerique !'. Je vous ne l'ai dis, mais pour l'instant, ce mod n'accepte pas les accents (donc la raison dans laquelle je n'ai mis d'accents !). Vous aurez remarqué error(), j'utilise ce code pour quitter un programme plus simplement plutôt que d'écrire return car ça ne fonctionne pas bien chez moi. N'oubliez j'amais end en fin de condition car sinon ça va tout exécuter d'un coup ou rien.

Nous allons maintenant apprendre le and et le else dans une condition. Le voici :
MaVar = 1 MaCop = 2 MonTableau = {10, 20 30} --Voici une variable à tableau (je veux dire que cette variable peut contenir plusierus nombres en une seule fois. if MaVar == 1 '''and''' MaCop == 2 '''and''' MonTableau[1] == 10 then print("Toutes les conditions sont correctes !") '''else''' print("Vous n'avez respecté les conditions.") end
J'ai mis en gras les and et les else car il faut que votre_valeur doit contenir égal (mais il y a d'autres types de condition que vous verrez juste après ce paragraphe). Vous avez remarqué la variable MonTableau avec les {10, 20, 30}. C'est en fait une variable tableau (dont le nom de la variable :hap:) qui est une variable qui peut contenir plusieurs valeurs en une seule donné. Par exemple, j'ai mis MonTableau[''nombre'']. nombre est mis à 10 dans notre code, il indique que l'ordinateur doit chercher la première valeur (c'est comme un tableur avec ses lignes à gauche, sauf qu'il n'y a pas de colonnes). Par contre, si j'avais mis nombre à 20 dans notre code, il indiquerait que cela serait faux car MonTableau[2] n'est pas égal à 10.

Problème : Vous remarquez que vous souhaitez poser une question à l'utilisateur, comment on fait ? : Ben c'est tout simple mais logique, read() est votre ami. Bien-sûr, vous n'allez pas laisser seul cette pauvre fonction ! Ajoutez à une variable comme cela : ''maQuestion'' = read(). Après, pour être moins taudis, vous pouvez faire quand vous faites une condition, au lieu de if maQuestion == "''votreValeur''" then ... end, écrivez if read() == "''votreValeur''" then ... end. Plus simple, hein ? :ok:.

Bref, voici comment poser correctement une question :
write("Comment appelez vous ? ") monNom = read() print("Bonjour, ".. monNom.. " !")
Vous voyez, write est très utile pour écrire sans faire retour à la ligne, car si on mettait print("Comment appelez vous ? "), la sortie serait écrit comme ceci :
Comment appelez vous ? Alexis Bonjour Alexis !

alors que avec write(), c'est plus joli ! :
Comment appelez vous ? Alexis Bonjour Alexis !
Vous êtes donc du même avis que moi, n’es-pas :hap: ?
Autre problème : Vous souhaitez écrire un mot de passe, mais vous le voyez, comment faire ? : read() sera votre ami mais avec une petite option : read("*"). Le code :
write("Mot de passe s'il vous plait (case respective) : ") MdP = read("*") if MdP == "''votreValeur''" then print("Acces autorise, vous pouvez entrer !") error() else print("Vous n'avez pas ecrit le bon mot de passe, ressayez.") '''sleep(1)''' --Attend une seconde '''os.shutdown()''' --Arrête le système. end

La sortie :
Mot de passe s'il vous plait (case respective) : *********** (le mot de passe est votreValeur)
Acces autorise, vous pouvez entrer !

Sinon, si le mot de passe n'est pas le bon :
Mot de passe s'il vous plait (case respective) : **** (le mot de passe est test)
Vous n'avez pas ecrit le bon mot de passe, ressayez.

Vous avez remarqué sleep(1) et os.shutdown(). sleep(''secondes'') permet d'attendre les secondes indiqués et os.shutdown() sert d'arrêter le système. Travaillons on un peu sur l'api os.

Voici toutes les fonctions les plus utilisés dans cet api :
os.version() --Obtient la version du système os.getComputerID() --Obtient le nom de l'ID du computer os.getComputerLabel() --Obtient le nom du computer os.setCommuterLabel(''nom'') --Définit le nom du computer os.loadAPI(''adresse'') --Charge une API externe os.unloadAPI(''adresse'') --Décharge une API externe os.clock() --Obtient l'heure (non-format 12h ni 24h, il faudra le convertir.) os.sleep(''secondes'') --Dérivé de sleep() os.shutdown() --Éteint l'ordinateur os.reboot() --Redémarre l'ordinateur
C'est assez simple, mais on ne va tarder dessus car il y a beaucoup de choses d'autres à apprendre !

A partir de ce stade, vous devrez avoir un Advanced Computer.
Rendons visite à local ... = ... car il va maintenant être intéressant. Nous allons réutiliser l'exemple de tout à l'heure avec l'api paintutils. Revenons sur l'exemple modifié :
local monImage = paintutils.loadImage("image") paintutils.drawImage(monImage, 1, 1)
Créez ce fichier nommé 'startup' et copiez le code. Écrivez dans l'invite de commande 'paint image'. Vous allez voir une belle interface avec des couleurs et une feuille noire. Dessinez ce que vous voulez et sauvegardez-le. Redémarrez votre computer et... Magie Magie :noel: ! Vous voyez votre image dessiné précédemment ! Voyons le code de plus près :
paintutils.loadImage(''adresse'') est utilisé pour charger une image dessiné précédemment. Mais il faut que elle soit stocké dans une variable locale, donc ça donne local ''votreVariableLocal'' = paintutils.loadImage(''adresse''). Puis on voit : paintutils.''draw''Image(monImage, 1, 1). Le code est utilisé pour dessiner l'image stocké dans la variable, puis il le dessine à 1, 1. Mais c'est quoi 1, 1 :pf: ?? C'est en fait x, y !

---------------------------------------------------------------------------------------------------------------------------------------------------

Maintenant que nous avons les bases, nous pouvons commencer à programmer en interface graphique :ange: ! Assurez-vous que vous avez bien un Advanced Computer. Nous allons apprendre en même temps le code pour les interfaces graphiques. C'est parti !

Voici le tableau des couleurs pour les variables et les codes (merci au wiki de ComputerCraft) :

  • colors.white
  • colors.orange
  • colors.magenta
  • colors.lightBlue
  • colors.yellow
  • colors.lime
  • colors.pink
  • colors.gray
  • colors.lightGray
  • colors.cyan
  • colors.purple
  • colors.blue
  • colors.brown
  • colors.green
  • colors.red
  • colors.black

Nous allons d'abord créer des variables pour l'apparence. Voici le petit bout de code :
bApp = colors.lightGray fApp = colors.gray tColor = colors.white bApp est utilisé pour la couleur de l'arrière-plan, fApp pour l'avant-plan et tColor pour le texte. Maintenant, nous passons au design de l'application.

C'est assez facile, il faut juste un peu de connaissance en paintutils et en term + en fonctions. Voilà votre petit code (avec une fonction que vous découvrez) :

function majbGui(titre)
local xT, yT = term.getSize()
term.setBackgroundColor(bApp)
term.clear()
term.setTextColor(tColor)
paintutils.drawFilledBox(1, 4, xT, yT, fApp)
term.setBackgroundColor(bApp)
term.setCursorPos(2, 2)
write(titre)
term.setBackgroundColor(fApp)
end
Je suis désolé, car la balise ne marche pas :non2:, désolé ! Bref, nous découvrons comment créer une fonction nommé 'majbGui(''titre'')'. Il suffit que de <code>function votreFonction(''arguments, autrearguments...'') --VotreCodeIci end. Et c'est tout ! Encore une fois, on rend visite à local qui va être servi pour identifier la taille maximale de votre moniteur. term.getSize() doit contenir deux variables de n'importe quel nom. Nous voyons que pour changer le background du terminal, il faut faire term.setBackgroundColor(''couleur''). Et pour le tColor (le texte), c'est la même chose sauf que on dit term.set'''TextColor'''(''couleur''). On va écrire maintenant dans notre fonction majbGui(titre) ce bout de code :
term.setCursorPos(1, 3)

Redall
Redall
Niveau 5
07 novembre 2015 à 11:21:39

Voilà comment dessiner une boite avec l'api paintutils. Écrivez maintenant en dessous de cette fonction, écrivez majbGui("Mon accueil"). Voici le joli résultat : https://image.noelshack.com/fichiers/2015/45/1446889697-capture.png

N'es-pas magnifique pour un début :oui: ? Après, vous pouvez remplacer ''Mon accueil' par ce que vous voulez. Passons aux boutons :coeur:.

Encore une fois, nous allons visiter local pour cette fois-ci détecter la position. Nous allons faire un test d'abord avant de créer les boutons. Écrivez :
while true do local event, type, xM, yM = os.pullEvent("mouse_click") end
C'est quoi while ... do :( ? while ... do sert à faire des boucles, pour les casser, il suffit que de break. On utilise la boucle car si on ne mettait pas, on clique une fois et le programme s'arrête automatiquement. os.pullEvent(''type_event'') est utilisé pour détecter une touche, un clic de souris ou encore le changement de taille (pour les monitors). Pour notre code, il détecte mouse_click pour bien sûr détecter les clics de souris. Très intéressent, n’es pas :hap: ? Ajoutez à la boucle while true do ceci :
paintutils.drawPixel(xM, yM, colors.white). Nous découvrons que l'on peut dessiner qu'un petit pixel simplement avec les arguments suivant au code : paintutils.drawPixel(''x'', ''y'', ''couleur'') et démarrez le programme. Cliquez n'importe ou, et tada ! Un pixel blanc se dessine pile au pixel ou vous avez cliqué. Maintenez CTRL-T pour quitter le programme. Nous allons cette fois ci-passer réellement aux boutons. Éditions la boucle comme suit :
while true do local event, type, xM, yM = os.pullEvent("mouse_click") if xM == 1 and yM == 1 then majbGui("Vous avez clique !") sleep(1) majbGui("Mon accueil") end end
Cliquez sur le coin en haut à gauche (ou en 1, 1) et regardez ce qui se passe :
https://image.noelshack.com/fichiers/2015/45/1446890919-capture.png
Il vous dit que on a cliqué, ça indique que il y a un bon commencement :) ! A partir de cela, regardez quelques vidéos pour Comment créer un gui sous computercraft et vous serez prêt pour créer vos logiciels (ou systèmes d'exploitaiton). Merci d'avoir lu ce tutoriel qui ma pris 2 ou 3 jours a écrire (ou 199 lignes/16936 caractères), n'hésitez pas à voter en haut de ce forum si vous souhaitez avoir un tutoriel sur Comment créer un système d'exploitation ou Comment faire un logiciel que se met à jour automatiquement. Au revoir les amis et a bientôt :) !

Redall
Redall
Niveau 5
07 novembre 2015 à 11:51:38

Maintenant, petit exercice : Essayez de créer une petite calculette (quel soit graphique avec boutons ou non, pas d'importances) et envoyez le moi. Bonne chance :p)

Redall
Redall
Niveau 5
08 novembre 2015 à 19:29:15

Merci de tous vos votes, à 5 votes, je fais le tutoriel (excepté si je vois que il y a 50% / 50%, donc j'attends à 10 votes). Merci encore et bonne programmation :-d

Redall
Redall
Niveau 5
10 novembre 2015 à 17:35:57

Vous avez fini ? Alors votez ! :p)

Bibio2231
Bibio2231
Niveau 1
30 mars 2023 à 13:51:44

Tuto super instructif et super compréhensible malgré les défauts de mise en page. Je me suis cré un compte juste pour pouvoir te mettre un bon commentaire :). Continue comme ça en tout cas ça m'a super bien aidé :gni:

Lovenio
Lovenio
Niveau 7
03 avril 2023 à 14:56:51

Ce déterrage de l'infini :o

Sous forums
  • Recherche de joueurs et serveurs PC/Consoles
La vidéo du moment