Oppure

Loading
07/10/12 18:43
Si, questa potrebbe essere una soluzione.

Solo che renderebbe il codice davvero lungo e secondo me c'è qualcosa che potrebbe fare tutto più velocemente... (solo che non so cosa :D)

______________________________________________________

Rimane il problema che ogni tanto mi stampa 3 o 4 "Hai vinto". Ho provato a mettere un clrscr prima di stampare gioca, sembra funzionare ma non capisco come e perchè.
Ecco uno screen con l'errore: i.imgur.com/…
Ultima modifica effettuata da 07/10/12 18:51
07/10/12 22:15
Ultimo

è normale che ne escano 3, c'è un errore logico

  write(' Vuole fare una puntata(si\no)? ');
        readln(inizio);
        if
           inizio=('si') then
           begin
            write(' Vuole giocare un ambo o un terno? ');
            readln(tipo);
 
                case tipo of
                        'a' : begin
                                Write(' Inserisci il primo numero che vuoi puntare: ');
                                readln(numa);
                                Write(' Inserisci il secondo numero che vuoi puntare: ');
                                readln(numb);
                                Write(' Inserisci il nome(numero da 1 a 11) della ruota in cui vuoi giocare: ');
                                readln(ruota);
                                band:=0;
 
                                a:=ruota;
                                        for b:=1 to 5 do
                                            begin
                                                if (numa=tab[a,b]) then  band:=band+1;
                                                if (numb=tab[a,b]) then  band:=band+1;                                        
                                             end;
 
                                 if band=2 then
                                   begin
                                         textcolor(green);
                                         Writeln(' Hai vinto!');
                                   end;    
                                If band<2 then
                                  begin
                                        textcolor(red);
                                        writeln(' Hai perso!');
                                  end;
 
                         end;
                         't': writeln(' Work in progress');
 
        end;
        end;
         if inizio='no' then  write(' Premi invio per uscire');
 
        end;


hai capito perchè ne uscivano 3 ? :heehee:



If ok Then GOTO Avanza else GOTO Inizia

07/10/12 23:37
Grazie mille, in effetti avevo fatto un casino con i Begin/end

Domani proverò a vedere se in qualche modo posso permettere all utente di scrivere la ruota in lettere e non in numeri senza ricorrere a 11 case
08/10/12 10:11
Goblin
Codice buttato giù "al volo" in questo modo prendi tutte le ruote e puoi puntare sino alla cinquina...
non è testato al 100%, magari va migliorato ... ma potrebbe essere un idea



type
 Puntata = array[1..5] of integer;
....

function RiempiNumeri(nTipo: Integer): Puntata;
var x: integer;
begin
  for x := 1 to 5 do
    Result[x] := -1;
  for x := 0 to nTipo do
  begin
    Writeln('Inserisci il numero che vuoi puntare: ');
    readln(Result[x+1]);
  end;
end;

procedure gioca;
   var
   inizio,terno:string[10];
   ruota,numa,numb,numc,lol,a,b,ambo,tipo:integer;
   aNumeri: Array[1..5] of Integer;
begin
  write('Vuole fare una puntata? (si\no) ');
  readln(inizio);
  if inizio=('si') then
  begin
    writeln('Vuoi giocare: ');
    writeln('1) Ambo ');
    writeln('2) Terno ');
    writeln('3) Quaterna ');
    writeln('4) Cinquina ');
    readln(tipo);
    writeln('Seleziona la ruota: ');
    For a := 1 to 11 do
      writeln(IntToStr(a)+') '+nomi_ruote[a]);
    readln(Ruota);
    aNumeri := RiempiNumeri(tipo);
    lol:=0;
    for b:=1 to 5 do
    begin
      for a := 1 to Tipo+1 do
        if tab[Ruota,b] = aNumeri[a] then
          lol := lol+1;
    end;
    If lol = Tipo+1  then
    begin
      textcolor(green);
      writeln('Hai vinto !!')
    end
    else
    begin
      textcolor(Red);
      Writeln('Hai perso !!');
    end;
  end;
end;


Ibis redibis non morieris in bello
08/10/12 19:18
Ciao e grazie per la risposta.
Dato che sono alle prime armi con Pascal non ho capito benissimo il tuo codice ma va bene lo stesso ;)

Soprattutto non capisco a cosa servono queste parti:
For a := 1 to 11 do
      writeln(IntToStr(a)+') '+nomi_ruote[a]);
    readln(Ruota);
    aNumeri := RiempiNumeri(tipo);
    lol:=0;
    for b:=1 to 5 do
    begin
      for a := 1 to Tipo+1 do
        if tab[Ruota,b] = aNumeri[a] then
          lol := lol+1;
    end;
Ultima modifica effettuata da 08/10/12 20:12
08/10/12 20:33
Goblin
Postato originariamente da stichtom:

Ciao e grazie per la risposta.
Dato che sono alle prime armi con Pascal non ho capito benissimo il tuo codice ma va bene lo stesso ;)

Soprattutto non capisco a cosa servono queste parti:
For a := 1 to 11 do
      writeln(IntToStr(a)+') '+nomi_ruote[a]);
    readln(Ruota);
    aNumeri := RiempiNumeri(tipo);
    lol:=0;
    for b:=1 to 5 do
    begin
      for a := 1 to Tipo+1 do
        if tab[Ruota,b] = aNumeri[a] then
          lol := lol+1;
    end;



le prime 2 righe stampano le ruote l'output è:
1) Nazionale
......
11) Venezia

la terza chiede la ruota dove puntare
la quarta riempe un array con le puntate a seconda della scelta (ambo, terno .. ect ect)
il doppio ciclo for testa se i numeri puntati sono stati estratti.
Ultima modifica effettuata da Goblin 08/10/12 20:34
Ibis redibis non morieris in bello
08/10/12 20:51
Postato originariamente da Goblin:

Postato originariamente da stichtom:

Ciao e grazie per la risposta.
Dato che sono alle prime armi con Pascal non ho capito benissimo il tuo codice ma va bene lo stesso ;)

Soprattutto non capisco a cosa servono queste parti:
For a := 1 to 11 do
      writeln(IntToStr(a)+') '+nomi_ruote[a]);
    readln(Ruota);
    aNumeri := RiempiNumeri(tipo);
    lol:=0;
    for b:=1 to 5 do
    begin
      for a := 1 to Tipo+1 do
        if tab[Ruota,b] = aNumeri[a] then
          lol := lol+1;
    end;



le prime 2 righe stampano le ruote l'output è:
1) Nazionale
......
11) Venezia

la terza chiede la ruota dove puntare
la quarta riempe un array con le puntate a seconda della scelta (ambo, terno .. ect ect)
il doppio ciclo for testa se i numeri puntati sono stati estratti.


Già piu chiaro ;)
Ultimi dubbi:
1) Perchè se metto IntToStr mi dice che non è una variabile
2) Sempre IntToStr permette di passare da integer a stringhe vero?

Grazie mille
08/10/12 21:13
Goblin
Sono solito usare il compilatore pascal di lazarus il quale contiene la funzione IntToStr che è definita (vado a memoria):

function IntToStr(Value: integer): string;
begin
Str(Value, result);
end ;

dunque dato in input un numero mi ritorna una stringa contenete il numero
Ibis redibis non morieris in bello