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
C/C++ - [RISOLTO]Non riesco a trovare l'errore in questo sorgente:
Forum - C/C++ - [RISOLTO]Non riesco a trovare l'errore in questo sorgente:

Avatar
davide95 (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/01/2010

Segnala al moderatore
Postato alle 12:08
Domenica, 10/01/2010
In questo sorgente manca una parentesi graffa, ma non riesco a capire dove.
(il sorgente fa parte di una specie di breakout che sto sviluppando con le librerie allegro)

Inoltre se avete qualche consiglio per far diventare più efficente il programma, ditemelo.

PS: Non siate duri con me :(. è il mio primo programma! (Ed è anche la prima volta che faccio parte di un forum:rotfl:)


Codice sorgente - presumibilmente C/C++

  1. // Prima ci sono le varie inizializzazioni delle variabili;
  2. // Se volete le posto
  3.     // Finche non si preme Il tasto "ESC"
  4.         while (!key[KEY_ESC]) { //1
  5.          
  6.        
  7.        /*for (i = 0, numberStone = 0; i<= STONE_NUMBER; i++)
  8.           if (block_exist[i] == 1)
  9.              numberStone++;*/
  10.              
  11.           // Codice di movimento della racchetta        
  12.        raket_vx = (key[KEY_LEFT] - key[KEY_RIGHT])* RAKET_SPEED;
  13.        raket_x += raket_vx;                    
  14.                     //Ferma la racchetta al bordo dello schermo
  15.        if ((raket_x >= 630 - (RAKET_SPEED + 3) - 55)) {//2
  16.           raket_x -= RAKET_SPEED;
  17.           }// !2
  18.        if (raket_x <= RAKET_SPEED + 3 - 10){// 2
  19.           raket_x += RAKET_SPEED;
  20.           }// !2
  21.                        
  22.  
  23.          
  24.           // Codice di movimento della palla
  25.        ball_x += ball_vx;
  26.        ball_y += ball_vy;
  27.      
  28.  
  29.          
  30.        // Controlla se la palla collide con un blocco ed esegue le azioni necessarie
  31.        for (i = 0; i <= STONE_NUMBER; i++)
  32.           if ((ball_x >= block_x[i] && ball_x <= block_x[i] +77) && (ball_y >= block_y[i] && ball_y <= block_y[i] + 17)){// 2
  33.              play_sample(stone_collision, 255,128,1000, FALSE);
  34.              if (block_exist[i]){// 3
  35.                   if (ball_y >= block_y[i] + 1 && ball_y <= block_y[i] + 14){// 4
  36.                      ball_vx = -ball_vx;
  37.                      }// !4
  38.                   else{// 4
  39.                      ball_vy = -ball_vy;
  40.                      }// !4
  41.                   if (block_exist[i] == 1) {// 4
  42.                      block_exist[i] = 0;
  43.                      }// !4
  44.                   }// 3
  45.              } // !2
  46.          
  47.              
  48.                  
  49.          
  50.           //Controlla se la palla collide con un muro ed esegue le azioni necessarie
  51.           if (ball_x <= 2||ball_x >= 634){// 2
  52.              ball_vx = -ball_vx;
  53.              play_sample(wall_collision, 255,128,1000, FALSE);
  54.              }// !2
  55.          
  56.           if (ball_y <= 2) {// 2
  57.              ball_vy = -ball_vy;
  58.              play_sample(wall_collision, 255,128,1000, FALSE);
  59.              }// !2
  60.              
  61.           // Se la palla finisce sotto...
  62.           else if (ball_y >= 474){// 2
  63.              j = 0;
  64.              if (life != 0)
  65.              life -= 1;
  66.              ball_vx = 0;
  67.              ball_vy = -4;
  68.              play_sample(dead, 255,128,1000, FALSE);}                              
  69.              ball_x = 320;
  70.              ball_y = 240;
  71.              }// !2
  72.          
  73.           //Controlla se la pallina collide con la racchetta ed esegue le azioni necessarie
  74.           if ((ball_x >= raket_x && ball_x < raket_x+ 75) && (ball_y >= raket_y && ball_y <= raket_y + 15)){// 2
  75.              play_sample(raket_collision, 255,128,1000, FALSE);
  76.              //Da alla racchetta la capacità di direzionare la palla
  77.              if (raket_vx < 0){// 3
  78.                 ball_vy = -ball_vy ;
  79.                 ball_vx += 1;}// !3
  80.              
  81.              else if (raket_vx > 0){// 3
  82.                 ball_vy = -ball_vy;
  83.                 ball_vx -= 1;
  84.                 }// !3
  85.            
  86.              else ball_vy = -ball_vy ;
  87.              }// !2
  88.  
  89.           //Codice della gestione della grafica  
  90.  
  91.           blit(background,buffer,0,0,0,0, 640,480);
  92.          
  93.          
  94.           switch (life){// 2
  95.              case 3:
  96.                 textout_ex(buffer, font, "LIFES = 3", 285, 470, 0x000000, TRUE);
  97.                 break;
  98.              case 2:
  99.                 textout_ex(buffer, font, "LIFES = 2", 285, 470, 0x000000, TRUE);
  100.                 break;
  101.              case 1:
  102.                 textout_ex(buffer, font, "LIFE = 1", 285, 470, 0x000000, TRUE);
  103.                 break;
  104.              default:
  105.                 textout_ex(buffer, font, "GAME OVER! PRESS ESC TO EXIT", 210, 470, 0x000000, TRUE);
  106.                 }// !2
  107.                            
  108.                    
  109.    if (life){// 2
  110.           // Visualizza blocchi
  111.       for (i = 0; i <= STONE_NUMBER; i++) {// 3
  112.           if (block_exist[i]==1){// 4
  113.              draw_sprite(buffer, stone1, block_x[i], block_y[i]);
  114.              }// !4
  115.           // e quelli indistruttibili
  116.           if (block_exist[i]==2) {// 4
  117.             draw_sprite(buffer, stone2, block_x[i], block_y[i]);
  118.             }// !4
  119.           draw_sprite(buffer, raket, raket_x, raket_y);
  120.           draw_sprite(buffer, ball, ball_x++, ball_y++);
  121.          }// !3
  122.       }// !2
  123.      
  124.     blit(buffer  ,screen, 0, 0, 0, 0, 640, 480);//Inserisce il buffer nello schermo, cioe' lo visualizza
  125.     vsync();
  126.     clear(buffer);
  127.     }// !1
  128.    
  129.         deinit();
  130.  
  131.         return 0;
  132. }// 0
  133. END_OF_MAIN()
  134.  
  135. void deinit() {
  136.         clear_keybuf();
  137.         destroy_sample(stone_collision);
  138.     destroy_sample(raket_collision);
  139.         destroy_sample(wall_collision);
  140.         destroy_sample(dead);
  141.         destroy_bitmap(stone1);
  142.     destroy_bitmap(stone2);
  143.     destroy_bitmap(ball);
  144.     destroy_bitmap(raket);
  145.     destroy_bitmap(background);
  146.     destroy_bitmap(buffer);    
  147.         allegro_exit();
  148. }



gli errori che mi escono sono:
332 C:\Dev-Cpp\Projects\Arkanoid\main.c previous declaration of 'deinit' was here
350 C:\Dev-Cpp\Projects\Arkanoid\main.c conflicting types for 'deinit'
332 C:\Dev-Cpp\Projects\Arkanoid\main.c previous declaration of 'deinit' was here
C:\Dev-Cpp\Projects\Arkanoid\Makefile.win [Build Error]  [main.o] Error 1

Quindi "capta" deinit come la dichiarazione di un'altra funzione, giusto:-?
quindi è stata chiusa una parentesi graffa di troppo:_doubt:
il problema è quale? Purtroppo non sono un maestro del codice leggibile. Chi mi da una mano?

i numeri come // 2 o // !2 sono commenti che segnano le relative aperture /chiusure delle parentesi graffe ( che ho invano inserito per risolvere il problema);
C'é molto altro codice
se volete ve lo posto;

Ultima modifica effettuata da davide95 il 10/01/2010 alle 16:40
PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 12:27
Domenica, 10/01/2010
Posta il sorgente completo che è meglio.
Comunque magari è un errore nel prototipo della funzione deinit. Quindi ripeto è meglio se posti il tutto così possiamo verificare bene qual'è il problema.
Ciao GuglielmoS


La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
--Isaac Asimov
PM Quote
Avatar
davide95 (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/01/2010

Segnala al moderatore
Postato alle 12:42
Domenica, 10/01/2010
Potete prenderlo da mediafire qui:
http://www.mediafire.com/?2iwnzjzmvy3
è troppo grande per metterlo tutto (circa 7-8 pagine);

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 12:49
Domenica, 10/01/2010
Testo quotato

Postato originariamente da davide95:

Potete prenderlo da mediafire qui:
http://www.mediafire.com/?2iwnzjzmvy3
è troppo grande per metterlo tutto (circa 7-8 pagine);


Io nel file scaricato ho solo questo:
Codice sorgente - presumibilmente Delphi

  1. #include <allegro.h>
  2. #include <alleggl.h>
  3.  
  4. int main() {
  5.        
  6.         /* Initialize both Allegro and AllegroGL */
  7.         allegro_init();
  8.         install_allegro_gl();
  9.        
  10.         /* Tell Allegro we want to use the keyboard */
  11.         install_keyboard();
  12.  
  13.         /* Suggest a good screen mode for OpenGL */
  14.         allegro_gl_set(AGL_Z_DEPTH, 8);
  15.         allegro_gl_set(AGL_COLOR_DEPTH, 16);
  16.         allegro_gl_set(AGL_SUGGEST, AGL_Z_DEPTH | AGL_COLOR_DEPTH);
  17.  
  18.         /* Set the graphics mode */
  19.         set_gfx_mode(GFX_OPENGL_WINDOWED, 640, 480, 0, 0);
  20.        
  21.         /* Clear the screen */
  22.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  23.  
  24.         /* Set up the view frustum */
  25.         glMatrixMode(GL_MODELVIEW);
  26.         glLoadIdentity();
  27.         glFrustum(-1.0, 1.0, -1.0, 1.0, 1, 60.0);
  28.  
  29.         /* Draw a quad using OpenGL */
  30.         glBegin(GL_QUADS);
  31.                 glColor3ub(255, 255, 255);
  32.                 glVertex3f(-1, -1, -2);
  33.                 glVertex3f( 1, -1, -2);
  34.                 glVertex3f( 1,  1, -2);
  35.                 glVertex3f(-1,  1, -2);
  36.         glEnd();
  37.        
  38.         /* Flip the backbuffer on screen */
  39.         allegro_gl_flip();
  40.        
  41.         /* Wait for the user to press a key */
  42.         readkey();
  43.        
  44.         /* Finished. */
  45.         return 0;
  46. }
  47. END_OF_MAIN();



La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
--Isaac Asimov
PM Quote
Avatar
davide95 (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/01/2010

Segnala al moderatore
Postato alle 15:07
Domenica, 10/01/2010
SCUSATE! mi sono confuso!
non è quello :_doubt: (Quello è il template per la versione in 3D)
Questo è quello giusto

SCUSATE VERAMENTE
http://www.mediafire.com/?hzjw4e0rizm

Ultima modifica effettuata da davide95 il 10/01/2010 alle 15:08
PM Quote
Avatar
davide95 (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/01/2010

Segnala al moderatore
Postato alle 16:39
Domenica, 10/01/2010
Dopo aver saltato il pranzo per cercarlo, ho trovato l'errore:

alla linea 271 (del secondo codice sorgente)

Codice sorgente - presumibilmente C/C++

  1. else if (ball_y >= 474){// 2
  2.              j = 0;
  3.              if (life != 0)
  4.              life -= 1;
  5.              ball_vx = 0;
  6.              ball_vy = -4;
  7.              play_sample(dead, 255,128,1000, FALSE);}//Questa è la paretesi di troppo
  8.                                                      // Essa Chiude l'"IF" ma...
  9.              ball_x = 320;
  10.              ball_y = 240;
  11.              }//...dovrebbe farlo questa. Naturalmente chiude anche il
  12.               //  ciclo in cui è inclusa la generando poi i conseguenti errori;



Il mio programma deve solo essere perfezionato in qualche punto, ma l'ho quasi finito:
:love: Il primo programma non si scorda mai!:rofl::rofl:

Grazie mille per l'aiuto;:hail::hail:

Ultima modifica effettuata da davide95 il 10/01/2010 alle 16:41
PM Quote