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
C/C++ - Esercizio: gioco della dama
Forum - C/C++ - Esercizio: gioco della dama - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 17:03
Martedì, 28/04/2009
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define CASELLE 8
  5.  
  6. int main() {
  7.  
  8.         char damiera[CASELLE][CASELLE] = {
  9.                         {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  10.                         {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  11.                         {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  12.                         {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  13.                         {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  14.                         {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  15.                         {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  16.                         {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  17.                         };
  18.         int i;
  19.         int iOr;
  20.         int iVe;
  21.         int oriz;
  22.         int vert;
  23.         char orizLet;
  24.         char orizLet2;
  25.  
  26.         srand( time( NULL ) );
  27.         i = 0;
  28.  
  29.         while( i < 5 ) {
  30.                 vert = rand() % CASELLE;
  31.                 oriz = rand() % CASELLE;
  32.  
  33.         switch( oriz ) {
  34.  
  35.                 case 0:
  36.                         orizLet = 'A';
  37.                         break;
  38.  
  39.                 case 1:
  40.                         orizLet = 'B';
  41.                         break;
  42.  
  43.                 case 2:
  44.                         orizLet = 'C';
  45.                         break;
  46.  
  47.                 case 3:
  48.                         orizLet = 'D';
  49.                         break;
  50.  
  51.                 case 4:
  52.                         orizLet = 'E';
  53.                         break;
  54.  
  55.                 case 5:
  56.                         orizLet = 'F';
  57.                         break;
  58.  
  59.                 case 6:
  60.                         orizLet = 'G';
  61.                         break;
  62.  
  63.                 case 7:
  64.                         orizLet = 'H';
  65.                         break;
  66.         }
  67.  
  68.                 if( damiera[vert][oriz] == 'X' ) {
  69.                         i++;
  70.                         damiera[vert][oriz] = 'N';                             
  71.                                 }
  72.  
  73.                 while( iOr < 8 || iOr > 1 || iVe < 8 || iVe > 1 ) {
  74.                         iOr++;
  75.                         iVe++;
  76.                
  77.                         switch( iOr ) {
  78.  
  79.                                 case 0:
  80.                                         orizLet2 = 'A';
  81.                                         break;
  82.                
  83.                                 case 1:
  84.                                         orizLet2 = 'B';
  85.                                         break;
  86.  
  87.                                 case 2:
  88.                                         orizLet2 = 'C';
  89.                                         break;
  90.  
  91.                                 case 3:
  92.                                         orizLet2 = 'D';
  93.                                         break;
  94.  
  95.                                 case 4:
  96.                                         orizLet2 = 'E';
  97.                                         break;
  98.  
  99.                                 case 5:
  100.                                         orizLet2 = 'F';
  101.                                         break;
  102.  
  103.                                 case 6:
  104.                                         orizLet2 = 'G';
  105.                                         break;
  106.  
  107.                                 case 7:
  108.                                         orizLet2 = 'H';
  109.                                         break;
  110.                
  111.                         if( damiera[iVe][iOr] == 'N' ) {
  112.                                 printf("%c%d può mangiare %c%d\n", orizLet, vert, orizLet2, iVe);
  113.                 }      
  114.  
  115.         }
  116.  
  117.         i = 0;
  118.  
  119.         while( i < 5 ) {
  120.                 vert = rand() % CASELLE;
  121.                 oriz = rand() % CASELLE;
  122.  
  123.         switch( oriz ) {
  124.  
  125.                 case 0:
  126.                         orizLet = 'A';
  127.                         break;
  128.  
  129.                 case 1:
  130.                         orizLet = 'B';
  131.                         break;
  132.  
  133.                 case 2:
  134.                         orizLet = 'C';
  135.                         break;
  136.  
  137.                 case 3:
  138.                         orizLet = 'D';
  139.                         break;
  140.  
  141.                 case 4:
  142.                         orizLet = 'E';
  143.                         break;
  144.  
  145.                 case 5:
  146.                         orizLet = 'F';
  147.                         break;
  148.  
  149.                 case 6:
  150.                         orizLet = 'G';
  151.                         break;
  152.  
  153.                 case 7:
  154.                         orizLet = 'H';
  155.                         break;
  156.                
  157.         }
  158.  
  159.                 if( damiera[vert][oriz] == 'X' ) {
  160.                         i++;
  161.                         damiera[vert][oriz] = 'B';                             
  162.                                 }
  163.  
  164.                 while( iOr < 8 || iOr > 1 || iVe < 8 || iVe > 1 ) {
  165.                         iOr++;
  166.                         iVe++;
  167.                
  168.                         switch( iOr ) {
  169.  
  170.                                 case 0:
  171.                                         orizLet2 = 'A';
  172.                                         break;
  173.                
  174.                                 case 1:
  175.                                         orizLet2 = 'B';
  176.                                         break;
  177.  
  178.                                 case 2:
  179.                                         orizLet2 = 'C';
  180.                                         break;
  181.  
  182.                                 case 3:
  183.                                         orizLet2 = 'D';
  184.                                         break;
  185.  
  186.                                 case 4:
  187.                                         orizLet2 = 'E';
  188.                                         break;
  189.  
  190.                                 case 5:
  191.                                         orizLet2 = 'F';
  192.                                         break;
  193.                                 case 6:
  194.                                         orizLet2 = 'G';
  195.                                         break;
  196.  
  197.                                 case 7:
  198.                                         orizLet2 = 'H';
  199.                                         break;
  200.                
  201.                         if( damiera[iVe][iOr] == 'N' ) {
  202.                                 printf("%c%d può mangiare %c%d\n", orizLet, vert, orizLet2, iVe);
  203.                 }      
  204.         }
  205. }
  206. }
  207. }
  208. }
  209. }



prova questo codice, ho compilato e non ho nemmeno eseguito, fai te adesso che hai la base.

PM Quote
Avatar
alexxandro84 (Normal User)
Newbie


Messaggi: 10
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 17:12
Martedì, 28/04/2009
grazie mille davvero!

cmq ho copiato il codice, ho fatto COMPILE e...nessun errore!!!!

ho fatto BUILD e...nessun errore!!!

ho fatto EXECUTE PROGRAM e....mi esce la finestra nera e basta. Ho anche notato che quando premo sulla x per chiudere la finestra per attimo riesco a vedere che esce la scritta "premi un tasto per continuare"


e un'altra cosa, questo:
Codice sorgente - presumibilmente C/C++

  1. int main() {
  2.  
  3.     char damiera[CASELLE][CASELLE] = {
  4.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  5.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  6.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  7.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  8.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  9.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  10.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  11.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  12.             };


non indica che c'è la casella bianca in basso a sinistra, mentre il testo dell'esercizio dice il contrario, cioè casella nera in basso a sinistra...quindi le pedine si muovono sulle caselle nere, cioè quelle con la X

Ultima modifica effettuata da alexxandro84 il 28/04/2009 alle 17:26
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 18:30
Martedì, 28/04/2009
sai, forse quell'errore è perchè deve elaborare un po' di roba il programma, comunque se non fosse quello io adesso non ho tempo per trovare eventuali errori, guarda un po' te se trovi qualcosa di sbagliato. se le caselle sono sbagliate cambiale te, io ho fatto a caso le X

Ultima modifica effettuata da gio97 il 28/04/2009 alle 18:32
PM Quote
Avatar
alexxandro84 (Normal User)
Newbie


Messaggi: 10
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:36
Martedì, 28/04/2009
quindi riguardo alle x nella tabella, mi basta scambiare solo le caselle qui?

da così:
Codice sorgente - presumibilmente C/C++

  1. int main() {
  2.  
  3.     char damiera[CASELLE][CASELLE] = {
  4.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  5.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  6.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  7.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  8.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  9.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  10.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  11.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  12.             };



a così:
Codice sorgente - presumibilmente C/C++

  1. int main() {
  2.  
  3.     char damiera[CASELLE][CASELLE] = {
  4.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  5.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  6.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  7.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  8.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  9.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  10.             {' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X'},
  11.             {'X', ' ', 'X', ' ', 'X', ' ', 'X', ' '},
  12.             };


Ultima modifica effettuata da alexxandro84 il 28/04/2009 alle 18:40
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 18:39
Martedì, 28/04/2009
sisi, perché il programma è del tutto indifferente a come è fatta la matrice.

PM Quote
Avatar
alexxandro84 (Normal User)
Newbie


Messaggi: 10
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:42
Martedì, 28/04/2009
ok allora vedo se riesco a risolvere l'altro problema....se avesse avuto errori segalati dal programma, avrei saputo dove mettere le mani...così è più complicato, non da errori ma quando lo eseguo da schermo nero


ora vedo un pò

PM Quote
Avatar
alexxandro84 (Normal User)
Newbie


Messaggi: 10
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 13:00
Mercoledì, 29/04/2009
non riesco a capire dove sia il problema.....il fatto è che quando compilo, non da nessun errore, allora è ancora più difficile capire cosa provoca questo problema: quando eseguo esce la schermata nera e non fa niente...ho anche atteso un bel pò, forse perchè come dicevi tu ci voleva del tempo a caricare, ma niente, sempre schermata nera

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 15:02
Mercoledì, 29/04/2009
Testo quotato

Postato originariamente da gio97:

[...]

prova questo codice, ho compilato e non ho nemmeno eseguito, fai te adesso che hai la base.



Salve,

ho dato una scorsa al codice e ho notato alcune cose:

1) ci sono alcune variabili che non sono inizializzate ( iVe,iOr, e forse anche altre )

2) non ho approfondito l'analisi degli switch, ma per vedere se si puo' mangiare io agirei cosi':

- cons. (X1,Y1) e (X2,Y2) le posizioni delle pedine, si ha:

a) X1 - X2 = Y1 - Y2 ==> sono sulla stessa diagonale NO <-> SE
b) X1 + Y1 = X2 + Y2 ==> sono sulla stessa diagonale NE <-> SO
c) abs(Y1 - Y2) = 1  ==> sono su due traverse adiacenti.

mi sembra lievemente piu' pratico no? ;)

Ciao! :k:

Luigi

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo