PDA

Visualizza la versione completa : [Pascal] Disposizione Random


software1988
13-02-2008, 15:57
Salve ragazzi allooora..Sono in un vicolo cieco...

Sto programmando un giochetto con pascal.. un'opzione del gioco richiede di far disporre le pedine ('O') nella griglia di gioco(una matrice 7x7) in modo random. Io ho fatto così ma non mi stampa nulla..

program dispos;
type matrice = array [1..7, 1..7] of char;

var
cont, ped, i, j,y: integer;
mat: matrice;

writeln ('Inserisci il numero di pedine');
readln (ped);
cont:=1;

while (cont<=ped) do
begin
for i:=1 to 7 do
for j:=1 to 7 do
begin
y:=0;
randomize;
y:= random (2);
end;

if y=1 then
mat [i,j]:= 'O';
cont:=cont+1;
end;

La variabile cont mi serve per utilizzare solo il numero di pedine che ho deciso di utilizzare..HELP

pallinopinco
13-02-2008, 16:19
Prova con una cosa del genere:



program dispos;

{ "Decommenta" la riga seguente se usi Delphi
{$APPTYPE CONSOLE}}

type
TMatrice = array [1..7, 1..7] of Char;

var
i, j, pedine: Integer;
matrice: TMatrice;

begin
{ Inizializza il seme (una sola volta) }
Randomize;

{ Accetta l'input e verifica se è entro i limiti (cosa accade se l'utente inserisce un carattere o una stringa?) }
Write('Numero di pedine (compreso tra 1 e 49) = ');
Readln(pedine);
if (pedine < 1) or (pedine > 49) then
Exit;

repeat
i := Random(7) + 1;
j := Random(7) + 1;
{ Evita doppioni }
if matrice[i, j] <> 'O' then
begin
matrice[i, j] := 'O';
Dec(pedine);
end;
until pedine = 0;

{ Stampa la matrice in modo molto "grezzo" }
for i := 1 to 7 do
begin
for j := 1 to 7 do
begin
Write(matrice[i, j], ' ');
end;
Writeln;
end;
end.


Questo è l'output per pedine = 13:



Numero di pedine (compreso tra 1 e 49) = 13
O O
O
O
O O O
O O
O O O
O

software1988
13-02-2008, 16:28
Va benissimo.. :yuppi: MI spieghi a cosa serve Dec(ped)..

Grazie mille del tuo aiuto...

pallinopinco
13-02-2008, 16:30
Dec(ped)..


dec = decrementa
inc = incrementa

in Pascal:

dec(variabile) equivale a variabile := variabile -1
inc(variabile) equivale a variabile := variabile + 1

Puoi passare un eventuale incremento/decremento come secondo parametro della funzione:

dec(variabile, 99) equivale a variabile := variabile - 99
inc(variabile, 99) equivale a variabile := variabile + 99

software1988
13-02-2008, 16:40
Grazie..mi sei molto d'aiuto!!

Sono autodidatta in programmazione e quindi mi perdo presto...

software1988
13-02-2008, 20:11
Ho inserito nel programma la richiesta delle cordinate per poter muovere le pedine e poter così anche "mangiarle" (come nella dama)..però mi sono resa conto che utilizzando la disposizione random non sempre ho la possibilità di giocare in quanto le pedine vengono a trovarsi ad esempio agli angoli isolate oppure sono distanziate tra loro; questa sarebbe quindi una situazione di stallo del gioco...e in questo caso quale istruzione gli potrei dare per evidenziare tutte queste situazioni che fanno terminare il mio gioco?? :confused:

pallinopinco
13-02-2008, 20:43
Dovresti illustrare in dettaglio TUTTE le regole del gioco...

software1988
13-02-2008, 21:06
Ok allora..vediamo se riesco a spiegarvelo bene...

Si parte da una disposizione iniziale delle pedine. Lo scopo del gioco è quello di eliminare via via le pedine mediante delle mosse che consistono nel far saltare una pedina oltre una di quelle adiacenti, per posizionarsi così su di una cella vuota. Si può muovera la pedina solo in orizzontale e verticale. La pedina "mangiata" viene ovviamente rimossa dalla griglia di gioco. Si vince quando tutte le pedine vengono mangiate e ne resta solo una.

Questo riguarda le regole in generale, poi gli voglio mettere il punteggio e varie opzioni che pian piano mi vengono le ispirazioni mi propongo di sviluppare ocn voi..tipo punteggi migliori, pedine mangiate ecc. Intanto vorrei risolvere il problema appena postato della situazione di stallo... che mi suggerite? :)

pallinopinco
13-02-2008, 21:19
che mi suggerite?


Di estendere il set di regole per rendere consistente il gioco, come hai notato anche tu quelle attuali comportano diverse situazioni di stallo, dunque non tutte le partite possono essere portate a termine. Il buon esito di una partita al momento è legato alla disposizione iniziale e/o alla sequenza di mosse del giocatore.

Per iniziare dovresti buttar giù una lista completa di situazioni di stallo.

software1988
13-02-2008, 22:04
Okay mi metto subito all'opera per "listare" eventuali situazioni di stallo e poi le posto...

Loading