Vai al contenuto
Il server del mese è
Visita la nostra nuova lista server!

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

  • 0
vittorio1964

programma turtle

Domanda

Non so se la sezione giusta dato che di programmazione non ne mangio neanche un po avrei bisgno di un programmino per la turtle che mi faccia un buco 10x10 profondo uno e che poi mandi ii drop ad una enderchest.

Questo programma mi servirebbe per livellare una zona fino a rendela piatta.

 

Grazie

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

17 risposte a questa domanda

Recommended Posts

Sei bravo in computercraft

Non è che sono bravo in computercraft, è che mi piace la programmazione in generale, soprattutto web ed essendo abituato a vedere il codice compatto e ben organizzato, non ho resistito a segnalarti che in realtà si può fare con solo qualche riga di codice. Non si finisce mai di imparare. Fine OT, magari oggi pomeriggio provo in game il codice per renderlo utilizzabile dall'OP.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Scusate se sono con un giorno di ritardo, ma in fondo ieri era domenica, abbiate pazienza :asd:

Allora questo è il codice testato, fa tutto e di più:

rows = 10
maxStacks = math.ceil(rows*rows/64)

function main()
   for x = 1, rows, 1 do
      for y = 1, rows, 1 do
         turtle.digDown()
         turtle.forward()
      end
      if(x ~= rows) then
         if(x % 2 == 0) then
            uLeft()
            uLeft()
         else
            uRight()
            uRight()
         end
      else
         turtle.back()
         turtle.turnRight()
         for i = 1, rows - 1, 1 do
            turtle.forward()
         end
         turtle.turnLeft()
         for j = 1, maxStacks, 1 do
            turtle.select(j)
            turtle.drop()
         end
         turtle.turnRight()
         turtle.turnRight()
      end
   end
end

function uRight()
   turtle.turnRight()
   turtle.forward()
end

function uLeft()
   turtle.turnLeft()
   turtle.forward()
end

main()

Ora vi spiego passo passo:
rows = 10
Il lato del quadrato è impostato a 10 come richiesto, ma basta impostare questa variabile con qualsiasi altro numero e tutto il codice si adatta alle dimensioni dell'area da scavare.

La funzione main() si occupa di tutte le operazioni e consiste in:
- creare un loop per le righe e uno per le colonne dell'area selezionata
- alternare l'inversione a U una volta a destra e una a sinistra con l'operatore modulo
%
in pratica controlla ad ogni colonna se il numero di righe già scavate è pari o dispari: se è pari gira da una parte, se è dispari dall'altra, in modo da seguire un percorso a "serpentina"
- arrivata alla fine, ovvero dopo aver scavato l'ultima colonna, la turtle si riposiziona nel punto di partenza e dato che aveva calcolato in precedenza quanti stacks al massimo avrebbe riempito,
maxStacks = math.ceil(rows*rows/64)
seleziona il giusto numero di slot per versare il contenuto nell'enderchest. Dopo essersi riposizionata è pronta per eseguire di nuovo lo stesso comando.

ATTENZIONE! Bisogna sempre assicurarsi che:
- abbia abbastanza carburante per completare l'operazione;
- abbia l'inventario vuoto;
- dei blocchi non ostacolino il cammino (dato che scava solo ciò che sotto di essa, ma non davanti).

Per capire visivamente come organizzare lo spazio di lavoro, ecco uno screen:

turtle.png

L'area rossa rappresenta lo spazio che verrà rimosso dalla turtle passando sopra i blocchi.
L'area verde è la zona in cui la turtle esegue le manovre di inversione, pertanto anche in tale zona non dovranno esserci ostacoli.
La turtle va posizionata sopra il primo blocco in basso a sinistra della superficie interessata.
L'enderchest o qualsiasi strumento di immagazzinamento blocchi deve essere posizionato alle spalle della turtle, come in immagine.

Spero sia stato di aiuto e se ancora c'è qualcosa di non chiaro, beh forse computercraft non fa al caso vostro. Provate la documentazione ufficiale o seguite la realizzazione di altri piccoli programmi creati da altre persone.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite

Il LUA è un linguaggio di programmazione

Lo so che è un linguaggio di programmazione, se non lo hai capito

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite

Sì, ma quelli che dukio ha linkato sono solo i comandi dell'API della turtle. Lua coniate in altri comandi ancora.

Lo so, quello è solo una piccola percentuale di tutti gli API

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Il LUA è un linguaggio di programmazione


Sì, ma quelli che dukio ha linkato sono solo i comandi dell'API della turtle. Lua consiste in altri comandi ancora.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite

Oddio ma sono tantitanti!!! Quasi come.....qualsiasi linguaggio di programmazione

Il LUA è un linguaggio di programmazione

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite
Oddio ma sono tantitanti!!! Quasi come.....qualsiasi linguaggio di programmazione

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite
Piccolo ot: qualcuno mi mette il link dei comandi di computercraft? Io sono sul cellulare e non li trovo

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite

Che funzioni, non lo metto in dubbio, anche io sono da telefono. Il problema è che è un po' troppo lungo :P

Sei bravo in computercraft

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Che funzioni, non lo metto in dubbio, anche io sono da telefono. Il problema è che è un po' troppo lungo :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite

Ma per ripetere lo stesso comando si fa prima con un loop!
Ora non mi ricordo la sintassi della turtle, ma in pseudo code:

for (x = 0, x < 10, x++)
for (y = 0, y < 10, y++)
turtle.digDown()
turtle.forward()
end
turtle.turnRight()
turtle.turnRight()
end
Sono da telefono e non potevo provare il programma, perciò l'ho scritto più lungo per essere sicuro che funzionasse

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

È un robot che esegue programmi scritto in LUA
Dentro lo spoiler c'è il codice!

Ho usato un sistema di function per accorciare le stringhe!

E per finire devi premere qualunque tasto quando ha finito

[spoiler]
function forward()
turtle.forward()
end

function digDown()
turtle.digDown()
end

function line()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

end

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

print("Finito!")
print("Premi qualunque pulsante!")
os.pullEvent()
sleep(0.1)
term.clear()
term.setCursorPos(1.1)
shell.run("shell")
[/spoiler]


Ma per ripetere lo stesso comando si fa prima con un loop!
Ora non mi ricordo la sintassi della turtle, ma in pseudo code:
for (x = 0, x < 10, x++)
for (y = 0, y < 10, y++)
turtle.digDown()
turtle.forward()
end
turtle.turnRight()
turtle.turnRight()
end

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite
È un robot che esegue programmi scritto in LUA
Dentro lo spoiler c'è il codice!

Ho usato un sistema di function per accorciare le stringhe!

E per finire devi premere qualunque tasto quando ha finito

[spoiler]
function forward()
turtle.forward()
end

function digDown()
turtle.digDown()
end

function line()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

digDown()
forward()

end

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

line()
turtle.turnRight()
forward()
turtle.turnRight()

print("Finito!")
print("Premi qualunque pulsante!")
os.pullEvent()
sleep(0.1)
term.clear()
term.setCursorPos(1.1)
shell.run("shell")
[/spoiler]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Cos'è la turtle?? Scusate l'OT

Un macchinario, aggeggio, entità, coso che si muove della computercraft

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ospite
Cos'è la turtle?? Scusate l'OT

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

×
×
  • Crea Nuovo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.