Oppure

Loading
11/05/15 17:12
lucazed
Ciao a tutti sono Luca,da tempo mi volevo iscrivere e visto che ho un problema ho approfittato per farlo ora. Ho provato a realizzare il gioco tris solo dal punto di vista testuale, ma quando uno dei giocatori vince il prgramma si blocca...qualcuno sa dirmi come mai? grazie e scusate l'ignoranza 8-| , è da poco che mi occupo di questo linguaggio.
P.S. per il momento la cpu tenta ancora random le caselle, mi occuperò in seguito del resto

program nuovotris;
     uses crt;
     var tris : array[1..3,1..3] of integer; miacol,miariga,cpucolo,cpuriga,j,h,k,winner : integer;
begin
randomize;
writeln('la cpu ha come simbolo l"1, tu il 2');
repeat
clrscr;
writeln('è il tuo turno. seleziona la casella in cui mettere il simbolo');
writeln('inserisci la colonna');
readln(miacol);
writeln('inserisci la riga');
readln(miariga);
while tris[miariga,miacol]<> 0 do
begin
writeln('la casella è già occupata');
writeln('inserisci la colonna');
readln(miacol);
writeln('inserisci la riga');
readln(miariga);
end;
tris[miariga,miacol] := 1;
cpucolo := random(2)+1;
cpuriga := random(2)+1;
while tris[cpuriga,cpucolo]<> 0 do
begin
cpucolo := random(2)+1;
cpuriga := random(2)+1;
end;
tris[cpuriga,cpucolo] := 2;
for h := 1 to 3 do
begin
for k := 1 to 3 do write(tris[h,k],'  ');
writeln;
end;
if (tris[1,1] = tris[1,2]) and (tris[1,2] = tris[1,3]) and (tris[1,1]<>0)and (tris[1,2]<>0)and (tris[1,3]<>0) then
begin
j := 1;
winner := tris[1,1]; 
end;
if (tris[2,1] = tris[2,2]) and (tris[2,2] = tris[2,3]) and (tris[2,1]<>0)and (tris[2,2]<>0)and (tris[2,3]<>0) then
begin
j := 1;
winner := tris[2,1];
end;
if (tris[3,1] = tris[3,2]) and (tris[3,2] = tris[3,3])and (tris[3,1]<>0)and (tris[3,2]<>0)and (tris[3,3]<>0) then
begin
j := 1;
winner := tris[3,1]; 
end;
if (tris[1,1] = tris[2,1]) and (tris[2,1] = tris[3,1])and (tris[1,1]<>0)and (tris[2,1]<>0)and (tris[3,1]<>0) then
begin
j := 1;
winner := tris[1,1]; 
end;
if (tris[1,2] = tris[2,2]) and (tris[2,2] = tris[3,2])and (tris[1,2]<>0)and (tris[2,2]<>0)and (tris[3,2]<>0) then
begin
j := 1;
winner := tris[1,2];
end;
if (tris[1,3] = tris[2,3]) and (tris[2,3] = tris[3,3])and (tris[1,3]<>0)and (tris[2,3]<>0)and (tris[3,3]<>0) then
begin
j := 1;
winner := tris[1,3]; 
end;
if (tris[1,1] = tris[2,2]) and (tris[2,2] = tris[3,3])and (tris[1,1]<>0)and (tris[2,2]<>0)and (tris[3,3]<>0) then
begin
j := 1;
winner := tris[1,1];
end;
if (tris[1,3] = tris[2,2]) and (tris[2,2] = tris[3,1])and (tris[1,3]<>0)and (tris[2,2]<>0)and (tris[3,1]<>0) then
begin
j := 1;
winner := tris[1,3];
end;
if winner = 1 then writeln('hai vinto');
if winner = 2 then writeln('cpu vince');
repeat until keypressed;
until winner <>0;
repeat until keypressed;
end.
aaa
12/05/15 11:10
Bonnox
ciao, anche io all'inizio ho fatto un tris in cui l'avversario sceglie a caso le caselle: non è molo realistico.

detto questo provo a guardare il tuo codice e ti farò sapere ;)
(però sarebbe stato meglio fare un po' di formattazione, inoltre ti consiglio di usare un po' le procedure/funzioni per rendere il codice leggibile)


EDIT:

hai fatto un algoritmo piuttosto contorto (e l'assenza di formattazione e procedure non aiuta), ma credo che il problrma risieda nei repeat finali.

innanzitutto non ho ben chiaro a cosa serva
repeat until keypresed

è' piuttosto inutile, si può sostituire con
readln
Ultima modifica effettuata da Bonnox 12/05/15 12:35
aaa
12/05/15 18:38
lucazed
Grazie mille! Sì, in effetti è molto contorto, ancora di più adesso che ho migliorato l'inserimento della cpu...cerco al più presto di occuparmi e di utilizzare le procedure.Grazie ancora
aaa
12/05/15 19:01
Bonnox
non risolverà completamente il problema, ma intanto ho trovato una cosa:
la griglia non viene mostrata in caso di vittoria/sconfitta perchè è all'inizio del ciclo. devi aggiungerne un'altra in fondo al programma.
aaa
13/05/15 20:18
Poggi Marco
Ciao!

Ho testato il programma, e ho notato un errore nella generazione della mossa da parte del computer:
cpucolo := random(2)+1;
cpuriga := random(2)+1;
genera posizioni comprese tra 1 e 2.
Vedi freepascal.org/docs-html/rtl/system/…
aaa
14/05/15 18:32
lucazed
Grazie mille, ora funziona alla perfezione :k: buona serata a tutti
aaa