Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - problema con un codice pascal
Forum - Pascal - problema con un codice pascal

Avatar
lucazed (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/05/2015

Segnala al moderatore
Postato alle 19:12
Lunedì, 11/05/2015
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

Codice sorgente - presumibilmente Delphi

  1. program nuovotris;
  2.      uses crt;
  3.      var tris : array[1..3,1..3] of integer; miacol,miariga,cpucolo,cpuriga,j,h,k,winner : integer;
  4. begin
  5. randomize;
  6. writeln('la cpu ha come simbolo l"1, tu il 2');
  7. repeat
  8. clrscr;
  9. writeln('è il tuo turno. seleziona la casella in cui mettere il simbolo');
  10. writeln('inserisci la colonna');
  11. readln(miacol);
  12. writeln('inserisci la riga');
  13. readln(miariga);
  14. while tris[miariga,miacol]<> 0 do
  15. begin
  16. writeln('la casella è già occupata');
  17. writeln('inserisci la colonna');
  18. readln(miacol);
  19. writeln('inserisci la riga');
  20. readln(miariga);
  21. end;
  22. tris[miariga,miacol] := 1;
  23. cpucolo := random(2)+1;
  24. cpuriga := random(2)+1;
  25. while tris[cpuriga,cpucolo]<> 0 do
  26. begin
  27. cpucolo := random(2)+1;
  28. cpuriga := random(2)+1;
  29. end;
  30. tris[cpuriga,cpucolo] := 2;
  31. for h := 1 to 3 do
  32. begin
  33. for k := 1 to 3 do write(tris[h,k],'  ');
  34. writeln;
  35. end;
  36. 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
  37. begin
  38. j := 1;
  39. winner := tris[1,1];
  40. end;
  41. 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
  42. begin
  43. j := 1;
  44. winner := tris[2,1];
  45. end;
  46. 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
  47. begin
  48. j := 1;
  49. winner := tris[3,1];
  50. end;
  51. 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
  52. begin
  53. j := 1;
  54. winner := tris[1,1];
  55. end;
  56. 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
  57. begin
  58. j := 1;
  59. winner := tris[1,2];
  60. end;
  61. 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
  62. begin
  63. j := 1;
  64. winner := tris[1,3];
  65. end;
  66. 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
  67. begin
  68. j := 1;
  69. winner := tris[1,1];
  70. end;
  71. 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
  72. begin
  73. j := 1;
  74. winner := tris[1,3];
  75. end;
  76. if winner = 1 then writeln('hai vinto');
  77. if winner = 2 then writeln('cpu vince');
  78. repeat until keypressed;
  79. until winner <>0;
  80. repeat until keypressed;
  81. end.



luca
PM Quote
Avatar
Bonnox (Member)
Pro


Messaggi: 82
Iscritto: 23/08/2014

Segnala al moderatore
Postato alle 13:10
Martedì, 12/05/2015
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
Codice sorgente - presumibilmente Pascal

  1. repeat until keypresed


è' piuttosto inutile, si può sostituire con
Codice sorgente - presumibilmente Plain Text

  1. readln


Ultima modifica effettuata da Bonnox il 12/05/2015 alle 14:35
PM Quote
Avatar
lucazed (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/05/2015

Segnala al moderatore
Postato alle 20:38
Martedì, 12/05/2015
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


luca
PM Quote
Avatar
Bonnox (Member)
Pro


Messaggi: 82
Iscritto: 23/08/2014

Segnala al moderatore
Postato alle 21:01
Martedì, 12/05/2015
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.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:18
Mercoledì, 13/05/2015
Ciao!

Ho testato il programma, e ho notato un errore nella generazione della mossa da parte del computer:
Codice sorgente - presumibilmente Plain Text

  1. cpucolo := random(2)+1;
  2. cpuriga := random(2)+1;

genera posizioni comprese tra 1 e 2.
Vedi http://www.freepascal.org/docs-html/rtl/system/random.html


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
lucazed (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/05/2015

Segnala al moderatore
Postato alle 20:32
Giovedì, 14/05/2015
Grazie mille, ora funziona alla perfezione :k: buona serata a tutti


luca
PM Quote