Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Morra Cinse
Forum - Pascal - Morra Cinse

Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 14:39
Venerdì, 07/10/2011
Ciao a tutti ho fatto un programma per giocare a morra cinese e va anche discretamente bene volevo sapere se secondo voi poteva essere applicata qualche miglioria... ovviamente oltre ai disegni delle mani fatti da me fanno un po' schifo ma è il meglio che sono riuscito a fare :) ecco il codice devo dire che è abbastanza lungo se vi servono spiegazioni sulle varie parti ditemelo :)
noterete che il punteggio e la scelta del giocatore e pc è ripetuta nella grafica e a parole è solo per controllo quella a parole andrà eliminata :)

Codice sorgente - presumibilmente Delphi

  1. program morra_cinese;
  2. uses crt, graph;
  3. var sc: array [1..3] of char;
  4. var su,risp: char;
  5.  
  6.  
  7. procedure inizio;
  8. var Gd,Gm:integer;
  9. Begin
  10.   clrscr;
  11.   randomize;
  12.   DetectGraph(Gd,Gm);
  13.   InitGraph(Gd, Gm, 'C:\PROGRA~1\TP\BGI');
  14.   writeln('programma per giocare a morra cinese contro il pc');
  15.   readkey;
  16.   sc[1]:='S';
  17.   sc[2]:='C';
  18.   sc[3]:='F';
  19. End;
  20.  
  21. procedure pulisci;
  22. Begin
  23.   (*carta*)
  24.   SetColor(black);
  25.   Line(200,240,240,240);
  26.   Arc(240,235,0,90,5);
  27.   Arc(240,235,360,270,5);
  28.   Line(220,230,255,230);
  29.   Arc(255,225,0,90,5);
  30.   Arc(255,225,360,270,5);
  31.   Line(220,220,270,220);
  32.   Arc(270,215,0,90,5);
  33.   Arc(270,215,360,270,5);
  34.   Line(220,210,270,210);
  35.   Arc(255,205,0,90,5);
  36.   Arc(255,205,360,270,5);
  37.   Line(220,200,255,200);
  38.   Arc(230,195,0,90,5);
  39.   Arc(230,195,360,270,5);
  40.   Line(200,190,230,190);
  41.  
  42.   (*forbici*)
  43.   Line(200,240,240,240);
  44.   Arc(240,235,0,90,5);
  45.   Arc(240,235,360,270,5);
  46.   Line(220,230,240,230);
  47.   Arc(240,225,360,270,5);
  48.   Line(220,220,260,225);
  49.   Arc(260,220,0,81,5);
  50.   Arc(260,220,360,261,5);
  51.   Line(220,210,260,215);
  52.   Arc(255,205,0,90,5);
  53.   Arc(255,205,360,270,5);
  54.   Line(220,200,255,200);
  55.   Line(220,210,255,210);
  56.   Arc(230,195,0,90,5);
  57.   Line(235,195,235,200);
  58.   Line(200,190,230,190);
  59.  
  60.   (*sasso*)
  61.   Line(200,240,240,240);
  62.   Arc(240,235,0,90,5);
  63.   Arc(240,235,360,270,5);
  64.   Line(220,230,240,230);
  65.   Arc(240,225,0,90,5);
  66.   Arc(240,225,360,270,5);
  67.   Line(220,220,240,220);
  68.   Arc(240,215,0,90,5);
  69.   Arc(240,215,360,270,5);
  70.   Line(220,210,240,210);
  71.   Arc(240,205,0,90,5);
  72.   Arc(240,205,360,270,5);
  73.   Line(220,200,240,200);
  74.   Arc(230,195,0,90,5);
  75.   Line(235,195,235,200);
  76.   Line(200,190,230,190);
  77.  
  78.   (*forbici pc*)
  79.   (*pollice*)
  80.   Arc(330,195,180,90,5);
  81.   Line(325,195,325,200);
  82.   Line(330,190,360,190);
  83.   (*indice*)
  84.   Line(305,200,335,200);
  85.   Arc(305,205,90,270,5);
  86.   Line(305,210,335,210);
  87.   (*medio*)
  88.   Line(335,210,295,215);
  89.   Arc(295,220,99,279,5);
  90.   Line(295,225,335,220);
  91.   (*annulare*)
  92.   Line(315,230,335,230);
  93.   Arc(315,225,270,180,5);
  94.   (*mignolo*)
  95.   Line(315,240,360,240);
  96.   Arc(315,235,90,270,5);
  97.  
  98.   (*carta pc*)
  99.   (*pollice*)
  100.   Arc(340,195,270,90,5);
  101.   Line(340,190,370,190);
  102.   (*indice*)
  103.   Line(315,200,350,200);
  104.   Arc(315,205,90,270,5);
  105.   (*medio*)
  106.   Line(300,210,350,210);
  107.   Arc(300,215,90,270,5);
  108.   Line(300,220,350,220);
  109.   (*annulare*)
  110.   Arc(315,225,90,270,5);
  111.   Line(315,230,350,230);
  112.   (*mignolo*)
  113.   Arc(340,235,90,270,5);
  114.   Line(340,240,370,240);
  115.  
  116.   (*sasso pc*)
  117.   (*pollice*)
  118.   Line(330,190,360,190);
  119.   Line(325,195,325,200);
  120.   Arc(330,195,90,180,5);
  121.   (*indice*)
  122.   Line(320,200,340,200);
  123.   Arc(320,205,90,270,5);
  124.   (*medio*)
  125.   Line(320,210,340,210);
  126.   Arc(320,215,90,270,5);
  127.   (*annulare*)
  128.   Line(320,220,340,220);
  129.   Arc(320,225,90,270,5);
  130.   (*mignolo*)
  131.   Line(320,230,340,230);
  132.   Arc(320,235,90,270,5);
  133.   Line(320,240,360,240);
  134. End;
  135.  
  136. procedure gioco;
  137. var a,b,pupc,puut: byte;
  138. var stut,stpc: shortstring;
  139. Begin
  140.   clrscr;
  141.   writeln('il primo che tra te e pc raggiunge le 3 vittorie vince');
  142.   writeln('quando ti sarà richisesto dovrai inserire S per sasso C per carta F per forbici e la scelta del computer sarà estratta casualmente');
  143.   readkey;
  144.   puut:=0;
  145.   pupc:=0;
  146.   SetColor(white);
  147.   Line(0,20,80,20);
  148.   Line(40,0,40,100);
  149.   OutTextXY(20,10,'TU');
  150.   OutTextXY(60,10,'PC');
  151.   str(pupc,stpc);
  152.   str(puut,stut);
  153.   OutTextXY(20,30,stut);
  154.   OutTextXY(60,30,stpc);
  155.   repeat
  156.     clrscr;
  157.     repeat
  158.       writeln('inserisci S o C o F');
  159.       readln(su);
  160.     until (upcase(su)='S') or (upcase(su)='C') or (upcase(su)='F');
  161.     if upcase(su)='S' then
  162.       Begin
  163.         b:=1;
  164.         SetColor(white);
  165.         Line(200,240,240,240);
  166.         Arc(240,235,0,90,5);
  167.         Arc(240,235,360,270,5);
  168.         Line(220,230,240,230);
  169.         Arc(240,225,0,90,5);
  170.         Arc(240,225,360,270,5);
  171.         Line(220,220,240,220);
  172.         Arc(240,215,0,90,5);
  173.         Arc(240,215,360,270,5);
  174.         Line(220,210,240,210);
  175.         Arc(240,205,0,90,5);
  176.         Arc(240,205,360,270,5);
  177.         Line(220,200,240,200);
  178.         Arc(230,195,0,90,5);
  179.         Line(235,195,235,200);
  180.         Line(200,190,230,190);
  181.         readkey;
  182.       End;
  183.     if upcase(su)='C' then
  184.       Begin
  185.         b:=2;
  186.         SetColor(white);
  187.         Line(200,240,240,240);
  188.         Arc(240,235,0,90,5);
  189.         Arc(240,235,360,270,5);
  190.         Line(220,230,255,230);
  191.         Arc(255,225,0,90,5);
  192.         Arc(255,225,360,270,5);
  193.         Line(220,220,270,220);
  194.         Arc(270,215,0,90,5);
  195.         Arc(270,215,360,270,5);
  196.         Line(220,210,270,210);
  197.         Arc(255,205,0,90,5);
  198.         Arc(255,205,260,270,5);
  199.         Line(220,200,255,200);
  200.         Arc(230,195,0,90,5);
  201.         Arc(230,195,360,270,5);
  202.         Line(200,190,230,190);
  203.         readkey;
  204.       End;
  205.     if upcase(su)='F' then
  206.       Begin
  207.         b:=3;
  208.         SetColor(white);
  209.         Line(200,240,240,240);
  210.         Arc(240,235,0,90,5);
  211.         Arc(240,235,360,270,5);
  212.         Line(220,230,240,230);
  213.         Arc(240,225,360,270,5);
  214.         Line(220,220,260,225);
  215.         Arc(260,220,0,81,5);
  216.         Arc(260,220,360,261,5);
  217.         Line(220,210,260,215);
  218.         Arc(255,205,0,90,5);
  219.         Arc(255,205,360,270,5);
  220.         Line(220,200,255,200);
  221.         Line(220,210,255,210);
  222.         Arc(230,195,0,90,5);
  223.         Line(235,195,235,200);
  224.         Line(200,190,230,190);
  225.         readkey;
  226.       End;
  227.     a:=random(3)+1;
  228.       if a=1 then
  229.         Begin
  230.           SetColor(white);
  231.           (*sasso pc*)
  232.           (*pollice*)
  233.           Line(330,190,360,190);
  234.           Line(325,195,325,200);
  235.           Arc(330,195,90,180,5);
  236.           (*indice*)
  237.           Line(320,200,340,200);
  238.           Arc(320,205,90,270,5);
  239.           (*medio*)
  240.           Line(320,210,340,210);
  241.           Arc(320,215,90,270,5);
  242.           (*annulare*)
  243.           Line(320,220,340,220);
  244.           Arc(320,225,90,270,5);
  245.           (*mignolo*)
  246.           Line(320,230,340,230);
  247.           Arc(320,235,90,270,5);
  248.           Line(320,240,360,240);
  249.           readkey;
  250.           readkey;
  251.         End
  252.              else
  253.       if a=2 then
  254.         Begin
  255.           SetColor(white);
  256.           (*carta pc*)
  257.           (*pollice*)
  258.           Arc(340,195,270,90,5);
  259.           Line(340,190,370,190);
  260.           (*indice*)
  261.           Line(315,200,350,200);
  262.           Arc(315,205,90,270,5);
  263.           (*medio*)
  264.           Line(300,210,350,210);
  265.           Arc(300,215,90,270,5);
  266.           Line(300,220,350,220);
  267.           (*annulare*)
  268.           Arc(315,225,90,270,5);
  269.           Line(315,230,350,230);
  270.           (*mignolo*)
  271.           Arc(340,235,90,270,5);
  272.           Line(340,240,370,240);
  273.           readkey;
  274.           readkey;
  275.         End
  276.              else
  277.       if a=3 then
  278.         Begin
  279.           SetColor(white);
  280.           (*pollice*)
  281.           Arc(330,195,180,90,5);
  282.           Line(325,195,325,200);
  283.           Line(330,190,360,190);
  284.           (*indice*)
  285.           Line(305,200,335,200);
  286.           Arc(305,205,90,270,5);
  287.           Line(305,210,335,210);
  288.           (*medio*)
  289.           Line(335,210,295,215);
  290.           Arc(295,220,99,279,5);
  291.           Line(295,225,335,220);
  292.           (*annulare*)
  293.           Line(315,230,335,230);
  294.           Arc(315,225,270,180,5);
  295.           (*mignolo*)
  296.           Line(315,240,360,240);
  297.           Arc(315,235,90,270,5);
  298.           readkey;
  299.           readkey;
  300.         End;
  301.     clrscr;
  302.     writeln('tu hai giocato [',su,'] e il pc [',sc[a],']');
  303.     if a=b then
  304.       Begin
  305.         writeln('Pareggio');
  306.         pulisci;
  307.       End
  308.            else
  309.     if (a=1) and (b=2) then
  310.       Begin
  311.         writeln('Hai vinto');
  312.         SetColor(black);
  313.         OutTextXY(20,30,stut);
  314.         puut:=puut+1;
  315.         str(puut,stut);
  316.         SetColor(white);
  317.         OutTextXY(20,30,stut);
  318.         pulisci;
  319.       End
  320.                        else
  321.     if (a=1) and (b=3) then
  322.       Begin
  323.         writeln('Hai perso');
  324.         SetColor(black);
  325.         OutTextXY(60,30,stpc);
  326.         pupc:=pupc+1;
  327.         str(pupc,stpc);
  328.         SetColor(white);
  329.         OutTextXY(60,30,stpc);
  330.         pulisci;
  331.       End
  332.                        else
  333.     if (a=2) and (b=3) then
  334.       Begin
  335.         writeln('Hai vinto');
  336.         SetColor(black);
  337.         OutTextXY(20,30,stut);
  338.         puut:=puut+1;
  339.         str(puut,stut);
  340.         SetColor(white);
  341.         OutTextXY(20,30,stut);
  342.         pulisci;
  343.       End
  344.                        else
  345.     if (a=2) and (b=1) then
  346.       Begin
  347.         writeln('Hai perso');
  348.         SetColor(black);
  349.         OutTextXY(60,30,stpc);
  350.         pupc:=pupc+1;
  351.         str(pupc,stpc);
  352.         SetColor(white);
  353.         OutTextXY(60,30,stpc);
  354.         pulisci;
  355.       End
  356.                        else
  357.     if (a=3) and (b=1) then
  358.       Begin
  359.         writeln('Hai vinto');
  360.         SetColor(black);
  361.         OutTextXY(20,30,stut);
  362.         puut:=puut+1;
  363.         str(puut,stut);
  364.         SetColor(white);
  365.         OutTextXY(20,30,stut);
  366.         pulisci;
  367.       End
  368.                        else
  369.     if (a=3) and (b=2) then
  370.       Begin
  371.         writeln('Hai perso');
  372.         SetColor(black);
  373.         OutTextXY(60,30,stpc);
  374.         pupc:=pupc+1;
  375.         str(pupc,stpc);
  376.         SetColor(white);
  377.         OutTextXY(60,30,stpc);
  378.         pulisci;
  379.       End;
  380.     writeln('il punteggio attuale è di: ');
  381.     writeln('PC     TU');
  382.     writeln(' ',pupc,'     ',puut);
  383.     readkey;
  384.     readkey;
  385.   until (puut=3) or (pupc=3);
  386.   if puut=3 then
  387.     Begin
  388.     writeln('hai vinto');
  389.     SetColor(black);
  390.     str(puut,stut);
  391.     str(pupc,stpc);
  392.     OutTextXY(20,30,stut);
  393.     OutTextXY(60,30,stpc);
  394.     End
  395.             else
  396.     writeln('hai perso');
  397.     SetColor(black);
  398.     str(puut,stut);
  399.     str(pupc,stpc);
  400.     OutTextXY(20,30,stut);
  401.     OutTextXY(60,30,stpc);
  402. End;
  403.  
  404. Begin
  405.   inizio;
  406.   repeat
  407.     gioco;
  408.     readkey;
  409.     writeln('vuoi rigiocare?');
  410.     readln(risp);
  411.   until upcase(risp)='N';
  412.   closegraph;
  413. End.


Ultima modifica effettuata da luca95 il 07/10/2011 alle 14:46
PM Quote
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 15:25
Venerdì, 07/10/2011
Lo potresti allegare in formato -.zip al prossimo post?

PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 15:26
Venerdì, 07/10/2011
Prima miglioria da applicare:
Cancella tutte le linee di codice doppio !!
Non è possibile che nel caso tu debba modificare il mignolo di una tua immagine devi andarlo a cercare in 2-3 posti diversi del sorgente, oppure nel check del risultato hai codice duplicato e inutile

Seconda miglioria da applicare:
Usa delle costanti e tipi il sorgente resta più leggibile:
es:
tpPunto = (tpCarta, tpForbici, tpSasso);
CS_CARTA='S';
....

Usa delle variabili "parlanti" a,b ?? cosa sono ???

Il tutto ovviamente è un parere personale...
G.



Ibis redibis non morieris in bello
PM Quote
Avatar
luca95 (Normal User)
Rookie


Messaggi: 47
Iscritto: 20/02/2011

Segnala al moderatore
Postato alle 20:33
Venerdì, 07/10/2011
ok grazie goblin ci provo e loryea cosa te ne fai di un file zip il codice è li mi servono dei consigli...

PM Quote
Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 21:13
Venerdì, 07/10/2011
Bado all'aspetto estetico del programma, quindi lo volevo scaricare con un IDE e vederlo. Ma comunque sono riuscito a copiare il tuo codice e a incollarlo sul mio IDE ed ecco i miei due suggerimenti:

Iniziare con il titolo del gioco, non con "questo é un..."

Hai scritto "...quando ti sarò..." ansiché "...quando ti sarai..." nella parte introduttiva.

Ti consiglio di aprire la grafica solo dopo la parte introduttiva e, se ci metti un po' di impegno per fare una cosa un po' più figia, di aprire e chiudere la grafica automaticamente con
Codice sorgente - presumibilmente Plain Text

  1. Gd:=detect; Initgraph(GD,GM,'C: bla,bla,bla');

e
Codice sorgente - presumibilmente Plain Text

  1. Closegraph

.

Riguardo ai disegni, non per fare il precisino, senza offesa, già così vanno benissimo, giusto per migliorarli un po':

Accorciare di qualche pixel il medio quando il giocatore o il pc usa Carta.

Accorciare l'anulare e il mignolo di qualche pixel in Forbici (il medio é fantastico però, complimenti!)

Accorcire tutte le dita nel sasso.

In generale, sempre se hai tempo, ti consiglio di fare unghie e prosecuzione del polso.



Spero di esserti stato utile.


PM Quote