Zakończenie gry w momencie przyciśnięcia klawisza ESC

0

Witam posiadam taki kod robię sobie grę.

#include <graphics.h>
#include <stdio.h>
#include <windows.h>
#include <time.h>
void ekranpowitalny()

{   int szerokosctext, znak, i;
    char bla;

    setcolor(DARKGRAY);
    setbkcolor(DARKGRAY);

    settextstyle(GOTHIC_FONT,HORIZ_DIR,1.35);
    rectangle(1,1,getmaxx(),getmaxy());
    setfillstyle(SOLID_FILL,DARKGRAY);
    floodfill(100,100,DARKGRAY);

    setcolor(BLACK);

    szerokosctext=textwidth("Kalinowski Sebastian, grupa 3")/2;
    outtextxy(800-szerokosctext,350,"Kalinowski Sebastian, grupa 3");
    szerokosctext=textwidth("GRA MIJANIE PRZESZKOD")/2;
    outtextxy(800-szerokosctext,390,"GRA MIJANIE PRZESZKOD");
    szerokosctext=textwidth("WYBIERZ POZIOM TRUDNOSCI")/2;
    outtextxy(800-szerokosctext,430,"WYBIERZ POZIOM TRUDNOSCI");
    szerokosctext=textwidth("WCISNIJ 1 - latwy 2 - trudny")/2;
    outtextxy(800-szerokosctext,470,"WCISNIJ 1 - latwy 2 - trudny");
}

void logo (int x, int y)
{
    int wspolrzedne[20]= {65+x,94+y,100+x,93+y,112+x,59+y,123+x,94+y,158+x,94+y,130+x,114+y,141+x,149+y,112+x,118+y,83+x,148+y,93+x,115+y};
    setfillstyle(SOLID_FILL,YELLOW);
    setcolor(YELLOW);
    fillpoly(10,wspolrzedne);
}

void przeszkoda (int x, int y)
{
    int wspolrzedne[8]= {550+x,-110+y,680+x,-110+y,680+x,0+y,550+x,0+y};
    setfillstyle(SOLID_FILL,RED);
    setcolor(RED);
    fillpoly(4,wspolrzedne);
}



void kwadrat (int x, int kolor)
{
    setcolor(kolor);
    setfillstyle (SOLID_FILL, kolor);
    rectangle(550+x,550, 680+x,750);
    floodfill(550+1+x,550+1,kolor);
}

void car (int x, int y, int kolor, int klawisz)
{
    if(klawisz == 77) {
    kwadrat(x,YELLOW);
    }
    if(klawisz==  75) {
    kwadrat(x,YELLOW);
    }

}


void narysuj_pas(int y,int kolor)
{
    int tablica[8] = {795,y, 805,y, 805,y+60, 795,y+60};
    setcolor(kolor);
    setfillstyle (SOLID_FILL, kolor);
    fillpoly(4,tablica);
}
void pasy(int y, int kolor)
{
    int punkty[5] = { y, y+240, y+480, y+720, y+960 };
    for(int k=0; k<5; k++)
    {
        narysuj_pas(punkty[k], kolor);
    }
}
void tlo(void)
{

    setcolor(GREEN);
    setfillstyle(SOLID_FILL,GREEN);
    rectangle(0,0,450,getmaxy());
    floodfill(0+1,0+1,GREEN);
    rectangle(1141,0,getmaxx(),getmaxy());
    floodfill(1141+1,0+1,GREEN);
}
int main()
{   srand(time(NULL));
    int wsp=0,  klawiatura, spadek, zmiennaodx, wyniklosowania;
    int kwadrat_x=0;
    char znak;
    spadek=0;
    zmiennaodx=0;
    initwindow(getmaxwidth(), getmaxheight());
    setactivepage(1);
    setvisualpage(2);
    ekranpowitalny();
    logo(670,600);//malowanie loga
    swapbuffers();
        do{

        znak = getch();
        if(znak == 49) spadek = spadek+1;
        if(znak == 50) spadek = spadek+200;
        }while(znak!=49 && znak!=50);
    cleardevice();


    do
    {
      tlo();
      pasy(wsp,WHITE);
      spadek=spadek+15;
      przeszkoda(zmiennaodx,spadek);
      if(spadek>=getmaxy()+150)
      {
          spadek =0;
          wyniklosowania = (rand() %2)+1;
          if(wyniklosowania==1) zmiennaodx=0;
          else zmiennaodx=350;

      }
      if(wsp>=getmaxheight()/5) wsp = -30;
      wsp=wsp+10;
      delay(30);

      if(kbhit())
      {
          klawiatura = getch();
          if(klawiatura == 0 || klawiatura == 224) klawiatura = getch();
          if(kwadrat_x >= -80)
             if(klawiatura == 75) kwadrat_x = kwadrat_x-20;

          if(kwadrat_x <= 450)
              if(klawiatura == 77) kwadrat_x = kwadrat_x+20;
        }
    kwadrat(kwadrat_x,YELLOW);

    swapbuffers();
    cleardevice();

    } while(1);
    getch();
}
 

Nie wiem jak zrobić by gra zakończyła się w momencie przyciśnięcia klawisza ESC oraz nie działa mi opcja wyboru trudności gry.

0

Chcesz zrobić tak, żeby naciśnięcie w dowolnym momencie klaiwsza ESC konczyło grę?

0

Dokładnie tak. Jeśli mógłbyś sprawdzić czemu nie działa mi ta funkcja

 znak = getch();
        if(znak == 49) spadek = spadek+1;
        if(znak == 50) spadek = spadek+200;
        }while(znak!=49 && znak!=50);
    cleardevice();

nie zmienai mi sie zmienna spadek

0

Raczej chodzi o

while(znak==49 || znak==50)

A co do tego ESC - ja widze tu jedynie rozwiązanie napisania oddzielnego wątku w programie, ktory bedzie czekał na ten klawisz.

0

ogólnie program działa jest menu itd. ale gdy mam kliknąć 1 łatwy poziom 2 trudny poziom to chciałbym żeby przy kliknięciu na 1 zmienna spadek nie zmieniała się bo poziom trudności ma być domyślnie łatwy. a gdy wcisnę 2 chciałbym by zmienna spadek została powiększona.

0
jeszcze_raz:
"Wybierz poziom trudnosci:
1 - łatwy
2 - trudny"
cin>>poziom_trudnosci;
switch(poziom_trudnosci)
{
case 1:
costam
case 2:
costam
default:
{
  "ee, zle, jeszcze raz";
  goto jeszcze_raz;
}
}
0

A nie da się tego zrobić tak jak ja to kombinuję ?

0

Wszystko sie da, ale źle kombinujesz. Po co wprowadzasz to do chara?

  int znak;
  do
  {
    cin>>znak;
    if(znak == 1) spadek += 1;
    if(znak == 2) spadek += 200;
  }
  while(znak!=1 && znak!=2);
  char znak;
  do
  {
    cin>>znak;
    if((int)znak == 49) spadek += 1;
    if((int)znak == 50) spadek += 200;
    cout<<(int)znak;
  }
  while((int)znak!=49 && (int)znak!=50);

Sam widzisz, po co tak kombinować.

0

ok tylko jak zaktualizować to żeby w następnej funkcji spadek miał wartość którą wybrałem wyżej

1

Albo (nienormalnie) zrobic z tego zmienną globalną albo (normalnie) przekazać jako parametr do funkcji.

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