[C++,Allegro] Kolko i krzyzyk, program zawiesza sie


(Mskrzypecki) #1

Witam.

Jestem totalnym laikiem i nie mam koncepcji gdzie lezy blad (pewnie nie jeden).

Otoz program kompiluje sie i uruchamia poprawnie na jednym komputerze, a na wszystkich innych do ktorych mam dostep winda zglasza ze program przestal dzialac i nastapi jego zakoncznie. Czy ktos ma jakies pomysly ? Z gory dzieki za pomoc.

#include 

#include 

using namespace std;

int kolko (int x,int y); //f rysujaca kolka

int krzyzyk (int x,int y); //f rysujaca krzyzyki

int gracz1(); //f - ruchy gracza 1

int gracz2(); //f - ruchy gracza 2

int sprawdz(int x); // f sprawdzajaca i wyswietlajaca wynik

int wynik=0;

int z=0;

int i=1;

char p; //zmienna pomocnicza do porownywania

char log[9]; //historia naciskanych klawiszy

bool wynikg[2][9]; 

int main()

{ 

  allegro_init();

  install_keyboard();

  set_color_depth(16);

  set_gfx_mode(GFX_AUTODETECT_WINDOWED,600,800,0,0);

  clear_to_color(screen, makecol(128,128,128));

  hline(screen, 0, 400, 600, makecol(255,255,255));

  hline(screen, 0, 200, 600, makecol(255,255,255));

  hline(screen, 0, 600, 600, makecol(255,255,255));

  vline(screen, 200, 0, 600, makecol(255,255,255));

  vline(screen, 400, 0, 600, makecol(255,255,255));


while(!key[KEY_ESC] && wynik<1){


      p=readkey();      


      for(int i=0; i
          if (p==log[i]) {textprintf(screen,font,20,690,makecol(255,255,128),"Ruch nie dozwolony");

          i=-1;

          p=readkey();}

          }

      log[z]=p; 

      ::z++;

      gracz1();


      wynik=sprawdz(0);

      if (wynik>0) continue;

      textprintf(screen,font,20,650,makecol(255,255,128),"Ruch gracza 2");

      p=readkey();


      for(int i=0; i
          if (p==log[i]) {textprintf(screen,font,20,690,makecol(255,255,128),"Ruch nie dozwolony");

          i=-1;

          p=readkey();}

          }

      log[z]=p; 

      ::z++;

      gracz2();

      wynik=sprawdz(1);

      };  


readkey();

allegro_exit();

// system("pause");


 return 0;

} 

END_OF_MAIN(); 

//------------------------------------------------------------------------------

int gracz1(){

  if (key [KEY_1_PAD]) {

          kolko(100,500);

          wynikg[0][0] = true;}

  if (key [KEY_2_PAD]) {

          kolko(300,500);

          wynikg[0][1] = true;}

  if (key [KEY_3_PAD]) {

          kolko(500,500);

          wynikg[0][2] = true;}

  if (key [KEY_4_PAD]) {

          kolko(100,300);

          wynikg[0][3] = true;}

  if (key [KEY_5_PAD]) {

          kolko(300,300);

          wynikg[0][4] = true;}

  if (key [KEY_6_PAD]) {

          kolko(500,300);

          wynikg[0][5] = true;}

  if (key [KEY_7_PAD]) {

          kolko(100,100);

          wynikg[0][6] = true;}

  if (key [KEY_8_PAD]) {

          kolko(300,100);

          wynikg[0][7] = true;}

  if (key [KEY_9_PAD]) {

          kolko(500,100);

          wynikg[0][8] = true;}

}

int gracz2(){

  if (key [KEY_1_PAD]) {

          krzyzyk(0,400);

          wynikg[1][0] = true;}

  if (key [KEY_2_PAD]) {

          krzyzyk(200,400);

          wynikg[1][1] = true;}

  if (key [KEY_3_PAD]) {

          krzyzyk(400,400);

          wynikg[1][2] = true;}

  if (key [KEY_4_PAD]) {

          krzyzyk(000,200);

          wynikg[1][3] = true;}

  if (key [KEY_5_PAD]) {

          krzyzyk(200,200);

          wynikg[1][4] = true;}

  if (key [KEY_6_PAD]) {

          krzyzyk(400,200);

          wynikg[1][5] = true;}

  if (key [KEY_7_PAD]) {

          krzyzyk(0,0);

          wynikg[1][6] = true;}

  if (key [KEY_8_PAD]) {

          krzyzyk(200,0);

          wynikg[1][7] = true;}

  if (key [KEY_9_PAD]) {

          krzyzyk(400,0);

          wynikg[1][8] = true;}

}


int kolko (int x, int y){

  circle(screen, x, y,50, makecol(255,0,0));

  rest(2);

}

int krzyzyk (int x, int y){

  line( screen,x,y,x+200,y+200, makecol(0,255,0));

  line( screen,x,y+200,x+200,y, makecol(0,255,0));

  rest(2);

}

int sprawdz(int x){

    if (wynikg[x][0]&&wynikg[x][1]&&wynikg[x][2]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][3]&&wynikg[x][4]&&wynikg[x][5]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][6]&&wynikg[x][7]&&wynikg[x][8]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][0]&&wynikg[x][4]&&wynikg[x][9]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][2]&&wynikg[x][4]&&wynikg[x][6]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWI! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][0]&&wynikg[x][3]&&wynikg[x][6]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BARWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][1]&&wynikg[x][4]&&wynikg[x][7]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    if (wynikg[x][2]&&wynikg[x][5]&&wynikg[x][8]==true ) {textprintf(screen,font,20,690,makecol(255,255,128),"BRAWO! WYGRYWA Gracz %d",x+1);

    return x+1;}

    else return 0;

}

([alex]) #2

Na inne komputery musisz przekazywać razem z allegro.dll

Który może się znajdować w tym samym folderze co gra lub też w jakimś folderze systemowym.


(Mskrzypecki) #3

No ok, ale jesli na kilku innych kompach mam zainstalowane dev-c++, dorzucone allegro i po kompilacji, gdy daje run - program sie zawiesza, to chyba nie jest z tym zwiazane… chyba ze sie nie zrozumielismy.


([alex]) #4

No chyba że na tych innych niepoprawnie zainstalowano allegro, czyli bez DLL


(Mskrzypecki) #5

Dla swietego spokoju upewnilem sie, allegro jest poprawnie zainstalowane.


([alex]) #6

Ciekawe w jaki sposób to zrobiłeś?


(Mskrzypecki) #7

Odinstalowalem i po czym recznie pousuwalem pozostalosci po dev-c++ i allegro, zainstalowalem ponownie dev c i allegro na 2 kompach, z czego na jednym dziala a na drugim nadal nie.


([alex]) #8

Więc to twoje " pousowanie" nie było zbyt dokładne.

Na tym na którym nie działa dodaj plik allegro.dll do folderu w którym masz źródła programu.

allegro.dll weź z tego komputera na którym to działa, wtedy dopiero będziesz mieć pewność.


(Mskrzypecki) #9

Dobra rozwiazalem problem, ktory byl totalnie prymitywny jak sie okazalo…

set_gfx_mode(GFX_AUTODETECT_WINDOWED,600,800,0,0);

Parametry okna przekraczaly rozdzielczosc ekranu w pionie… (1366/768).

Po zmienie na 600,600 wszystko chodzi ok.