wieszanie się programu...

0

Mam problem. Ucze sie programowac w c++ i pisze pierwsza w swoim zyciu mini-gierke. Do tej pory napisałem kod, ktory ma za zadanie narysowac plansze, po ktorej bedzie posuwal sie gracz. Kompilator wszystko mi to ładnie kompiluje lecz przy uruchamianiu widze:

"Program wykonał nieprawidłową operację... itd."

szczegóły:
MINNER spowodował błąd: nieprawidłowa strona w
module MINNER.EXE przy 015f:004011cc.
Rejestry:
EAX=0000092d CS=015f EIP=004011cc EFLGS=00010246
EBX=0041a9bc SS=0167 ESP=0065fdf0 EBP=0065fdf8
ECX=0041ab4c DS=0167 ESI=00000000 FS=46ef
EDX=00000005 ES=0167 EDI=00000000 GS=0000
Bajtów w CS
89 34 81 40 83 fa 14 7c dc 42 83 fa 0f 7e cf ba
Stos:
00415108 00550000 0065fe04 004012d1 0041a9bc 0065fe30 0041319e 00000001 006721c8 00672330 00000000 81632fdc 00550000 bffa191f 0065ff68 0040c2b4

Oto kod:

#include <conio.h>
#include <iostream.h>

class minner {         // klasa gry
    enum {way, blok, bomba, punkt}; // mozliwe pola gry
    int plansza[20][20];   // plansza do gry
    public:
    void rysuj(void);
    void instalacja(void);

             };
minner tworz_obiekt;

void minner::instalacja() {
clrscr();
int x,y;
for(x=5;x<=15;x++)
  for(y=5;y<=17;y+=6)
   plansza[x][y] = blok;   // tworze 3 pionowe bloki

for(x=0;x<=4;x++)
   for(y=0;y<20;y++)
   plansza[x][y] = way;   // tworze puste pola w pierwszych 5 liniach planszy

for(x=5; x<=15; x++) {
  for(y=0; x<20; y++) {
   if(y==5 || y==11 || y==17) continue;
   plansza[x][y] = way;                   // tworze puste pola miedzy blokami
  }
  }
  
for(x=16;x<=20;x++)
   for(y=0;y<20;y++)
   plansza[x][y] = way;   // tworze puste pola w ostatnich 4 liniach planszy
}

void minner::rysuj() {
textbackground(0);
int x,y,count,kolor;
gotoxy(1,1);
for(x=0;x<20;x++) {
  for(y=0;y<20;y++)
  {
   switch(plansza[x][y]) {
    case way: kolor=11; break;
    case blok: kolor=4; break;
    case punkt: kolor=1; break;
    case bomba: kolor=1; break;
   }

   for(count=0;count<3;count++){
   textcolor(kolor);
   cprintf("Ű");
   }
  }
  cout << endl;
}

}

main() {

tworz_obiekt.instalacja();
tworz_obiekt.rysuj();
}

Prosze o pomoc i przepraszam, ze to takie długie wyszło!

0

Sprawdź debugerem, w którym punkcie program sie wiesza. Czy na Instalacji, czy też podczas rysowania?

0

Taka mała dobra rada, ale mam nadzieję, że pożyteczna. Albo strumienie, albo printf/cprintf/fprintf/etc. znaczek końca linii to: "\n"

0

Racja Krecika, dla ułatwienia: breakpoints + step in/trace over + watches. Najprostsza, najskuteczniejsza metoda na bugi.

0

golym okiem zauwazylem dwa bledy
w pierwszym literowka wynikajaca pewnie z kopiowania
for(x=5; x<=15; x++) {
for(y=0; x<20; y++) { <----
powinno byc
for(x=5; x<=15; x++) {
for(y=0; y<20; y++) { <----

a drugi to przekroczenie wielkosci tablicy
for(x=16;x<=20;x++)<----
for(y=0;y<20;y++)
powinno byc
for(x=16;x<20;x++) <----
for(y=0;y<20;y++)

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