problem w c... tablica lub pamięć?? help me

0

siema.
słuchajcie, pisze bo juz sam nie wiem co mam robić... otóż piszę sobie grę arkanoid na bibliotece graficznej allegro w języku c, kompilator dev c++.wszystko szlo ladnie do pewnego momentu...

otóż:
mam kuleczkę, jesli znajduje sie na konkretnej pozycji x sprawdzam jej pozycję y.
pod kazdą możliwą kombinacją (cegielką) chowam sobie wartość na tablicy 7x5.
jest to 1 lub 0 czyli jest cegla lub nie.

i tu moj problem. na poczatku wypelniam tablice jedynkami. i podczas dzialania nadpisuje ja zerami i zamazuje na ekranie. wszytko ok. do momentu az nie trafia w pewne "ulubione" miejsca i nie zamazuje mi tam cegiel lub nie nadpisze tablicy. warunki są sełnione pionowo i poziomo ale nic... wszytsko przepatrzylem, nie wiem gdzie bład. instrukcje nadpisania tablicy mam zaraz obok zamazania cegly a tak jakby wykonywala sie tylko jedna.

mysle ze cos nie tak z tablicami, czy wie ktos co moze byc? probowalem zwalniac pamiec tablicy ale tez nic to nie daje.

ps: niechcialbym udostepniac kodu, jesli ktos bedzie chetny pomoc moge podeslac exe'ka.

ratunku!!!

0

Bez kodu to takie wróżenie z fusów ale ja bym sprawdził takie rzeczy jak:

  1. warunki (może jakiś IF jest niezbyt poprawny i dla danej wartości się objawia błąd)
  2. indeksowanie tablicy (może odwołujesz się do nieistniejącego elementu albo źle wyliczasz indeks)
    i tak dalej...
0

warunki sprawdzone, dla każdego poziomu i pionu takie same, różnica tylko zakresów.
indeksowanie tablicy nawet z zapasem probowalem.

jako ciekawostkę ;) dodam, że jak zmieniłem typ tablicy to wywalało mi inne "ulubione" cegły, czyli inne wartości tablicy...

0

deklaracja tablicy:

#define COL 7
#define ROW 5

   char cegly[COL][ROW];
       
 for (i=0; i<ROW; i++){
       for (j=0; j<COL; j++){
           cegly[i][j]='1';
           }
       }


**algorytm na usuwanie cegielek:
**
if (kulka_y<291){
   
   if (j==1){   
      if (kulka_y==290) p=4;
      if (kulka_y==250) p=3;
      if (kulka_y==210) p=2;
      if (kulka_y==170) p=1;
      if (kulka_y==130) p=0; 
                }
   if (j==2){ 
      if (kulka_y==250) p=4;
      if (kulka_y==210) p=3;
      if (kulka_y==170) p=2;
      if (kulka_y==130) p=1;
      if (kulka_y==90) p=0;  
                }
 

  if (kulka_x>672) h=6;
  if ((kulka_x>560)&&(kulka_x<=672)) h=5;
  if ((kulka_x>448)&&(kulka_x<=548)) h=4;
  if ((kulka_x>336)&&(kulka_x<=448)) h=3;
  if ((kulka_x>224)&&(kulka_x<=336)) h=2;
  if ((kulka_x>112)&&(kulka_x<=225)) h=1;
  if (kulka_x<=112) h=0;               
                           
          
if ((kulka_y==290) || (kulka_y==250) || (kulka_y==210) || (kulka_y==170) || (kulka_y==130) || (kulka_y==90))
         {
                    if ((cegly[h][p])!='0'){                       
                            
                            if (j==2){j=1;}else{j=2;}
                           rectfill( screen, (h*112), 90+(p*40), 112+(h*112), 130+(p*40), makecol( 0, 64, 64 ) );                           
                           koniec=koniec+1;
                           punkty=punkty+10;                         
                           cegly[h][p]='0';                         
                    }                 
          }

                    
if ((kulka_x==112) || (kulka_x==224) || (kulka_x==336) || (kulka_x==448) || (kulka_x==560) || (kulka_x==672))
         {
                    if ((cegly[h][p])!='0'){                        
                           
                           if (i==2) {i=1; g=0;} else{ i=2; g=100;} 
                           rectfill( screen, (h*112), 90+(p*40), 112+(h*112), 130+(p*40), makecol( 0, 64, 64 ) );
                           koniec=koniec+1;
                           punkty=punkty+10;                         
                           cegly[h][p]='0'; 
 
                    }               
          }   
   
}   

te wszystkie cyferki to zakres podany w pixelach. inkrementacja/dekrementacja jest co pixel wiec nic nie ginie. kulka, a dokladniej pierwszy pixel sprawdzany jest co jedno odświeżenie. ruch odbywa sie tylko po skosie.

jako kolejna rzecz, na dowod że podejrzewam tablice, to fakt ze jak zbije wszystkie cegly, (czyli koncze 1 runde). zaladuje wszystko tak samo, to inne cegly znow sa "duchami" i kulka wczesniej je zbijała a teraz je przelatuje :/

legenda:
rectfil - rysowanie prostokata na ekranie
i,j - to wektory (gora dol, lewo prawo)
koniec- zmienna od sprawdzania czy zbite jest 35 cegiel
g-rozmiar cegly dodawany do zakresu rysowania

wrzucilem program na wrzute:
http://www.przeklej.pl/plik/projekt1-exe-003b8b4b403p
jesli ktos chce zobaczyc to musi te 3 pliczki w folder wpakować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1