Newsgroup: it.comp.lang.pascal
Titolo: Aiuto: Solitario in Turbo Pascal

Salve ragazzi!!!!
Ho bisogno di aiuto..
Ho fatto un solitario in Turbo Pascal per luniversita'...
All'inizio funzionava, poi non ricordo se ho modificato qualcosa, ma
non va piu'.. parte ma non gioca come gli ho detto io...
Chi mi puo' aiutare mi contatti per e-mail... gli daro' il sorgente e
con la spiegazione del gioco.
Ovviamente appena corretto il sorgente sara' a disposizione di tutti!
Arianna Microchip
ari...@softhome.net
Web: 
http://arianna.cjb.net
http://consolicarmen.cjb.net

 con la spiegazione del gioco.
E' molto lungo?
Se non supera i 7931892473510783831234897135355098739085 byte
potresti pure postarlo in ng, e vediamo così se riusciamo a fare qualcosa
un po' tutti :-)
ps: forse il numero di byte è un po' troppo alto? Ho lasciato passeggiare
il gatto sulla tastiera...
ps2: il gatto voleva mangiare il mouse... non gliel'ho permesso! :-))
--
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
e-mail: 
cerch...@ciaoweb.it
cell.: 338/1347116
l'elenco telefonico dei telefonini:
http://www.elencoonline.it/
Bye byte, Cerchietto
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

ps2: il gatto voleva mangiare il mouse... non gliel'ho permesso! :-))
Arianna Microchip


Non penso si lamenti qlcn se fai un copia e incolla e lo mandi
su come messaggio normale....
o se qlcn si vuole lamentare lo faccia ora :-)
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

Testo del solitario:
"Scrivere un programma che simuli il solitario qui di seguito
descritto.
Un mazzo di 52 carte da poker, dopo essere stato mescolato, viene
suddiviso in 13 mazzetti da 4 carte ciascuno. 
I primi 12 mazzetti vengono disposti sul tavolo secondo le ore di un
quadrante di orologio; il 13¡mazzetto viene disposto al centro. 
Si prende la prima carta dal mazzetto di centro e la si mette sotto il
mazzetto che le corrisponde (asso=1, due=2, ..., fante=11, donna=12,
re=al centro); le carte successive si prendono dalla cima del mazzetto
sotto cui si èappena inserita la carta precedente. 
Il gioco finisce quando i 4 re sono tutti al centro e il successo si
ha quando tutte le carte sono nei mazzetti corrispondenti.
La prova di funzionamento su carta deve consistere nella stampa delle
varie configurazioni che si succedono." 
Programma:
Program Solitario;
Uses Crt;
Type  Carta = Record
           Valore: byte;
           Seme:char;
      end;
      Mazzetti = Array [1..4] of Carta;
Var  Carte: Array [1..52]Of Carta;
     Schema: Array [1..13] of Mazzetti;
     I, J:byte;
Procedure Generamazzo;
 Procedure Mazzo;
   Begin
    For I := 1 to 4 do
    For J := ((13*I)-12) to (13*I) do Carte [J].Valore:= (J- (13*
(I-1)));
    For I := 1 to 52 do Case I of
                       1..13:Carte [I].Seme := (#3);
                       14..26:Carte [I].Seme := (#4);
                       27..39:Carte [I].Seme := (#5);
                       40..52:Carte [I].Seme := (#6);
                      end;
   end;
 Procedure Mescolamazzo;
  Var Temp:Carta;
   Begin
    Randomize;
    Repeat
     I := Random (52)+1;
     J := Random (52)+1;
     Temp := Carte [I];
     Carte [I] := Carte [J];
     Carte [J] := Temp;
     Clrscr;
     Writeln;
     Writeln ('            Sto mescolando il mazzo. Premi un tasto per
fermare...');
     Delay (50);
    Until Keypressed;
    Writeln;
   end;
 Begin {inizio generamazzo}
  Mazzo;
  Mescolamazzo; {fine generamazzo}
 end;
Procedure Grafica;
 Procedure Visualizza;
 Var dove, Circular : byte;
 Begin
   Textbackground (Green);
   Writeln ('                     SOLITARIO DI ARIANNA MILAZZO
MICROCHIP');
   dove := 0;
   Generamazzo;
   Clrscr;
   Writeln;
   Writeln;
   Writeln ('                          Questo Š il mazzo generato!');
   Writeln;
   Writeln ('                          Premi un testo per iniziare');
   Writeln;
   Gotoxy (16, 8);
   For I := 1 to 52 do
    Begin
     Textbackground (Lightgray);
     If (Carte [I].Seme = (#003)) or (Carte [I].Seme = (#004)) then
Textcolor (Red)
     else Textcolor (Black);
     If (Carte [I].Valore = 1) or (Carte [I].Valore = 14) or (Carte
[I].Valore = 27) Or (Carte [I].Valore = 40)
        then Write (' A', Carte [I].Seme)
        else If (Carte [I].Valore = 11) or (Carte [I].Valore = 24) or
(Carte [I].Valore = 37) Or (Carte [I].Valore = 50)
             then Write (' J', Carte [I].Seme)
             else If (Carte [I].Valore = 12) or (Carte [I].Valore =
25) or (Carte [I].Valore = 38) Or (Carte [I].Valore = 51)
                  then Write (' Q', Carte [I].Seme)
                  else If (Carte [I].Valore = 13) or (Carte [I].Valore
= 26) or (Carte [I].Valore=39) Or (Carte[I].Valore=52)
                       then Write (' K', Carte [I].Seme)
                       else If (Carte [I].Valore =10) or
(Carte[I].Valore=23) Or (Carte[I].Valore=36) Or (Carte[I].Valore=49)
                            then Write (Carte [I].Valore, Carte
[I].Seme)
                            else Write (' ', Carte [I].Valore, Carte
[I].Seme);
     dove := dove+1;
     Textbackground (Green);
     Write (' ');
     If (Dove = 13) then
      Begin
        dove := 0;
        Writeln;
        Writeln;
        For Circular := 1 to 15 do
        Write (' ');
      end;
   end;
 end;
 Procedure Gioco;
 Procedure Disposizione;
   Procedure Assegnamento;
   Var K :byte;
    Begin
    I := 1;
    K := 1;
    J := 1;
    For J := 1 to 13 do
     Begin
      For I := 1 to 4 do
       Begin
        Schema [J] [I] := Carte [K];
        K := K+1;
       end;
     end;
    end;
  Begin {inizio disposizione}
   Assegnamento;
   Textbackground (Green);
   Clrscr;
   Writeln;
   Writeln ('                     SOLITARIO DI ARIANNA MILAZZO
MICROCHIP');
   I := 1;
   Textcolor (Black);
   For J := 1 to 13 do
    Begin
      Begin
      Case J of
      1: Begin
         Gotoxy (48, 7);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      2: Begin
         Gotoxy (54, 10);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      3: Begin
         Gotoxy (57, 13);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      4: Begin
         Gotoxy (54, 16);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      5: Begin
         Gotoxy (48, 19);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      6: Begin
         Gotoxy (39, 20);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      7: Begin
         Gotoxy (30, 19);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      8: Begin
         Gotoxy (24, 16);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      9: Begin
         Gotoxy (21, 13);
         Write (Chr (178), Chr (178), Chr (178));
         end;
      10: Begin
          Gotoxy (24, 10);
          Write (Chr (178), Chr (178), Chr (178));
          end;
      11: Begin
          Gotoxy (30, 7);
          Write (Chr (178), Chr (178), Chr (178));
          end;
      12: Begin
          Gotoxy (39, 6);
          Write (Chr (178), Chr (178), Chr (178));
          end;
      13: Begin
          Gotoxy (39, 13);
     Textbackground (Lightgray);
     If (Carte [I].Seme = (#003)) or (Carte [I].Seme = (#004)) then
Textcolor (Red)
     else Textcolor (Black);
     If (Carte [I].Valore = 1) or (Carte [I].Valore = 14) or (Carte
[I].Valore = 27) Or (Carte [I].Valore = 40)
        then Write (' A', Carte [I].Seme)
        else If (Carte [I].Valore = 11) or (Carte [I].Valore = 24) or
(Carte [I].Valore = 37) Or (Carte [I].Valore = 50)
             then Write (' J', Carte [I].Seme)
             else If (Carte [I].Valore = 12) or (Carte [I].Valore =
25) or (Carte [I].Valore = 38) Or (Carte [I].Valore = 51)
                  then Write (' Q', Carte [I].Seme)
                  else If (Carte [I].Valore = 13) or (Carte [I].Valore
= 26) or (Carte [I].Valore=39) Or (Carte[I].Valore=52)
                       then Write (' K', Carte [I].Seme)
                       else If (Carte [I].Valore =10) or
(Carte[I].Valore=23) Or (Carte[I].Valore=36) Or (Carte[I].Valore=49)
                            then Write (Carte [I].Valore, Carte
[I].Seme)
                            else Write (' ', Carte [I].Valore, Carte
[I].Seme);
         Textbackground (Green);
          end;
    end;
    end;
    end;
    J := 13;
    I := 1;
  end; {fine disposizione}
  Procedure Sostituzione;
     Var C, R:byte;
  Procedure dovecome;
     Begin
       Case J of
      1: Begin
         Gotoxy (48, 7);
         C := 48;
         R := 7;
         end;
      2: Begin
         Gotoxy (54, 10);
         C := 54;
         R := 10;
         end;
      3: Begin
         Gotoxy (57, 13);
         C := 57;
         R := 13;
         end;
      4: Begin
         Gotoxy (54, 16);
         C := 54;
         R := 16;
         end;
      5: Begin
         Gotoxy (48, 19);
         C := 48;
         R := 19;
         end;
      6: Begin
         Gotoxy (39, 20);
         C := 39;
         R := 20;
         end;
      7: Begin
         Gotoxy (30, 19);
         C := 30;
         R := 19;
         end;
      8: Begin
         Gotoxy (24, 16);
         C := 24;
         R := 16;
         end;
      9: Begin
         Gotoxy (21, 13);
         C := 21;
         R := 13;
         end;
      10: Begin
          Gotoxy (24, 10);
          C := 24;
          R := 10;
          end;
      11: Begin
          Gotoxy (30, 7);
          C := 30;
          R := 7;
          end;
      12: Begin
          Gotoxy (39, 6);
          C := 39;
          R := 6;
          end;
      13: Begin
          Gotoxy (39, 13);
          C := 39;
          R := 13;
          end;
      end;
     Textbackground (Lightgray);
     If (Carte [I].Seme = (#003)) or (Carte [I].Seme = (#004)) then
Textcolor (Red)
     else Textcolor (Black);
     If (Carte [I].Valore = 1) or (Carte [I].Valore = 14) or (Carte
[I].Valore = 27) Or (Carte [I].Valore = 40)
        then Write (' A', Carte [I].Seme)
        else If (Carte [I].Valore = 11) or (Carte [I].Valore = 24) or
(Carte [I].Valore = 37) Or (Carte [I].Valore = 50)
             then Write (' J', Carte [I].Seme)
             else If (Carte [I].Valore = 12) or (Carte [I].Valore =
25) or (Carte [I].Valore = 38) Or (Carte [I].Valore = 51)
                  then Write (' Q', Carte [I].Seme)
                  else If (Carte [I].Valore = 13) or (Carte [I].Valore
= 26) or (Carte [I].Valore=39) Or (Carte[I].Valore=52)
                       then Write (' K', Carte [I].Seme)
                       else If (Carte [I].Valore =10) or
(Carte[I].Valore=23) Or (Carte[I].Valore=36) Or (Carte[I].Valore=49)
                            then Write (Carte [I].Valore, Carte
[I].Seme)
                            else Write (' ', Carte [I].Valore, Carte
[I].Seme);
      Textbackground (Green);
     end;
     Procedure Sposta (Var C, R: byte);
        Procedure dovecome2;
         Begin
           Case Schema [J] [I].Valore of
             1: Gotoxy (48, 7);
             2: Gotoxy (54, 10);
             3: Gotoxy (57, 13);
             4: Gotoxy (54, 16);
             5: Gotoxy (48, 19);
             6: Gotoxy (39, 20);
             7: Gotoxy (30, 19);
             8: Gotoxy (24, 16);
             9: Gotoxy (21, 13);
             10: Gotoxy (24, 10);
             11: Gotoxy (30, 7);
             12: Gotoxy (39, 6);
             13: Gotoxy (39, 13);
             end;
     Textbackground (Lightgray);
     If (Carte [I].Seme = (#003)) or (Carte [I].Seme = (#004)) then
Textcolor (Red)
     else Textcolor (Black);
     If (Carte [I].Valore = 1) or (Carte [I].Valore = 14) or (Carte
[I].Valore = 27) Or (Carte [I].Valore = 40)
        then Write (' A', Carte [I].Seme)
        else If (Carte [I].Valore = 11) or (Carte [I].Valore = 24) or
(Carte [I].Valore = 37) Or (Carte [I].Valore = 50)
             then Write (' J', Carte [I].Seme)
             else If (Carte [I].Valore = 12) or (Carte [I].Valore =
25) or (Carte [I].Valore = 38) Or (Carte [I].Valore = 51)
                  then Write (' Q', Carte [I].Seme)
                  else If (Carte [I].Valore = 13) or (Carte [I].Valore
= 26) or (Carte [I].Valore=39) Or (Carte[I].Valore=52)
                       then Write (' K', Carte [I].Seme)
                       else If (Carte [I].Valore =10) or
(Carte[I].Valore=23) Or (Carte[I].Valore=36) Or (Carte[I].Valore=49)
                            then Write (Carte [I].Valore, Carte
[I].Seme)
                            else Write (' ', Carte [I].Valore, Carte
[I].Seme);
      Textbackground (Green);
    end;
       Begin
        Readln;
        If I = 4
        then Begin
               Gotoxy (C, R);
               Textcolor (Blue+Blink);
               Textbackground (Yellow);
               Write (' X ');
               dovecome2;
             end;
        If J <> Schema [J] [I].Valore
        then Begin
              Gotoxy (C, R);
              Textcolor (Black);
              Write (Chr (178), Chr (178), Chr (178));
              dovecome2;
             end
            else dovecome2;
       end;
    Begin
      dovecome;
      Read;
      Sposta (C, R);
      Schema [J] [I].Valore := 0;
     end; {Fine Sostituzione}
  Procedure Inizio;
   Var X : byte;
    Procedure Risultato;
     Begin
      J := 1;
      Repeat
         If (Schema[J][1].Valore=0) and (Schema[J][2].Valore=0) and
(Schema[J][3].Valore=0) And (Schema[J][4].Valore=0)
         then J := J+1
         else J := 20;
      Until J > 13;
      If J = 20
      then Begin
             Textcolor (Yellow+Blink);
             Textbackground (Blue);
             Gotoxy (30, 23);
             Write (' HAI PERSO! RITENTA... ');
           end
      else Begin
             Textcolor (Yellow+Blink);
             Textbackground (Blue);
             Gotoxy (34, 23);
             Write (' HAI VINTO! ');
           end;
     end;
    Procedure Centrale;
       Procedure Caso13;
         Begin
         J := 13;
         I := 2;
         If Schema [J] [I].Valore = 0
            then Begin
                  I := I+1;
                  If Schema [J] [I].Valore = 0
                  then Begin
                        I := I+1;
                        If Schema [J] [I].Valore = 0
                        then Risultato
                        else Begin
                              X := Schema [J] [I].Valore;
                              Sostituzione;
                              J := X;
                              Readln;
                             end;
                       end
                  else Begin
                        X := Schema [J] [I].Valore;
                        Sostituzione;
                        J := X;
                        Readln;
                       end;
                 end
             else Begin
                   X := Schema [J] [I].Valore;
                   Sostituzione;
                   J := X;
                   Readln;
                  end;
            end;
       Procedure Controllo;
        Begin
          If (Schema [13] [2].Valore = 0) or (Schema [13] [3].Valore =
0) or (Schema [13] [4].Valore = 0)
          then Centrale
          else Begin
      I := 1;
      If Schema [J] [I].Valore = 0
      then Begin
            I := I+1;
            If Schema [J] [I].Valore = 0
            then Begin
                  I := I+1;
                  If Schema [J] [I].Valore = 0
                  then Begin
                        I := I+1;
                        If Schema [J] [I].Valore = 0
                        then Risultato
                        else Begin
                              X := Schema [J] [I].Valore;
                              Sostituzione;
                              J := X;
                              Readln;
                              Controllo;
                             end;
                       end
                  else Begin
                        X := Schema [J] [I].Valore;
                        Sostituzione;
                        J := X;
                        Readln;
                        Controllo;
                       end;
                 end
             else Begin
                   X := Schema [J] [I].Valore;
                   Sostituzione;
                   J := X;
                   Readln;
                   Controllo;
                  end;
            end
      else Begin
            X := Schema [J] [I].Valore;
            Sostituzione;
            J := X;
            Readln;
            Controllo;
           end;
         end;
        end; {Fine Controllo}
     Begin {Inizio Centrale}
       I := 1;
      If Schema [J] [I].Valore = 0
      then Begin
            I := I+1;
            If Schema [J] [I].Valore = 0
            then Begin
                  I := I+1;
                  If Schema [J] [I].Valore = 0
                  then Begin
                        I := I+1;
                        If Schema [J] [I].Valore = 0
                        then Caso13
                        else Begin
                              X := Schema [J] [I].Valore;
                              Sostituzione;
                              J := X;
                              Readln;
                              Controllo;
                             end;
                       end
                  else Begin
                        X := Schema [J] [I].Valore;
                        Sostituzione;
                        J := X;
                        Readln;
                        Controllo;
                       end;
                 end
             else Begin
                   X := Schema [J] [I].Valore;
                   Sostituzione;
                   J := X;
                   Readln;
                   Controllo;
                  end;
            end
      else Begin
            X := Schema [J] [I].Valore;
            Sostituzione;
            J := X;
            Readln;
            Controllo;
           end;
      end; {fine Centrale}
    Begin {Inizio Inizio}
     Gotoxy (5, 4);
     Write ('Premi un tasto per girare la carta. Ripremilo per
metterla al suo posto.');
     X := Schema [J] [I].Valore;
     Sostituzione;
     J := X;
     If X <> 13
        then Begin
              Gotoxy (39, 13);
              Textcolor (Black);
              Write (Chr (178), Chr (178), Chr (178));
             end;
     Centrale;
    end; {Fine Inizio}
 Begin {inizio gioco}
  Disposizione;
  Readln;
  Inizio;
 end; {fine gioco}
Begin {inizio grafica}
Visualizza;
Readln;
Readln;
Gioco; {fine grafica}
end;
Begin
  Clrscr;
  Writeln ('                       SOLITARIO DI ARIANNA MILAZZO
MICROCHIP');
  Writeln;
  Writeln ('                 Premi un tasto per mescolare il mazzo e
giocare!');
  Readln;
  Grafica;
  Readln;
end.


    Writeln ('                          Questo S il mazzo generato!');


     end;
E quest' "end"  quindi č pure di troppo
Non ho ancora finito di leggere tutto il programma...
...vedremo al piů presto di farlo funzionare, una mano
l'uno... :-)


Pls RdC... quando quoti fai attenzione :-)
ciao


 wrote
[maxi cut]
Che fantasia!
Non pensavo che una procedura dentro un'altra potesse funzionare,
ma adesso che le vedo fino a 5 livelli....
Ecco lo schema delle procedure nidificate del tuo programma.
generamazzo ---> mazzo
                     |--> mescolamazzo
grafica ---> visualizza
           |--> gioco ---> disposizione ---> assegnamento
           |                |--> sostituzione ---> dovecome
           |                                         |--> sposta ---> dovecome2
           |--> inizio ---> risultato
                           |--> centrale ---> caso13
                                                |--> controllo
Tutte queste procedure mi sembrano un tantino troppe, ad
esempio, "generamazzo" non c'è nessun bisogno di dividerla
in due, "mazzo" e "mescolamazzo".
Fino ad ora ho solo capito l'impostazione del programma...
vedremo il funzionamento, l'eventuale errore, e di postare
il tuo programma corretto. :-)


Comincio dall'inizio (OVVIO!!!!):
Il problema l'ho trovato ed ho gia' risolto....
Le procedure sono divise spesso inutilmente, come dici tu, e in tutti
questi livelli, perche', anche se e' una stronzata, al prof. piace
cosi'!!!!
Vi ringrazio a tutti, cmq ho gia' risolto!


 Vi ringrazio a tutti, cmq ho gia' risolto!
Come? E ci lasci così? Nemmeno ci dici qual era l'errore?
Come sei crudele, vuoi farci morire dalla curiosità, vero?
Cattiva!


Cattiva!
Arianna Microchip
