Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

creazione di un mazzo di carte in ordine casuale

349 views
Skip to first unread message

Stefano Attanasio

unread,
Mar 12, 2002, 3:38:03 PM3/12/02
to
Ciao a tutti,
volendo provare a simulare un gioco di carte, vorrei creare un mazzo di 40
carte, divise in 10 numeri * 4 tipi (tipo napoletane) ordinate casualmente;
praticamente vorrei creare una procedura che mi mischi le 40 carte di un
mazzo e mi dica le carte in che ordine sono. Come si fa? E' possibile?
Stefano


Carletto

unread,
Mar 12, 2002, 4:52:56 PM3/12/02
to
va bene cosě?
fammi sapere...
ciao

{-----------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...

Fabio Benedetti

unread,
Mar 12, 2002, 5:58:17 PM3/12/02
to
Ciao Stefano Attanasio,

>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/

Stefano Attanasio

unread,
Mar 13, 2002, 9:31:20 AM3/13/02
to
> va bene cosě?
> fammi sapere...
> ciao
Grazie mille non ho ancora provato ma dovrebbe andare
ciao


Michele Povigna

unread,
Mar 13, 2002, 12:13:29 PM3/13/02
to

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

Fabio Benedetti

unread,
Mar 14, 2002, 8:34:35 AM3/14/02
to
Ciao Michele Povigna, rispondo a quanto avevi scritto:

>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/

Carletto

unread,
Mar 14, 2002, 10:57:09 AM3/14/02
to
si ma se non immagazini prima le carte in un array puo succedere che venga
estratta la stessa carta due volte...
o no?
ciao

--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[
"Fabio Benedetti" <h.se...@inwind.it> ha scritto nel messaggio
news:996.838T1763T8...@inwind.it...

Carletto

unread,
Mar 14, 2002, 10:58:59 AM3/14/02
to
ciao stefano... per quanto riguarda il problema che le carte mescolate sono
sempre le stesse, prima della random devi aggiungere una proceura chiamata
randomize come sotto riportato...

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...

Fabio Benedetti

unread,
Mar 14, 2002, 12:08:37 PM3/14/02
to
Ciao Carletto, rispondo a quanto avevi scritto:

>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/

Carletto

unread,
Mar 14, 2002, 1:40:26 PM3/14/02
to
non per niente... cmq mi sembra piu chiaro il mio...
ciao

--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[

"Fabio Benedetti" <h.se...@inwind.it> ha scritto nel messaggio
news:1154.836T864T1...@inwind.it...

Fabio Benedetti

unread,
Mar 15, 2002, 1:16:05 PM3/15/02
to
Ciao Carletto, rispondo a quanto avevi scritto:

>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/

0 new messages