Oppure

Loading
08/09/11 11:54
luca95
ciao a tutti ho trovato un gioco che si chiama labirinto mutevole praticamente hai 16 lettere che devi far andare nel loro spazio però ci sono dei bivi e devi andare dalla parte indicata dalla freccia e ad ogni passaggio la freccia cambia direzione e alla fine si formerà la parola es:
1 o
/ \
2-3 O O
/ \ / \
4-5-6-7 o o o o
/\ /\ /\ /\
8-9-10-11-12 o o o o o o o o 13-14-15
/\ /\ /\ /\/\ /\ /\ /\
i cerchi indicano che li ci va la direzione della freccia destra o sinistra i numeri indicano che numero è il tondino per esempio quello su in alto è il primo quindi è la posizione numero uno quelli sotto a sinistra c'è la posizione due e a destra la tre e così fino alla quindici e in fondo dove non ci sono i cerchietti li arriveranno le lettere che formeranno poi la parola io ho provato a fare un programma che risolvesse in automatico questo gioco però dopo aver inserito le 16 lettere da dover spostare mi da un errore e mi dice exited with exit code 201 e non so come fare per farlo andare.
inserisco ora il mio programma se non capite qualcosa ditemelo che ve lo spiego :)

program frecce;
uses crt;
var dir: array [1..15] of byte; (*indica da che parte è girata la freccia, 0 sinistra 1 destra*)
var let: array [1..16] of char; (*tiene le lettere da mettere in ordine*)
var pos: array [1..15] of char; (*indica in che posizione si trova al momento la lettera*)
var par: array [1..16] of char; (*tiene le lettere messe in ordine*)
var i:byte;

procedure lettere;  (*inserimento lettere da ordinare*)
Begin
  for i:=1 to 16 do
    Begin
      write(i);
      readln(let[i]);
    End;
End;

procedure dir_frecc;   (*sistemazione lettere*)
Begin
  dir[1]:=0; 
  dir[2]:=0;
  dir[3]:=1;
  dir[4]:=0;
  dir[5]:=0;
  dir[6]:=1;
  dir[7]:=1;
  dir[8]:=0;
  dir[9]:=0;
  dir[10]:=0;
  dir[11]:=0;
  dir[12]:=1;
  dir[13]:=1;
  dir[14]:=1;
  dir[15]:=1;
  for i:=0 to 16 do
    Begin
      pos[1]:=let[i];
      if dir[1]=0 then
        Begin
          dir[1]:=1;
          pos[2]:=pos[1];
        End
                  else
        Begin
          dir[1]:=0;
          pos[3]:=pos[1];
        End;
        if pos[2]<>'' then
          Begin
            if dir[2]=0 then
              Begin
                dir[2]:=1;
                pos[4]:=pos[2];
              End
                        else
              Begin
                dir[2]:=0;
                pos[5]:=pos[2];
              End;
          End
                     else
          Begin
            if dir[3]=0 then
              Begin
                dir[3]:=1;
                pos[6]:=pos[3];
              End
                        else
              Begin
                dir[3]:=0;
                pos[7]:=pos[3];
               End;
          End;
          if pos[4]<>'' then
            Begin
              if dir[4]=0 then
                Begin
                  dir[4]:=1;
                  pos[8]:=pos[4];
                End
                          else
                Begin
                  dir[4]:=0;
                  pos[9]:=pos[4];
                End;
            End
                       else
          if pos[5]<>'' then
            Begin
              if dir[5]=0 then
                Begin
                  dir[5]:=1;
                  pos[10]:=pos[5];
                End
                          else
                Begin
                  dir[5]:=0;
                  pos[11]:=pos[5];
                End;
            End
                        else
          if pos[6]<>'' then
            Begin
              if dir[6]=0 then
                Begin
                  dir[6]:=1;
                  pos[12]:=pos[6];
                End
                          else
                Begin
                  dir[6]:=0;
                  pos[13]:=pos[6];
                End;
            End
                        else
          if pos[7]<>'' then
            Begin
              if dir[7]=0 then
                Begin
                  dir[7]:=1;
                  pos[14]:=pos[7];
                End
                          else
                Begin
                  dir[7]:=0;
                  pos[15]:=pos[7];
                End;
            End;
         if pos[8]<>'' then
            Begin
              if dir[8]=0 then
                Begin
                  dir[8]:=1;
                  par[1]:=pos[8];
                End
                          else
                Begin
                  dir[8]:=0;
                  par[2]:=pos[8];
                End;
            End
                       else
         if pos[9]<>'' then
            Begin
              if dir[9]=0 then
                Begin
                  dir[9]:=1;
                  par[3]:=pos[9];
                End
                          else
                Begin
                  dir[9]:=0;
                  par[4]:=pos[9];
                End;
            End
                       else
         if pos[10]<>'' then
            Begin
              if dir[10]=0 then
                Begin
                  dir[10]:=1;
                  par[5]:=pos[10];
                End
                          else
                Begin
                  dir[10]:=0;
                  par[6]:=pos[10];
                End;
            End
                        else
        if pos[11]<>'' then
            Begin
              if dir[11]=0 then
                Begin
                  dir[11]:=1;
                  par[7]:=pos[11];
                End
                          else
                Begin
                  dir[11]:=0;
                  par[8]:=pos[11];
                End;
            End
                        else
        if pos[12]<>'' then
            Begin
              if dir[12]=0 then
                Begin
                  dir[12]:=1;
                  par[9]:=pos[12];
                End
                          else
                Begin
                  dir[12]:=0;
                  par[10]:=pos[12];
                End;
            End
                        else
        if pos[13]<>'' then
            Begin
              if dir[13]=0 then
                Begin
                  dir[13]:=1;
                  par[11]:=pos[13];
                End
                          else
                Begin
                  dir[13]:=0;
                  par[12]:=pos[13];
                End;
            End
                        else
        if pos[14]<>'' then
            Begin
              if dir[14]=0 then
                Begin
                  dir[14]:=1;
                  par[13]:=pos[14];
                End
                          else
                Begin
                  dir[14]:=0;
                  par[14]:=pos[14];
                End;
            End
                        else
        if pos[15]<>'' then
            Begin
              if dir[15]=0 then
                Begin
                  dir[15]:=1;
                  par[15]:=pos[15];
                End
                          else
                Begin
                  dir[15]:=0;
                  par[16]:=pos[15];
                End;
            End;
    End;
End;

procedure scrittura; (*scrittura parola*)
Begin
  for i:=1 to 15 do write(par[i]);
End;

Begin
  clrscr;
  lettere;
  dir_frecc;
  scrittura;
  readln;
End.

grazie in anticipo per l'aiuto :)
Ultima modifica effettuata da luca95 08/09/11 12:04
aaa
08/09/11 13:29
djleo
Ciao non capisco perché dir e pos li dichiari come array e poi hai il link dove hai trovato il gioco?

Poi dal disegno che hai fatto potresti usare un struttura chiamata albero

it.wikipedia.org/wiki/…
Ultima modifica effettuata da djleo 08/09/11 13:31
aaa
08/09/11 13:57
luca95
se vuoi posso mettere un immagine perché è preso da una rivista :) e comunque non sapevo neanche esistesse la struttura ad albero e li ho dichiarati array perché devo aggiungerci anche la grafica prima volevo vedere se funzionava il programma
aaa
08/09/11 14:03
djleo
ok posta l'immagine e vediamo un po cosa si può fare
aaa
08/09/11 20:29
luca95
ecco l'immagine del gioco
aaa
09/09/11 9:20
djleo
Ciao le frecce sono sempre cosi all'inizio o cambiano. Cioè nel ramo di destra sono sempre a destra in tutti i giochi o sono diverse le direzioni
aaa
09/09/11 9:36
Il Totem
Non vedo quale sia la sfida nel gioco, dato che è tutto determinato. Devi semplicemente seguire le frecce e invertire quelle toccate ad ogni passaggio, perciò la parola si forma sempre e comunque alla fine. Sarebbe stato leggermente più complesso se ti avessero chiesto di determinare l'ordine in cui devono cadere le lettere per formare una parola. Comunque...

Il tuo codice è spaventevole. Tutti quegli if sono inutili.
Come ha detto djleo, il tutto è risolvibile con un semplice albero binario. In ogni nodo poni il verso della freccia. Quindi esegui una visita breadth-first per arrivare all'ultimo livello dell'albero, ossia alle sue foglie, e le numeri in ordine crescente da destra a sinistra. Dopodiché esegui una visita depth-first in pre-order modificata in modo da scendere solo nel verso della freccia. Una volta arrivato a una foglia dell'albero, prendi il numero ad essa associato. Esso conterrà l'indice della lettera nella parola finale. Ripeti tutto tante volte quante sono le lettere.
aaa
09/09/11 9:38
djleo
Allora se non è cosi. Cioè se le direzioni cambiano le mettiamo in un file di testo.
Esempio di file
s
sd
ssdd
ssssdddd

il file viene utilizzato solo la prima volta per caricare le direzioni nell'albero.
Un altra domanda la stringa finale ha un senso compiuto o no?

rettifico il file deve essere cosi:

s
s
s
s

s

s
s

s

d
d
d

d

d
d

d
Ultima modifica effettuata da djleo 09/09/11 11:06
aaa