albianchi1 / albert

esame
0 stars 0 forks source link

Classe Snake #7

Open supix opened 1 month ago

supix commented 1 month ago

https://github.com/albianchi1/albert/blob/f2545dd58cdad3672e2c77816ceda142a0edac84/src/main.py#L51

Questa classe va completata. Nel costruttore è utile passare la posizione iniziale. Non è invece utile passare la lista delle mosse. Meglio è dotare lo snake di un metodo (per es.: go()) al quale si passa una singola mossa. Sarà il serpente a interpretare correttamente quella mossa:

albianchi1 commented 1 month ago

Buongiorno, stavo creando il metodo go() l'intento è quello appunto di passare come paramatro la mossa che va a svolgere il serpente. Come faccio a far muovere il serpente?

supix commented 1 month ago

Il metodo go() riceve in ingresso una mossa, quindi una stringa tra N, S, E, W, NE, NW, ecc.

Per ognuno di questi ingressi deve calcolare la nuova posizione della testa. Per es. se riceve N decrementa di 1 la riga e lascia inalterata la colonna. Se riceve SW, incrementa sia la riga che la colonna, ecc. ecc.

Nel muovere la testa, bisogna avere cura di aggiornare anche la coda e la scia.

Un saluto.

On Fri, 31 May 2024, 10:46 albianchi1, @.***> wrote:

Buongiorno, stavo creando il metodo go() l'intento è quello appunto di passare come paramatro la mossa che va a svolgere il serpente. Come faccio a far muovere il serpente?

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2141519910, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX3YFSU4DYF4WL35SDDDZFA2GTAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBRGUYTSOJRGA . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 month ago

Salve professore, per aggiornanre scia, testa e coda del seprente mi conviene creare 3 sottoclassi all'interno della classe snake? Grazie, Alberto.

supix commented 1 month ago

Alberto,

la testa, la coda e la scia le implementerei con 3 attributi della classe Snake. La testa è una coppia di coordinate. La coda e la scia sono liste che contengono coppie di coordinate. In questo modo è abbastanza semplice aggiornare anche le liste, poiché nel caso della coda un avanzamento del serpente produce l'inserimento di una nuova cella nella prima posizione della lista e l'eliminazione di una cella dall'ultima posizione della lista. Nel caso della scia c'è solo l'inserimento nella prima posizione della lista e le ultime posizioni non vanno mai toccate (poiché la scia è permanente).

Ovviamente prima e ultima posizione sono solo punti di vista, che puoi giocarti come ti viene più facile.

Un saluto.

On Mon, 3 Jun 2024, 11:54 albianchi1, @.***> wrote:

Salve professore, per aggiornanre scia, testa e coda del seprente mi conviene creare 3 sottoclassi all'interno della classe snake? Grazie, Alberto.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2144773901, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX375H2U5Z6ZVC5TJW2DZFQ4N5AVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBUG43TGOJQGE . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 month ago

La parte che ho scritto sul metodo go() le piace? Grazie, Alberto Bianchi.

supix commented 1 month ago

Ciao Alberto.

L'impostazione è corretta.

Al metodo go() è meglio passare una singola mossa, non una lista di mosse.

Dalla riga 76 il codice non mi sembra molto utile.

Mancano nella classe Snake gli attributi coda e scia.

Al costruttore passi la variabile di ingresso snake, ma non la usi. Forse è meglio toglierla.

Sempre nel costruttore, la variabile di ingresso start potrebbe essere assegnata a un attributo della classe Snake chiamato testa.

Aspetto di vedere cosa scriverai al posto dei commenti.

Un saluto.

On Tue, 4 Jun 2024, 07:37 albianchi1, @.***> wrote:

La parte che ho scritto sul metodo go() le piace? Grazie, Alberto Bianchi.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2146651417, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX37AETPEOJI6CAZ4ZQ3ZFVG7ZAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBWGY2TCNBRG4 . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 month ago

Salve ho effettuato un commit. Mi suggerisce un modo per far muovere testa coda e scia del seprente? Ho utilizzato il parametro lunsnake per aggiornare la lunghezza del serpente. Grazie, Alberto (nel frattempo vedo se trovo un modo)

albianchi1 commented 1 month ago

Se preferisce possiamo effettuare una call online. Grazie, Alberto.

albianchi1 commented 4 weeks ago

ho effettuato un altro commit. Ho pensato a questa possibile soluzione per decidere la posizione successiva del serpente. Mi dica se va bene. Grazie, Alberto

supix commented 3 weeks ago

Ciao Alberto.

Di seguito alcuni commenti alle righe di codice da 65 a 79.

    while mossa in moves:
        if mossa is "N" :
            testa=[-1][+0]      *// Se testa è una lista di dimensione

2 [riga, colonna] dovresti scrivere testa[0]=testa[0]-1 per decrementare di 1 la riga. if testa == blocks: // La variabile blocks è una lista di liste e la stai confrontando con una lista di lunghezza 2. Questo confronto non potrà mai dare risultato True. return field // Inoltre la variabile blocks non è visibile in questo blocco di codice, poiché è definita nella funzione che *

Fammi sapere che ne pensi.

On Wed, Jun 5, 2024 at 11:17 AM albianchi1 @.***> wrote:

ho effettuato un altro commit. Ho pensato a questa possibile soluzione per decidere la posizione successiva del serpente. Mi dica se va bene. Grazie, Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2149300496, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX34SASZ35NJ3Z5VH5C3ZF3JUHAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBZGMYDANBZGY . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 3 weeks ago

Penso che sia più complicato di come l'ho pensata

albianchi1 commented 3 weeks ago

Mancano sicuramente dei pezzi. provo a vederli nel dettaglio rispetto a quello che mi ha scritto

albianchi1 commented 3 weeks ago

Ho cambiato la mossa del serpente nel caso in cui si muove a nord,sud,w,e. Nel caso in cui ci sta sia la decrementazione per riga/colonna ho provato a fare nel modo in cui ho scritto il codice. Mi dica se è correto. Grazie, Alberto

supix commented 3 weeks ago

Ciao Alberto.

Nella riga di codice (riga 67)

testa[0]=[0]-1

il lato destro dell'assegnazione

[0]-1

ha il seguente significato: sottrai l'intero 1 alla lista che contiene un solo elemento intero pari a 0. Tale operazione non è valida, poiché in generale non si può sottrarre un intero a una lista.

Se intendi che testa è una lista di due elementi [riga, colonna] (quindi per es. [4, 28]) e vuoi sottrarre un'unità alla riga (facendola così diventare [3, 28]) dovresti scrivere la seguente istruzione.

testa[0] = testa[0] - 1

Analogamente, nell'istruzione (riga 128)

testa[0,1]=[0,1]+[-1,-1]

è un errore scrivere

testa[0,1]

poiché un vettore non può essere indicizzato attraverso 2 indici, cioè tra le parentesi quadre deve esserci uno e un solo numero che è l'indice dell'unico elemento che vuoi leggere o scrivere. Se vuoi leggere o scrivere due elementi, forse è meglio scrivere due istruzioni. *N.B.: *in verità ci sarebbe la possibilità di usare slice invece che singoli indici per essere più sintetici, ma tralasciamo per il momento questa pratica per qualcosa di più semplice e leggibile.

Scrivere il codice senza mai eseguirlo non è una buona idea, poiché non hai un riscontro immediato sulla validità sintattica di quanto stai scrivendo. Né sai se, pur essendo codice valido, fa quello che effettivamente ti aspetti che faccia.

Un saluto.

On Mon, Jun 10, 2024 at 10:29 AM albianchi1 @.***> wrote:

Ho cambiato la mossa del serpente nel caso in cui si muove a nord,sud,w,e. Nel caso in cui ci sta sia la decrementazione per riga/colonna ho provato a fare nel modo in cui ho scritto il codice. Mi dica se è correto. Grazie, Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2157700002, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX323IQAZNBU3OEZJ573ZGVPYHAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNJXG4YDAMBQGI . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 3 weeks ago

Salve professore, sto andando avavnti. Le chiedo un informazione. Ho provato a operare sui blocchi. Per effettuare un test ho creato un nuovo file. Il codice era il seguente: blocks=[[1,2],[3,4],[4,5]]

while list in blocks: print(list) come mai non mi stampa gli elementi della lista blocks? Vorrei che mi stampasse a video le liste interne alla lista blocks. Questo perchè posso mettere a confronto le mosse del serpente quando la testa si sposta in una casella, quindi se si scontra con un ostacolo Grazie, Alberto

supix commented 3 weeks ago

Ciao Alberto.

Il codice che hai scritto non stampa nulla perché al posto del while bisognava usare for. Quindi il codice diventa il seguente.

blocks=[[1,2],[3,4],[4,5]]

for list in blocks: print(list)

Quando devi fare prove su frammenti di codice, ti consiglio di usare uno dei tanti python playgrounds che trovi in rete. Per esempio al seguente link:

https://www.online-python.com/i23dmOZr8g

trovi un esempio del tuo codice che puoi eseguire per verificarne l'output. Puoi naturalmente modificarlo e sperimentare liberamente.

Il tuo codice non funzionante, per quanto valido sintatticamente, ha tutto un altro significato.

Lo puoi verificare andando a questo secondo link.

https://www.online-python.com/aYukmcLPhV

Come puoi vedere il primo comando print(list) stampa il fatto che list è una classe, perché list è una parola riservata in python e indica appunto la classe lista. Il secondo comando print(list in blocks) stampa False. Questo perché stai verificando se list è contenuto in blocks. Ma questo confronto ovviamente fallisce. Di conseguenza il while successivo non viene mai eseguito e, quindi, non vedi nulla stampato a video.

Per capire meglio come funziona l'operatore in, guarda anche questo terzo link.

https://www.online-python.com/T9LWQGm2Ho

Un saluto.

On Tue, Jun 11, 2024 at 10:49 AM albianchi1 @.***> wrote:

Salve professore, sto andando avavnti. Le chiedo un informazione. Ho provato a operare sui blocchi. Per effettuare un test ho creato un nuovo file. Il codice era il seguente: blocks=[[1,2],[3,4],[4,5]]

while list in blocks: print(list) come mai non mi stampa gli elementi della lista blocks? Vorrei che mi stampasse a video le liste interne alla lista blocks. Questo perchè posso mettere a confronto le mosse del serpente quando la testa si sposta in una casella, quindi se si scontra con un ostacolo Grazie, Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2160151234, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX347WKMH2IMYYIMR5FLZG22ZJAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRQGE2TCMRTGQ . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 3 weeks ago

ho effettuato un primo commit. Riguardo al confronto della mossa del serpente se incontra un ostacolo o il cibo Grazie

albianchi1 commented 3 weeks ago

Salve professore, affronterei il problema in questo modo. Sicoome ho o un file json o un formato png; Io creerei due classi snake uno che accetta in ingresso il file json e un'altro che accetta in ingresso un formato png. Che ne pensa? Se vuole possiamo effettuare una videochiamata per chiarimenti. La ringrazio, Alberto.

supix commented 2 weeks ago

Ciao Alberto.

Il file json e il file png contengono due diverse rappresentazioni della stessa informazione: il campo da gioco, le mosse e la situazione iniziale. La cosa più corretta è leggere questa informazione con il metodo adatto (cioè quello che sa leggere il json oppure quello che sa leggere il png) e trasforma quanto letto in un'istanza della classe CampoDaGioco, che a quel punto è indipendente dalla rappresentazione utilizzata.

La classe Snake è giusto che sia unica e che non dipenda dalla rappresentazione del campo.

Se vuoi, possiamo sentirci sabato pomeriggio dopo pranzo o domenica mattina. Fammi sapere se va bene ti mando link e orario preciso.

Un saluto.

On Thu, 13 Jun 2024, 15:33 albianchi1, @.***> wrote:

Salve professore, affronterei il problema in questo modo. Sicoome ho o un file json o un formato png; Io creerei due classi snake uno che accetta in ingresso il file json e un'altro che accetta in ingresso un formato png. Che ne pensa? Se vuole possiamo effettuare una videochiamata per chiarimenti. La ringrazio, Alberto.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2165691026, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX34X6SCLTHPIOQOZLN3ZHGNSNAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRVGY4TCMBSGY . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 2 weeks ago

Salve oggi pomeriggio va benissimo, Grazie.

supix commented 2 weeks ago

14.30?

meet.google.com/ovz-cmvz-fgw

On Sat, 15 Jun 2024, 11:24 albianchi1, @.***> wrote:

Salve oggi pomeriggio va benissimo, Grazie.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2169240438, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX3YJ2YURDCQLMLTEKT3ZHQB4BAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRZGI2DANBTHA . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 2 weeks ago

si perfetto

albianchi1 commented 2 weeks ago

Salve professore, ho cambiato la parte della classe snake. In particolar modo devo aggiornare testa coda e scia del serpente nel caso in cui venga mangiato il cibo. Ho cambiato anche l'inizializzazione della coda. Grazie, Alberto

albianchi1 commented 2 weeks ago

Salve professore ho implementato coda e scia della classe snake snake a righe: 73 e 76 mi dica se è corretto. Grazie Alberto

supix commented 2 weeks ago

Ciao Alberto.

Nel, costruttore

def init(self,start,field): self.testa=start self.field=field self.coda=testa self.scia=start

sono d'accordo con le prime due istruzioni. Mentre cambierei le ultime due come segue:

self.coda=[] self.scia=[]

Questo perché quando il serpente viene creato non ha coda né scia.

Qualche commento sulle istruzioni sulle mosse.

1) L'ultimo else viene eseguito se la mossa non è tra quelle consentite, quindi in quel caso bisogna al più dare un errore. 2) Forse è meglio anticipare la verifica dell'esistenza di un ostacolo nel campo rispetto all'aggiornamento della posizione della testa (e poi di coda e scia). In questo modo se il serpente vuole andare ad occupare una casella già occupata da un ostacolo, non ci riesce. 3) come già ci dicevamo in call, non abbiamo ancora gestito l'eventualità che il serpente "esca" dal campo, rientrando dall'altro lato. Va gestito.

Un saluto.

On Tue, Jun 18, 2024 at 10:03 AM albianchi1 @.***> wrote:

Salve professore ho implementato coda e scia della classe snake snake a righe: 73 e 76 mi dica se è corretto. Grazie Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2175460194, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX36NOL4YKISNFG6L5QLZH7SURAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNZVGQ3DAMJZGQ . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 2 weeks ago

Allora per le istruzioni self.coda e self.scia ho pensato di fare un inizializzazione perche se le inizializzo dico che la scia inizia dal punto start e la coda è anche la testa del serpente visto che il serpenete è occupato da una sola casella. 1) adesso cambio l'ultimo else. 2)sono corrette le implementazioni di coda e scia? 3)si lo configuro in seguito Grazie, Alberto

supix commented 1 week ago

Alberto,

nell'esatto momento in cui il serpente nasce, quando ancora non ha effettuato alcuna mossa, è formato da una sola casella occupata dalla testa. Non ha alcuna casella appartenente alla coda (la coda non può coincidere con la testa) né alla scia (non ha ancora effettuato alcun movimento).

Nel momento in cui il serpente inizierà a muoversi, la sua testa si sposterà in base alla direzione della mossa corrente, alla coda verrà aggiunta una casella (quella appena lasciata dalla testa) se e solo se la testa finisce su una casella occupata da cibo, la scia aumenterà sempre e comunque di una casella (perché traccia tutto il percorso effettuato dal serpente).

Fammi sapere se ti torna.

Un saluto.

On Thu, Jun 20, 2024 at 10:31 AM albianchi1 @.***> wrote:

Allora per le istruzioni self.coda e self.scia ho pensato di fare un inizializzazione perche se le inizializzo dico che la scia inizia dal punto start e la coda è anche la testa del serpente visto che il serpenete è occupato da una sola casella.

  1. adesso cambio l'ultimo else. 2)sono corrette le implementazioni di coda e scia? 3)si lo configuro in seguito Grazie, Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2180118123, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX3ZEVLYPWA5FRADK6ILZIKHMVAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBQGEYTQMJSGM . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 week ago

ho effettuato un commit per cui ho aggiornato la casistica in cui il serpente finisce le mossse cioè quando non c'è una direzione da seguire ma semplicemente quando l'indicazione è nell'else. Per quanto riguarda la scia e la coda del serpente il codice è corretto? Più avanti imposterò anche quella che è la possibilità che il serpente proceda in direzione del campo quando finisce. La ringrazio, Alberto

supix commented 1 week ago

Ciao Alberto.

Non vedo modifiche al file main.py dall'ultima volta che mi avevi scritto: l'ultima modifica risale a 4 giorni fa. Sicuro di aver fatto commit e poi push?

Inoltre, tieni presente che quando finiscono le mosse, non vai nel ramo else, ma piuttosto il metodo go() non viene proprio chiamato. Questo per dire che il metodo go() non deve gestire l'eventualità che non vi siano più mosse, ma solo la possibilità che in ingresso venga passata una mossa non valida (ramo else finale).

Un saluto.

On Sun, Jun 23, 2024 at 3:36 PM albianchi1 @.***> wrote:

ho effettuato un commit per cui ho aggiornato la casistica in cui il serpente finisce le mossse cioè quando non c'è una direzione da seguire ma semplicemente quando l'indicazione è nell'else. Per quanto riguarda la scia e la coda del serpente il codice è corretto? Più avanti imposterò anche quella che è la possibilità che il serpente proceda in direzione del campo quando finisce. La ringrazio, Alberto

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2184992500, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX32P5EZU7MVIKNEJNC3ZI3FMNAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBUHE4TENJQGA . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 week ago

Si prof l'ultimo commit risale al 21. Le ho chiesto se a riga 73 e riga 76 scia e coda cosi implementate vanno bene Grazie, Alberto

albianchi1 commented 1 week ago

Salve professore, sto rivedendo il codice l'inizializzazione mi serviva per fare poi un aggiornamento del codice nel caso in cui il serpente si muova in una delle possibili direzioni. Per questo le ho chiesto se mi può vedere se il commit effettuato il 21 per quanto riguarda la scia e la coda (riga 73 e 76) sono corretti. Altrimenti opero diversamente. La ringrazio Alberto.

supix commented 5 days ago

Ciao Alberto.

Se ho capito bene, scia e coda sono liste di tuple. Per esempio la scia è:

coda = [(1, 1), (1, 2), (1, 3)]

Questo significa che la coda è formata da tre blocchi ognuno dei quali ha le coordinate di riga e colonna pari al valore della corrispondente tupla.

Siccome scia e coda sono due liste, dire quanto è scritto nella riga 73

scia = [coda]

significa dire che dopo l'assegnazione, scia è una lista che contiene un'altra lista annidata, pari alla coda. Cioè, nell'esempio precedente scia sarebbe:

coda = [[(1, 1), (1, 2), (1, 3)]]

Attenzione alle doppie parentesi evidenziate in giallo, che indicano una lista contenente una lista. Questa cosa non mi sembra ciò che vogliamo ottenere.

Ragioniamo diversamente. Quando il serpente si muove su una casella libera, cioè senza cibo né blocchi, ogni mossa:

Supponiamo che nelle lista scia e coda, ogni nuovo movimento del serpente aggiunga una casella alla fine della lista coda e porti la prima casella della coda alla fine della lista scia. Il codice è il seguente.

coda = [(1,1), (1,2), (1,3)] scia = [] # assumiamo la scia inizialmente vuota per semplicità

print("coda: ", coda) print("scia: ", scia)

assumiamo che la prossima casella che va nella coda è (1, 4)

coda.append((1, 4)) # aggiunge la nuova casella alla coda scia.append(coda[0]) # copia la prima casella della coda (cioè la fine della coda) nella scia coda = coda[1:] # elimina la prima casella dalla coda, perché ormai è andata nella scia

print("coda: ", coda) print("scia: ", scia)

assumiamo che la prossima casella che va nella coda è (2, 4)

coda.append((2, 4)) # aggiunge la nuova casella alla coda scia.append(coda[0]) # copia la prima casella della coda nella scia coda = coda[1:] # elimina la prima casella dalla coda, perché è andata nella scia

print("coda: ", coda) print("scia: ", scia)

Puoi eseguire l'esempio qui premendo il tasto RUN sotto il codice sorgente: https://www.online-python.com/OGkrzdLPx4

Un saluto.

On Wed, Jun 26, 2024 at 5:59 PM albianchi1 @.***> wrote:

Salve professore, sto rivedendo il codice l'inizializzazione mi serviva per fare poi un aggiornamento del codice nel caso in cui il serpente si muova in una delle possibili direzioni. Per questo le ho chiesto se mi può vedere se il commit effettuato il 21 per quanto riguarda la scia e la coda (riga 73 e 76) sono corretti. Altrimenti opero diversamente. La ringrazio Alberto.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2192061968, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX32Q7Y3QM4S7SZVNQ4DZJLQOFAVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOJSGA3DCOJWHA . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 3 days ago

Ho aggiornato il codice

albianchi1 commented 3 days ago

Salve professore, ho aggiunto del codice al progetto snake. Ho seguito le sue indicazioni. Ovvero che la scia non può coincidere con la coda e che quest'ultima viene aggiornata solo nel caso in cui il serpente incontri del cibo. A questo punto mi servirebbe sapere come aggiornare la scia del serpente nel caso in cui la testa del serpente non incontri del cibo.

supix commented 1 day ago

Ciao Alberto.

Il codice scritto va bene. Ho provato a fare qualche modifica per mettere in evidenza la differenza tra il caso che venga mangiato cibo o meno. Ecco cosa ne è uscito.

    def go(self, move):
        if move is "N" :
            # calcolo la nuova posizione in cui dovrebbe andare la testa
            nuovaTesta = (self.testa[0]-1, self.testa[1])

            # verifico se in questa nuova posizione c'è un blocco:
            # se c'è restituisco False
            if self.field.block_in(nuovaTesta):
                return False

            # tutto ok: non c'è blocco, di conseguenza l'attuale testa
            # diventa l'ultima casella della coda
            self.coda.append(self.testa)

            # aggiorno la testa, portandola nella casella nuovaTesta
            self.testa = nuovaTesta

            # se ho mangiato cibo, ho finito, perché essendo cresciuto di
una
            # casella, la coda non si ritrae. Se invece mangio cibo, la coda
            # avanza di una casella e la casella liberata diventa parte
della
            # scia.
            if self.field.food_in(self.testa):
                # la fine della coda, diventa l'inizio della scia
                self.scia.append(self.coda[0])
                self.coda = self.coda[1:]

            elif mossa is "S" :

Ora prova sulla falsa riga di quanto ho scritto a gestire tutti gli altri casi.

Un saluto.

On Mon, Jul 1, 2024 at 4:04 PM albianchi1 @.***> wrote:

Salve professore, ho aggiunto del codice al progetto snake. Ho seguito le sue indicazioni. Ovvero che la scia non può coincidere con la coda e che quest'ultima viene aggiornata solo nel caso in cui il serpente incontri del cibo. A questo punto mi servirebbe sapere come aggiornare la scia del serpente nel caso in cui la testa del serpente non incontri del cibo.

— Reply to this email directly, view it on GitHub https://github.com/albianchi1/albert/issues/7#issuecomment-2200244138, or unsubscribe https://github.com/notifications/unsubscribe-auth/AALOX33IQZU677E23FNIXF3ZKFOV7AVCNFSM6AAAAABIRRSNROVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMBQGI2DIMJTHA . You are receiving this because you authored the thread.Message ID: @.***>

albianchi1 commented 1 day ago

per l'aggiornamento della nuovaTesta=(self.testa[0]-1,self.testa[1]) come interpreta il linguaggio il codice? Non mi è chiaro self.testa[1]

albianchi1 commented 25 minutes ago

Se vuole possiamo organizzare una videochiamata così mi spiega come ha pensato il codice. Non mi è chiarissimo. La ringrazio, Alberto.