Witam mam pytanie , otóż chciałbym zrobić aby po kliknięciu któregoś klawisza wrócić do menu gry.
// main.cpp
#include <iostream> // biblioteka wejscia / wyjscia
#include "pilka.h" // dyrektywa #include załącza plik nagłówkowy "pilka.h"
#include "paletka.h" // dyrektywa #include załącza plik nagłówkowy "paletka.h"
#include "menedzer.h" // dyrektywa #include załącza plik nagłówkowy "menedzer.h"
#include "gra.h"
using namespace std; // użycie przestrzeni nazw "std"
int main()
{
Gra g1;
g1.uruchomGre();
return 0;
}
//gra.h
#include <iostream>
#include "pilka.h" // dyrektywa #include załącza plik nagłówkowy "pilka.h"
#include "paletka.h" // dyrektywa #include załącza plik nagłówkowy "paletka.h"
#include "menedzer.h" // dyrektywa #include załącza plik nagłówkowy "menedzer.h"
using namespace std;
class Gra
{
public:
Gra();
enum opcje{MENU = 0 , GRA = 1 , USTAWIENIA = 2 , KONIEC = 3 , OUT};
void uruchomGre();
opcje stangry;
private:
int wybranaopcja = 0;
char znak;
void menu();
void czysc();
};
//gra.cpp
#include "iostream"
#include "gra.h"
#include "conio.h"
#include "windows.h"
using namespace std;
Gra::Gra()
{
stangry = MENU;
}
void Gra::uruchomGre()
{
while(stangry != KONIEC)
{
switch(stangry)
{
case MENU:
menu();
break;
case GRA:
Menedzer m1(40 , 20);
m1.start();
break;
}
}
}
void Gra::menu()
{
while(stangry == MENU)
{
while( wybranaopcja != 3 ) // jeżeli zmienna "wybranaopcja" jest różna od 3 (menu posiada tylko 3 opcje)
{
czysc();
if( wybranaopcja == 0 ) cout << "-->Graj\n"; // opcje menu
else cout << "Graj \n"; // przy przejściu do następnej opcji
if( wybranaopcja == 1 ) cout << "-->Ustawienia\n"; // pokazuje się "-->"
else cout << "Ustawienia \n";
if( wybranaopcja == 2 ) cout << "-->Wyjdz\n"; // -//-
else cout << "Wyjdz \n";
znak = getch(); // odczytuje kod wciśniętego klawisza klawiatury i przechowuje go w zmiennej "znak"
switch( znak )
{
case 72: // jeżeli wciśniemy strzałkę w górę "kod ASCII = 72"
wybranaopcja--; // opcja menu zmniejsza się
break;
case 80:
wybranaopcja++; // jeżeli wciśniemy strzałkę w dół "kod ASCII = 80"
break; // opcja menu zwiększa się
}
if(wybranaopcja > 2 ) wybranaopcja--; // jeżeli wybrana opcja jest > 2 to zmniejsz wartość zmiennej "wybranaopcja"
if(wybranaopcja < 0) wybranaopcja++; // jeżeli wybrana opcja jest < 0 to zwiększ wartość zmiennej "wybranaopcja"
if(wybranaopcja == 0 && znak == 13) // jeżeli opcja == 0 ( Play ) i wciśniemy klawisz "Enter"
{
stangry = GRA; // wyjdź z menu (przejście do gry)
break;
}
if(wybranaopcja == 1 && znak == 13) // jeżeli opcja == 0 ( Play ) i wciśniemy klawisz "Enter"
{
stangry = USTAWIENIA; // wyjdź z menu (przejście do gry)
}
if(wybranaopcja == 2 && znak == 13) // jeżeli opcja == 2 ( Settings ) i wciśniemy klawisz "Enter"
{
stangry = KONIEC;
break;
}
}
}
}
void Gra::czysc()
{
COORD cord; // klatki planszy są rysowane jedna na drugiej
cord.X = 0; // dzięki czemu migotanie konsoli jest mocno ograniczone
cord.Y = 0;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), cord );
}
// menedzer.cpp
void Menedzer::wejscie()
{
pilka->ruch(); // wywołanie funkcji na rzecz obiektu pilka
int pilkax = pilka->getX(); // zmienna "pilkax" przechowuje współrz. x "pilka"
int pilkay = pilka->getY(); // zmienna "pilkay" przechowuje współrz. y "pilka"
int gracz1x = gracz1->getX(); // zmienna "gracz1x" przechowuje współrz. x "gracz1"
int gracz2x = gracz2->getX(); // zmienna "gracz2x" przechowuje współrz. x "gracz2"
int gracz1y = gracz1->getY(); // zmienna "gracz1y" przechowuje współrz. y "gracz1"
int gracz2y = gracz2->getY(); // zmienna "gracz2y" przechowuje współrz. y "gracz2"
if(_kbhit()) // sprawdza czy w buforze klawiatury znajdują się dane do odczytania , jeśli tak zwraca wartość 1 (true)
{
char klawisz = getch(); // zmienna klawisz przechowuje pojedyńczy znak odczytany z klawiatury
if (klawisz == gora1) // po wciśnięciu odpowiedniego klawiszu
if(gracz1y > 0) // jeżeli współrz. y "gracz1" jest > 0
gracz1->ruchGora(); // na rzecz obiektu gracz1 wywołana zostaje funkcja "ruchGora" poruszająca paletkę do góry
if (klawisz == gora2) // -//-
if(gracz2y > 0) // -//-
gracz2->ruchGora(); // -//-
if (klawisz == dol1) // -//-
if(gracz1y + 4 < wysokosc - 1) // -//-
gracz1->ruchDol(); // -//-
if (klawisz == dol2) // -//-
if(gracz2y + 4 < wysokosc - 1) // -//-
gracz2->ruchDol(); // -//-
if(pilka->getKierunek() == STOP) // jeżeli piłka nie porusza się
pilka->losowyKierunek(); // zostaje nadany piłce losowy kierunek
if(klawisz == 27) // Esc - wyjście z gry
exit(0);
if(klawisz == 112) // P - Pauza ( piłka zostaje ustawiona na środek boiska)
pilka->reset();
if(klawisz == 110) // N - nowa gra
{
wynikReset(); // wynik1 i wynik2 przyjmują wartość 0
pilka->reset(); // piłka zostaje ustawiona na środek boiska
gracz1->reset(); // "gracz1" wraca na pozycję początkową
gracz2->reset(); // "gracz2" wraca na pozycję początkową
}
if(wynik1 == 5) // jeżeli "gracz1" zdobędzie 5 punków
{
cout << endl << endl << " GRATULACJE !! " << endl << "WYGRAL : I GRACZ"; // wyświetla się napis
wynikReset(); // wynik zostaje wyzerowany
pilka->reset(); // "pilka" wraca na pozycję początkową
gracz1->reset(); // "gracz1" wraca na pozycję początkową
gracz2->reset(); // "gracz2" wraca na pozycję początkową
}
if(wynik2 == 5) // -//-
{
cout << endl << endl << " GRATULACJE !! " << endl << "WYGRAL : II GRACZ"; // -//-
wynikReset(); // -//-
pilka->reset(); // -//-
gracz1->reset(); // -//-
gracz2->reset(); // -//-
}
}
}
Proszę o nakierowanie co trzeba zrobić . Załączam jeszcze okno z grą , Jak już wspomniałem , moim celem jest po kliknięciu klawisza "Esc" wrócić do menu gry , a nie zakończyć program .