{-----------START--------------}
program carte;
uses crt,dos;
{------------PROC-------------}
procedure mischia;
var w:string;
s:array [1..40] of string;
c:set of byte;
i,n:byte;
begin
randomize;
i:=0;
c:=[];
repeat
n:=random(40)+1;
if not (n in c) then
begin
inc(i);
c:=c+[n];
if ((n>=1) and (n<=10)) then
begin
str(n,w);
s[i]:=w + ' di bastoni';
end;
if ((n>=11) and (n<=20)) then
begin
str(n-10,w);
s[i]:=w + ' di coppe';
end;
if ((n>=21) and (n<=30)) then
begin
str(n-20,w);
s[i]:=w + ' di denari';
end;
if ((n>=31) and (n<=40)) then
begin
str(n-30,w);
s[i]:=w + ' di spade';
end;
end;
until i=40;
for i:=1 to 40 do
begin
write(s[i],' - ');
if (i mod 4)=0 then writeln;
end;
end;
{------------MAIN-------------}
Begin
clrscr;
mischia;
Readln;
End.
{------------END-------------}
"Stefano Attanasio" <stefano....@fastwebnet.it> ha scritto nel
messaggio news:GGtj8.877$sP6....@tornado.fastwebnet.it...
>volendo provare a simulare un gioco di carte, vorrei creare un mazzo di 40
>carte, divise in 10 numeri * 4 tipi...
Crea degli array multidimensionali e assegna a ciscuno un mazzo. Riempi
il vettore in questo modo:
var mazzo : ARRAY [1..10, 1..4] of byte;
val,segno : byte;
PROCEDURE Riempi;
var a,b : byte;
BEGIN
for a:=1 to 10 do
begin
for b:=1 to 4 do
begin
mazzo[a,b]:=0;
end;
end;
END;
Poi, quando devi pescare una carta, chiama la procedura "pescacarta(valore,
segno)" :
PROCEDURE pescacarta(VAR val, VAR segno: byte);
BEGIN
randomize;
repeat
val=random(10);
segno=random(4);
until (mazzo[val,segno]<>1)
mazzo[val,segno]=1;
END;
Se il contenuto dell'array è posto a 1, significa che la carta (val,
segno) è già stata pescata. Una volta chiamata la procedura, in "val"
e "segno" hai quello che ti serve.
L'ho tirato giù di fretta, magari c'è da controllare qualche variabile.
Saluti.
--
_
Fa/_)io A1200 PowerTower, WB 3.9, 060@60, 64MB, FireBall 13GB,
/__)enedetti Voodoo3, Digicom-10/100, Philips PCRW1208 - TFT-140/S.
/...mi ritornu in cantari/
Scrivi una funzione carta(40) che genera un numero casuale compreso
fra 1 e 40 (il numero di carte nel mazzo) - è solo un altro nome per
la funzione random(), e un'altra funzione scambiacarta(carta(40),
carta(40)) che le sostituisce. Iteri l'esecuzione dell'algoritmo un
numero di volte a piacere, e hai fatto mescolare il mazzo.
Ciao
PV
>Scrivi una funzione carta(40) che genera un numero casuale compreso
>fra 1 e 40 (il numero di carte nel mazzo) - è solo un altro nome...
Scusate, ma che senso ha generare l'intero mazzo di carte prima (per
immagazzinarlo in array) ??? L'importante è che la carta di volta
in volta utilizzata sia estratte in maniera casuale.
Mi riferisco anche al codice postato da un altro frequentatore del
gruppo.
>Iteri l'esecuzione dell'algoritmo un numero di volte a piacere, e hai
>fatto mescolare il mazzo.
Se ci pensi, è inutile... farlo prima. Basta farlo durante la
giocata. Ovviamente potrebbe anche succedere che sia necessario sapere
prima la disposizione del mazzo, se si deve ad esempio creare un
solitario.
Saluti.
--
_
Fa/_)io A1200 PowerTower, WB 3.9, 060@60, 64MB, FireBall 13GB,
/__)enedetti Voodoo3, Digicom-10/100, Philips PCRW1208 - TFT-140/S.
/...da capu Corsu a Bonifaziu, aria de Roma e mare du Laziu/
--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[
"Fabio Benedetti" <h.se...@inwind.it> ha scritto nel messaggio
news:996.838T1763T8...@inwind.it...
randomize;
e per ogni procedura in cui richiami la random.
ciao
--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[
"Stefano Attanasio" <stefano....@fastwebnet.it> ha scritto nel
messaggio news:UqJj8.1029$sP6....@tornado.fastwebnet.it...
>si ma se non immagazini prima le carte in un array puo succedere che venga
>estratta la stessa carta due volte...
Ma le hai viste le due procedure che ho postato ?
Si riempe prima un array di byte (o ancora meglio booleano) e si setta
a 1 la coppia (valore, seme) della carta già estratta.
Saluti.
--
_
Fa/_)io A1200 PowerTower, WB 3.9, 060@60, 64MB, FireBall 13GB,
/__)enedetti Voodoo3, Digicom-10/100, Philips PCRW1208 - TFT-140/S.
/...era un presagio dolce e lusinghiero/
--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[
"Fabio Benedetti" <h.se...@inwind.it> ha scritto nel messaggio
news:1154.836T864T1...@inwind.it...
>non per niente... cmq mi sembra piu chiaro il mio...
Sei sicuro ?? :)
Anche solo per il numero delle righe e la presenza
di cose ridondanti (nomi dei semi delle carte nell'array)
che non fanno che appesantire inutilmente l'algoritmo. Non
parliamo poi della presenza di tutti le condizioni (if).
Certo... il tuo algoritmo è più vicino al modo di fare
pratico della realtà, ma...
Con le mie procedure, basta una variabile e posso gestire
mazzi a 40 o più carte (basta decrementare la variabile per
sapere quante carte possono ancora esser pescate). Nel tuo
caso, dovresti andare a modificare tutte le condizioni.
Saluti.
--
_
Fa/_)io A1200 PowerTower, WB 3.9, 060@60, 64MB, FireBall 13GB,
/__)enedetti Voodoo3, Digicom-10/100, Philips PCRW1208 - TFT-140/S.
/...e a ciel sereno, ci tocca riposare/