Gra statki pseudo-sztuczna inteligencja

0

Witam robie na projekt z C++ grę statki w konsoli i w 90% gra jest gotowa wymyśliłem i zaprogramowałem też pseudo-sztuczną inteligencję która działa teoretycznie na takiej zasadzie mamy listę na której zapisuje współrzędne i jeśli dany statek został tylko trafiony ale nie został zatopiony to do listy dodaje elementy w formie współrzędnych gdzie może być kolejny masz statku i z tej listy losuje kolejny ruch jeśli udało się trafić a dalej statek nie jest zatopiony(3- lub 4- masztowiec) to usuwam listę tworzę nową która dodaje elementy w pionie lub w poziomie zależnie od tego jak rozlokowany jest statek problem w tym że według mnie mój kod powinien to realizować a niestety tak nie jest:/ i nie wiem jak sobie z tym poradzić bo próbowałem już wszystkiego. Wrzucam kod gry(jest tego dość sporo ale chodzi o 40 linijek tej funkcji )

#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <ctime>
#include <conio.h>
#include <windows.h>
#define CZAS 500000
#define GORA -32
#define ENTER 13
#define ESC 27
#define BIALY 7
#define CZERWONY 12
#define NIEBIESKI 9
#define ZOLTY 14
#define ZIELONY 10
using namespace std;

 struct Wektor
{
  int w_x;
  int w_y; 
  bool trafiony;
  int kierunek;
  Wektor()
  {
	  this->w_x=0;
	  this->w_y=0;
	  this->trafiony=false;
  }

  Wektor & operator =(Wektor wsp1)
  {
	  this->trafiony=wsp1.trafiony;
	  this->w_x=wsp1.w_x;
	  this->w_y=wsp1.w_y;
	  this->kierunek=wsp1.kierunek;
	  return *this;
  }      
};

class Cplansza
{
  protected:
         char tab[11][45],komp[11][45];
         int x,y;
  public:
         Cplansza::Cplansza();
         Cplansza::Cplansza(char tab[11][45],char komp[11][45]);
         void SetTab(char t[11][45],bool gracz);
         void GetTab(char gracz[11][45],char komp[11][45]);
         bool Sprawdz(int x, int y,char tabl[11][45],char znak);
         void Czysc(char tabl[11][45]);
         void Wyswietl( char tablica[11][45]);
         void Zeruj();
         int ZamienWsp(char x);
         int ZamienWsp(int y); 
         int Zamiana(char a);    
         int Zam_licz(string z);
         virtual bool Ruch();
		 virtual void Postaw();
		 void Wpisz(int wx,int wy,char tab[11][45]);
		 void UsunZbedne(int wx,int wy,char tab[11][45]);
         bool CzyZatopiony(char tab[11][45],int wx, int wy);
};
class Cgracz : public Cplansza
{
  private:
          int zatopienia;
          int punkty;
          int il_ruchow;
  public:
         Cgracz();
         void DodajZatopienia();
         void DodajPunkty();
         void DodajRuch();
         int  ZwrocZatopienia();
         int  ZwrocPunkty();
         void Postaw(char p1, int y,int ile,char tab[11][45]);           
         bool Ruch(bool pomoc,char a, int y,char tab[11][45],char komp[11][45]);
};
class Clista
{
  private:
          int il_elementow;
          Wektor wsp;
          Clista *glowa;
          Clista *nastepny;
          
  public:
                  
         Clista();
		 ~Clista();
		 void Skasuj();
         void UstawWspolrzedne(Wektor wsp);
         void ZwiekszElementy();
         Wektor ZwrocWspolrzedne();
         int ZwrocIlosc();
         void Dodaj(Wektor &e);
		 Wektor Usun(int nr);
         bool ListaPusta();
		
        
             
      
};
class Ckomputer : public Cplansza
{
   private:
         Clista pamiec; 
         int il_ruchow;       
   public:
           void Postaw(char komp[11][45]);  
		   bool Ruch(int wx, int wy,int poziom, int &kierunek,char tab[11][45],char komp[11][45]);
           Wektor Wyszukaj(char tab[11][45],char znak,int wx,int wy);
		   void SkasujPamiec();
};
class Cgra : public Cplansza 
{
 private: 
	   int poziom;
	   bool losowo;
 public:        
     Cgra::Cgra();
     void Delay(int czas);
     bool Wygrana(char tabl[11][45]);
     bool Wspolrzedne(char a, int x);
     void Intro();
     int  ZwrocPoziom();
	 bool CzyLosowo();
	 int Menu();
  
};
void gotoxy(const int x, const int y)
{
        HANDLE g_hConsol = GetStdHandle(STD_OUTPUT_HANDLE);
	    COORD coord = {x, y};
        SetConsoleCursorPosition(g_hConsol, coord);
}
void setcolor(int foreground, int background=0)
{
	HANDLE g_hConsol = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(g_hConsol,foreground | background);
}

/*--------------------FUNKCJA GLOWNA MAIN----------------------------*/
int main()
{ 
 
 char komputer[11][45];
 char gracz[11][45];
 Cplansza *Polimor = new Cplansza(gracz,komputer);
 Cgra Nowa_Gra;
 Cgracz G1;
 Ckomputer K1;
 string wybor=" ";
 char w;
 char x1;
 string x2;
 int kier=0;
 int y=0,wx=0,wy=0,ilg=0,ilk=0,poziom=0;
 bool wk,wg,kor,wsp,pom;
 wsp=false;
 Polimor->SetTab(komputer,0);
 Polimor->SetTab(gracz,1);
 do
 {
   fflush(stdin);
   if(Nowa_Gra.Menu()==1)
   {
		Polimor->Zeruj();   
		Polimor->Zeruj(); 
		Polimor->GetTab(gracz,komputer);            
		poziom = Nowa_Gra.ZwrocPoziom();
		if (poziom<3) pom=1;
		else pom=0;
		switch (Nowa_Gra.CzyLosowo())
		{   
			case 0:
     // W1->GetTab(gracz,komputer);
				for (int i=4;i>=1;i--)
				{
					do
					{  
						Polimor->Czysc(gracz);
						cout<<"Podaj pierwsze wspolrzedne "<<i<<" masztowca"<<endl;
						cin>>x1>>x2;
						y=Polimor->Zam_licz(x2);
						fflush(stdin);
						if (y>=1 && y<=10 && (( x1>='a' && x1<='j') ||(x1>='A' && x1<='j')) ) wsp=true;
						else  
						{ 
							wsp=false;
							cout<<"Bledne wspolrzedne"<<endl;
						}
					}
					while(wsp==false);
					
				    G1.Postaw(x1,y,i,gracz);
          //W1->GetTab(gracz,komputer);
				}     
		break;  
	case 1:
	  
       K1.Postaw(gracz);
       break; 
 
   }
   K1.Postaw(komputer);
   K1.SkasujPamiec();
   system("CLS");
   cout<<"---------------------NIECH ROZPOCZNIE SIE GRA--------------------"<<endl;
   Nowa_Gra.Delay(200);
//   W1->GetTab(gracz,komputer);
   Polimor->Czysc(gracz);
   do
   {
       do
       {       
       //W1->GetTab(gracz,komputer); 
		 wg = Nowa_Gra.Wygrana(gracz);
		 wk = Nowa_Gra.Wygrana(komputer); 
		 if (wg==true || wk==true) goto et;
		 Nowa_Gra.Delay(200);
      // W1->GetTab(gracz,komputer);
		 Polimor->Czysc(gracz);
     //  Czysc(komp);  
         wsp=true;    
         cout<<"Podaj wspolrzedne do strzalu"<<endl;
         cin>>x1>>x2;
         if (x1=='k') goto et;
         y=Polimor->Zam_licz(x2);
         fflush(stdin);
         if (y>=1 && y<=10 && ((x1>='a' && x1<='j')||(x1>='A' && x1<='J'))) wsp=true;
         else  
         { 
		  wsp=false;
		  cout<<"Bledne wspolrzedne"<<endl;
         }
       }      
       while(wsp==false);
      // ilg++;
	   
       kor=G1.Ruch(pom,x1,y,gracz,komputer);
       if (kor==false)
       {
            do
            {             
              wx = rand() % 10 +1;             
              wy = rand() % 19 +1;            
            }
            while(wy % 2 ==0 || gracz[wx][wy]=='+' ||  gracz[wx][wy]=='.' || gracz[wx][wy]=='x' );
			K1.Ruch(wx,wy,poziom,kier,gracz,komputer);
         
       }         
       Polimor->SetTab(gracz,komputer);    
      // W1->GetTab(gracz,komputer);    
   }
   while(wg==false && wk==false);
   et:
  // W1->GetTab(gracz,komputer);
   Polimor->Czysc(gracz);                
   if (wg==true)
   {
     cout<<"-------------------------WYGRANA--------------------------------"<<endl;
     //cout<<"Wykonales "<<il_gracz<<" ruchow"<<endl;
   }            
   else 
   {cout<<"-----------------------PRZEGRANA----------------------------"<<endl;
    //cout<<"Komputer pokonal Cie wykonujac "<<il_komp<<" ruchow"<<endl;
   }  
  // system("CLS");
   }//--koniec pierwszego ifa czyli czy zostala wybrana nowa gra
   else return 0;

   cout<<"Chcesz zagrac jescze raz t/n"<<endl; 
   cin>>w;
   fflush(stdin);  
} 
while(w=='T' || w=='t');
  

  return 0;  
}
/*-----------------------KLASA Cplansza---------------------------------*/
Cplansza::Cplansza()
{
}
Cplansza::Cplansza(char tab[11][45], char komp[11][45])
{                // konstruktor ktory wczytuje plansze z pliku
   FILE *plik;
   int j=0;
   plik=fopen("statki.txt","r+");
   if (!plik) printf("Blad odczytu z pliku");
   else
   {
     while(fgets(tab[j],45,plik)!=NULL )  j++;
     for (int i=0;i<11;i++)
     for (int j=0;j<45;j++) 
     komp[i][j]=tab[i][j];   
   }
   tab[j][44]='\0';
   fclose(plik);
                     
}
void Cplansza::SetTab(char t[11][45], bool gracz)
{
  if (gracz)
  {
    for(int i=0;i<11;i++)
       for(int j=0;j<45;j++)
          this->tab[i][j]=t[i][j];         
  } 
  else
  {
    for(int i=0;i<11;i++)
       for(int j=0;j<45;j++)
          this->komp[i][j]=t[i][j];    
  }
      
     
}
void Cplansza::GetTab(char gracz[11][45],char komp[11][45])
{
  for(int i=0;i<11;i++)
       for(int j=0;j<45;j++)
       {
          gracz[i][j]=this->tab[i][j]; 
          komp[i][j]=this->komp[i][j];
       }   
     
}
bool Cplansza::Sprawdz(int x, int y,char tabl[11][45],char znak) 
{
 if (tabl[x][y]==znak && tabl[x][y+2]!='*' && tabl[x][y-2]!='*' && tabl[x+1][y]!='*' && tabl[x-1][y]!='*'
      && tabl[x+1][y+2]!='*' && tabl[x-1][y-2]!='*' && tabl[x+1][y-2]!='*' && tabl[x-1][y+2]!='*') return true;    
   else return false;  
}
void Cplansza::Czysc(char tabl[11][45])
{
  system("CLS");
  Wyswietl(tabl);    
     
}
void Cplansza::Wyswietl( char tablica[11][45])
{
   
    for (int i=0;i<11;i++)
    { 
       if (i==1) cout<<endl;  
       for(int j=0;j<43;j++)
         {
          // if (tablica[i][j]=='.') cout<<'_';
		  if(tablica[i][j]=='+') setcolor(ZOLTY);
		  else if(tablica[i][j]=='x') setcolor(CZERWONY);
		  else if(tablica[i][j]=='.') setcolor(ZIELONY);
		  else if(tablica[i][j]=='*') setcolor(NIEBIESKI);
		  else setcolor(BIALY);
          cout<<tablica[i][j]; 
           
         }
    }           
    cout<<endl;
                
}
void Cplansza::Zeruj()
{
  for(int i=0;i<11;i++)
    for(int j=0;j<45;j++)
       if(this->tab[i][j]=='*' || this->tab[i][j]=='x' || this->tab[i][j]=='.' || this->tab[i][j]=='+')
       { 
          this->tab[i][j]='_';
          this->komp[i][j]='_';   
       }
       
}
int Cplansza::ZamienWsp(char x)
{
 switch (x)
 {
   case 'a' : case 'A' : return 1;
   case 'b' : case 'B' : return 2;
   case 'c' : case 'C' : return 3;
   case 'd' : case 'D' : return 4;
   case 'e' : case 'E' : return 5;
   case 'f' : case 'F' : return 6;
   case 'g' : case 'G' : return 7;
   case 'h' : case 'H' : return 8;
   case 'i' : case 'I' : return 9;
   case 'j' : case 'J' : return 10;     
        
 }    
     
     
}
int Cplansza::ZamienWsp(int y)
{
 switch (y)
 {
   case 1 : return 1;
   case 2 : return 3;
   case 3 : return 5; 
   case 4 : return 7;
   case 5 : return 9;
   case 6 : return 11;
   case 7 : return 13;
   case 8 : return 15;
   case 9 : return 17;
   case 10 : return 19;  
}  
    
    
} 
int Cplansza::Zamiana (char a)
{
  switch (a)
  {
  case '0' : return 0;
  case '1' : return 1;
  case '2' : return 2;
  case '3' : return 3;
  case '4' : return 4;
  case '5' : return 5;
  case '6' : return 6;
  case '7' : return 7;
  case '8' : return 8;
  case '9' : return 9;   
  }
   return -1; 
}
  
int Cplansza::Zam_licz(string z)
{
 int l=z.length()-1,suma=0,j=1,ster=0;
 while (ster<=l)
 {
   suma=suma+j*Zamiana(z[l]);
   l--;
   j=j*10;    
      
      
 }

    
 return suma;   
    
}
bool Cplansza::Ruch()
{
	return true;
}
void Cplansza::Postaw()
{
	
}
void Cplansza::Wpisz(int wx,int wy,char tab[11][45])
{
  
  if(wx>1 && tab[wx-1][wy]=='_')  tab[wx-1][wy]='.';
  if(wx<10 && tab[wx+1][wy]=='_' ) tab[wx+1][wy]='.';
  if(wy>2 && tab[wx][wy-2]=='_')  tab[wx][wy-2]='.';
  if( tab[wx][wy+2]=='_')  tab[wx][wy+2]='.';
  if(wx>1 && wy>2 && tab[wx-1][wy-2]=='_')  tab[wx-1][wy-2]='.';
  if(wx>1 && tab[wx-1][wy+2]=='_') tab[wx-1][wy+2]='.';
  if(wx<10 && wy>2 && tab[wx+1][wy-2]=='_') tab[wx+1][wy-2]='.';
  if(wx<10 && tab[wx+1][wy+2]=='_') tab[wx+1][wy+2]='.';
     
     
}
void Cplansza::UsunZbedne(int wx,int wy,char tab[11][45])
{
	   Wpisz(wx,wy,tab);
       if (tab[wx-1][wy]=='+') Wpisz(wx-1,wy,tab);
       if (tab[wx+1][wy]=='+') Wpisz(wx+1,wy,tab);
       if (tab[wx+2][wy]=='+') Wpisz(wx+2,wy,tab);
       if (tab[wx+3][wy]=='+') Wpisz(wx+3,wy,tab);
       if (tab[wx-2][wy]=='+') Wpisz(wx-2,wy,tab);
       if (tab[wx-3][wy]=='+') Wpisz(wx-3,wy,tab);
       if (tab[wx][wy-2]=='+') Wpisz(wx,wy-2,tab);
       if (tab[wx][wy-4]=='+') Wpisz(wx,wy-4,tab);
       if (tab[wx][wy-6]=='+') Wpisz(wx,wy-6,tab);
       if (tab[wx][wy+2]=='+') Wpisz(wx,wy+2,tab);
       if (tab[wx][wy+4]=='+') Wpisz(wx,wy+4,tab);
       if (tab[wx][wy+6]=='+') Wpisz(wx,wy+6,tab);
}
bool Cplansza::CzyZatopiony(char tab[11][45],int wx, int wy)
{
  bool zatopiony = false;
  if (Sprawdz(wx,wy,tab,'+')==true ) //trafiony zostal jednomasztowiec
    { 
                                         
      if (tab[wx-1][wy]=='+') 
      { 
		  
        if (tab[wx-2][wy]=='+') zatopiony=Sprawdz(wx-2,wy,tab,'+');
        else zatopiony=Sprawdz(wx-1,wy,tab,'+');
        
                              
      } 
      else if (tab[wx+1][wy]=='+')
      {
		  
        if (tab[wx+2][wy]=='+') zatopiony=Sprawdz(wx+2,wy,tab,'+'); 
        else zatopiony=Sprawdz(wx+1,wy,tab,'+');  
           
      }
      else if (tab[wx][wy-2]=='+')
      {
           
        if(tab[wx][wy-4]=='+') zatopiony=Sprawdz(wx,wy-4,tab,'+');
        else zatopiony=Sprawdz(wx,wy-2,tab,'+');
      }
      else if (tab[wx][wy+2]=='+')
      {
           
         if (tab[wx][wy+4]=='+') zatopiony=Sprawdz(wx,wy+4,tab,'+');
         else zatopiony=Sprawdz(wx,wy+2,tab,'+');
           
      }                    
      else
      { zatopiony=true;
       
      }
  }
  return zatopiony;
}
/*---------------------------KLASA Cgracz-----------------------------------*/
Cgracz::Cgracz()
{
  this->zatopienia=0;
  this->punkty=0;               
  this->il_ruchow=0;              
}
void Cgracz::DodajZatopienia()
{
 this->zatopienia++;     
}
void Cgracz::DodajPunkty()
{
  this->punkty++;     
} 
void Cgracz::DodajRuch()
{
  this->il_ruchow++;     
}
int Cgracz::ZwrocZatopienia()
{
  return this->zatopienia;  
}
int Cgracz::ZwrocPunkty()
{
  return this->punkty;  
}
void Cgracz::Postaw(char p1, int y,int ile,char tab[11][45]) //funkcja stawiajaca 1,2,3,4 masztowce 
{
  string tmp=" ";
  int liczba=0;
  char z;
  bool d[3];
  bool wsp;   
  int x=ZamienWsp(p1);
  y=ZamienWsp(y);
  d[0]=Sprawdz(x,y,tab,'_');
  switch (ile)
  {
    case 1 : 
    do 
    {
      d[0]=Sprawdz(x,y,tab,'_');   //sprawdzanie czy mozna postawic w tym miejscu 
      if (d[0]==true)  
      {
        liczba++;      //licznik n-masztowcow
        tab[x][y]='*'; 
        if (liczba==4) break;
        do
        {
          et:      
            Czysc(tab);
            cout<<"Podaj wspolrzedne kolejnego 1 masztowca: ";
            cin>>z>>tmp;
            y=Zam_licz(tmp);
            fflush(stdin);
            if (y>=1 && y<=10 && (( z>='a' && z<='j') ||(z>='A' && z<='J')) ) wsp=true;
            else  
            { 
              wsp=false;
              cout<<"Bledne wspolrzedne"<<endl;
            }
         }
         while(wsp==false);
         x=ZamienWsp(z);
         y=ZamienWsp(y);                 
         d[0]=Sprawdz(x,y,tab,'_');                  
       } 
       else
       {
          cout<<"Bledne wspolrzedne"<<endl;     //wprowadzenie nastepnych wsp jesli wpisane sa bledne 
          goto et;   
       }    
         
     }     
     while (liczba<4); 
     liczba=0;   
     break;
     case 2: 
         do
         {
           d[0]=Sprawdz(x,y,tab,'_');    
           if (d[0]==true)
           {
             do
             {        
                cout<<"Podaj kierunek l- lewo p- prawo g-gora d-dol: "; //kierunki w ktore mozna skierowac "reszte danego k-masztowca"
                cin>>tmp;
                z=tmp[0];
                if ((z=='g' || z=='G' || z=='l' || z=='L' || z=='P' || z=='p' || z=='d' || z=='D') && 
                tmp.length()==1) wsp=true;
                else wsp=false;
                fflush(stdin);
                Czysc(tab); 
           
              }
              while(wsp==false);
              switch(z)
              {
                 case 'l' : 
                      d[0]=Sprawdz(x,y-2,tab,'_');
                      if (d[0]==true)
                      {
                        
                        liczba++;          
                      }
                 break;
                 case 'p' :
                      d[0]=Sprawdz(x,y+2,tab,'_');
                      if (d[0]==true)
                      {
                        for(int i=0;i<=1;i++)  tab[x][y+i*2]='*';
                        liczba++;         
                      } 
                 break;       
                 case 'g' : 
                     d[0]=Sprawdz(x-1,y,tab,'_');
                     if (d[0]==true)
                     {
                       for(int i=0;i<=1;i++)  tab[x-i][y]='*';
                       liczba++;          
                     }          
                break;      
                case 'd' :
                     d[0]=Sprawdz(x+1,y,tab,'_'); 
                     if (d[0]==true)
                     {
                       for(int i=0;i<=1;i++)  tab[x+i][y]='*';
                       liczba++;           
                     } 
                break;         
             } 
                     
                     
                     
         }
         else  cout<<"Bledne wspolrzedne"<<endl;  
         if (liczba==3) break;  
         do
         {  
         Czysc(tab);
         cout<<"Podaj wspolrzedne kolejnego 2-masztowca"<<endl;
         cin>>z>>tmp;
         y=Zam_licz(tmp);
         fflush(stdin);
         if (y>=1 && y<=10 && (( z>='a' && z<='j') ||(z>='A' && z<='J')) ) wsp=true;
         else  
         { 
            wsp=false;
            cout<<"Bledne wspolrzedne"<<endl;
         }
         }
         while(wsp==false);
         y=ZamienWsp(y);
         x=ZamienWsp(z);   
         } while(liczba<3);
         break;
         case 3 :
         do
         {
         d[0]=Sprawdz(x,y,tab,'_');     
         if (d[0]==true)
         {
           do
           {         
           cout<<"Podaj kierunek l- lewo p- prawo g-gora d-dol: ";
           cin>>tmp;
           z=tmp[0];
           if ((z=='g' || z=='G' || z=='l' || z=='L' || z=='P' || z=='p' || z=='d' || z=='D') && 
           tmp.length()==1) wsp=true;
           else wsp=false;
           fflush(stdin);
           Czysc(tab);
           }
           while(wsp==false); 
           switch(z)
           {
             case 'l' : 
                 for(int i=1;i<=2;i++) d[i-1]=Sprawdz(x,y-i*2,tab,'_');
                 if (d[0]==true && d[1]==true)
                  {
                    for(int i=0;i<=2;i++)   tab[x][y-i*2]='*';
                    liczba++;          
                             
                  }
                  break;
             case 'p' :
                 for(int i=1;i<=2;i++) d[i-1]=Sprawdz(x,y+i*2,tab,'_');
                 if (d[0]==true && d[1]==true)
                 {
                    for(int i=0;i<=2;i++)   tab[x][y+i*2]='*';
                    liczba++;         
                             
                 } 
                 break;       
             case 'g' : 
               for(int i=1;i<=2;i++) d[i-1]=Sprawdz(x-i,y,tab,'_');
               if (d[0]==true && d[1]==true)
               {
                 for(int i=0;i<=2;i++)   tab[x-i][y]='*';
                 liczba++;          
                           
                           
               }          
               break;      
           case 'd' :
              for(int i=1;i<=2;i++) d[i-1]=Sprawdz(x+i,y,tab,'_');
              if (d[0]==true && d[1]==true)
              {
                for(int i=0;i<=2;i++)   tab[x+i][y]='*';
                liczba++;           
              } 
              break;         
           }
                     
                     
                     
         }
         else  cout<<"Bledne wspolrzedne"<<endl;
         if (liczba==2) break;
         do
         {    
           Czysc(tab);
           cout<<"Podaj wspolrzedne kolejnego 3-masztowca"<<endl;
           cin>>z>>tmp;
           y=Zam_licz(tmp);
           fflush(stdin);
           if (y>=1 && y<=10 && (( z>='a' && z<='j') ||(z>='A' && z<='j')) ) wsp=true;
           else  
           { 
             wsp=false;
             cout<<"Bledne wspolrzedne"<<endl;
           }
         }
         while(wsp==false);
         x=ZamienWsp(z);
         y=ZamienWsp(y);          
         }
         while (liczba<2);                   
         liczba=0;
         break;
         case 4 :
         do
         {
            d[0]=Sprawdz(x,y,tab,'_');     
            if (d[0]==true)
            {
            do
            {        
              cout<<"Podaj kierunek l- lewo p- prawo g-gora d-dol: ";
              cin>>tmp;
              z=tmp[0];
              if ((z=='g' || z=='G' || z=='l' || z=='L' || z=='P' || z=='p' || z=='d' || z=='D') && 
              tmp.length()==1) wsp=true;
              else wsp=false;
              fflush(stdin);
              Czysc(tab); 
            }
            while(wsp==false);
            switch(z)
            {
             case 'l' : 
                  for(int i=1;i<=3;i++)   d[i-1]=Sprawdz(x,y-i*2,tab,'_');
                  if (d[0]==true && d[1]==true && d[2]==true)
                  {
                    for(int i=0;i<=3;i++) tab[x][y-i*2]='*';
                    liczba++;          
                             
                  }
                  break;
            case 'p' :
                 for(int i=1;i<=3;i++)   d[i-1]=Sprawdz(x,y+i*2,tab,'_');
                 if (d[0]==true && d[1]==true && d[2]==true )
                 {
                    for(int i=0;i<=3;i++) tab[x][y+i*2]='*';
                    liczba++;         
                             
                 } 
                 break;       
          case 'g' : 
               for(int i=1;i<=3;i++)   d[i-1]=Sprawdz(x-i,y,tab,'_');
               if (d[0]==true)
               {
                 for(int i=0;i<=3;i++) tab[x-i][y]='*';
                 liczba++;          
               }          
              break;      
         case 'd' :
              for(int i=1;i<=3;i++)   d[i-1]=Sprawdz(x+i,y,tab,'_');
              if (d[0]==true)
              {
                for(int i=0;i<=3;i++) tab[x+i][y]='*';
                liczba++;           
              } 
              break;         
           }
         }
         else  cout<<"Bledne wspolrzedne"<<endl;  
         if (liczba==1) break;    
         Czysc(tab);
         }
         while (liczba<1);                   
         liczba=0;
         break;                     
     
}     
}                 
bool Cgracz::Ruch(bool pomoc,char a, int y,char tab[11][45],char komp[11][45])
{
     bool spr; 
     il_ruchow++;     
     x=ZamienWsp(a);
     y=ZamienWsp(y);
     if (komp[x][y]=='x' || komp[x][y]=='+')
     {
       cout<<"Pole wybrane juz wczesniej"<<endl;
       cout<<"Sprobuj jeszcze raz"<<endl;
       return true;
     }
     else
     {
       if (komp[x][y]=='*')
       { 
                         
		 komp[x][y]='+';
		 tab[x][y+22]='+'; 
		 spr = CzyZatopiony(komp,x,y);
         if (spr==true)
		 {
			cout<<"Trafiony i zatopiony"<<endl; 
			if (pomoc==true) UsunZbedne(x,y+22,tab);
		 }
         else cout<<"Trafiles"<<endl;           
         return true;                  
       }
	   else
       { 
         komp[x][y]='x';
         tab[x][y+22]='x';
         cout<<"Pudlo "<<endl; 
         return false;
       }                    
   }
}
    

/*-----------------KLASA Clista---------------------------------*/ 
Clista::Clista()
{
   glowa = NULL;
   il_elementow=0;
   nastepny=NULL;
   wsp.w_x=0;
   wsp.w_y=0;
}
Clista::~Clista()
{
  Clista *tmp = glowa;
  while(tmp!=NULL)
  {
	  tmp=glowa->nastepny;
	  delete glowa;
	  glowa=tmp;
  }

}
void Clista::Skasuj()
{
  Clista *tmp = glowa;
  while(tmp!=NULL)
  {
	  tmp=glowa->nastepny;
	  delete glowa;
	  glowa=tmp;
  }
  this->il_elementow=0;
}
void Clista::UstawWspolrzedne(Wektor wsp)
{
	this->wsp.w_x=wsp.w_x;
	this->wsp.w_y=wsp.w_y;
	this->wsp.trafiony=wsp.trafiony;
}
void Clista::ZwiekszElementy()
{
	il_elementow++;
}
Wektor Clista::ZwrocWspolrzedne()
{
  return wsp;
}
int Clista::ZwrocIlosc()
{
  return il_elementow;
}
void Clista::Dodaj(Wektor &e)
{
  Clista *nowy = new Clista;
  nowy->wsp=e;
  nowy->nastepny=glowa;
  glowa=nowy;
  il_elementow++; 
}
Wektor Clista::Usun(int nr)
{
 Wektor ws;
 
 Clista *tmp = glowa;
 Clista *tmp2 = NULL;
 int licznik=1;
 if(tmp!=NULL)
 {
 while(tmp!=NULL && nr>1)
 {
   ws = tmp->wsp;
   tmp2 = tmp;
   tmp=tmp->nastepny;
    nr--;
 }
 if ((nr!=1) || (tmp==NULL)) 
 {
	 return ws;
 }
 if(tmp2==NULL)
 {
   ws=tmp->wsp;
   glowa=tmp->nastepny;
 }
 else  tmp2->nastepny=tmp->nastepny;
 delete tmp;

   il_elementow--;
 }
   return ws;
}
bool Clista::ListaPusta()
{
	if(this->il_elementow==0) return true;
}

/*-----------------------KLASA Ckomputer--------------------*/
              
/*
  */  

void Ckomputer::Postaw(char komp[11][45])
{

	int wspx=0, wspy=0,kier=0,licznik=0;
    bool d[4];
    for (int i=0;i<4;i++) d[i]=false;
    for (int i=1;i<=4;i++)
    {
      switch(i)
      {
        case 1 : 
             for(int j=1;j<=4;j++)
             {
                     
              do
              {
                wspx= rand() % 10 +1;
                wspy = rand() %19 +1;            
                d[0]=Sprawdz(wspx,wspy,komp,'_');    
                     
              }     
              while(d[0]==false);
              komp[wspx][wspy]='*'; 
                  
             } 
             break;      
        case 2 :
             for (int j=1;j<=3;j++)
             {
              do
              {
                kier = rand() % 4 +1;
                wspx = rand() % 10 +1;
                wspy = rand() % 19 +1;
                d[0]=Sprawdz(wspx,wspy,komp,'_');
                switch (kier)
                {      
                   case 1 : 
                        d[1]=Sprawdz(wspx+1,wspy,komp,'_');
                        break;
                   case 2 :
                        d[1]=Sprawdz(wspx-1,wspy,komp,'_');
                        break;
                   case 3 :
                        d[1]=Sprawdz(wspx,wspy+2,komp,'_');
                        break;
                   case 4 :
                        d[1]=Sprawdz(wspx,wspy+2,komp,'_');
                        break;   
                 
                 
                 }      
              }   
              while (d[0]==false || d[1]==false);
              komp[wspx][wspy]='*';   
              switch ( kier)
              {
                case 1 : komp[wspx+1][wspy]='*';
                break;
                case 2 : komp[wspx-1][wspy]='*';
                break;
                case 3 : komp[wspx][wspy+2]='*';
                break;
                case 4 : komp[wspx][wspy-2]='*';
                break;    
                     
                     
              }  
             
             }
             break; 
       case 3 :
            for (int j=1;j<=2;j++)
            {
              do
              {   
                kier = rand() % 4 +1;
                wspx = rand() % 10 +1;
                wspy = rand() % 19 +1;
                 d[0]=Sprawdz(wspx,wspy,komp,'_');
                switch (kier)
                {      
                   case 1 :
                        for (int i=1;i<=2;i++) d[i]=Sprawdz(wspx+i,wspy,komp,'_');
                        break;
                   case 2 :
                        for (int i=1;i<=2;i++) d[i]=Sprawdz(wspx-i,wspy,komp,'_');
                        break;
                   case 3 :
                        for (int i=1;i<=2;i++) d[i]=Sprawdz(wspx,wspy+i*2,komp,'_');
                        break;
                   case 4 :
                        for (int i=1;i<=2;i++) d[i]=Sprawdz(wspx,wspy-i*2,komp,'_');
                        break;   
                 
                 
                 }
                
                
                }
                while(d[0]==false || d[1]== false || d[2] == false); 
                komp[wspx][wspy]='*';
                switch(kier)
                {
                   case 1  :
                        for(int i=1;i<=2;i++) komp[wspx+i][wspy]='*';                 
                        break;
                   case 2 :
                        for(int i=1;i<=2;i++) komp[wspx-i][wspy]='*';
                        break;
                   case 3 :
                        for(int i=1;i<=2;i++) komp[wspx][wspy+i*2]='*';
                        break;
                   case 4 :
                         for(int i=1;i<=2;i++) komp[wspx][wspy-i*2]='*';
                        break;
                        }            
                            
                            
                            
                }
                break;
                case 4 :
            for (int j=1;j<=2;j++)
            {
              do
              {   
                kier = rand() % 4 +1;
                wspx = rand() % 10 +1;
                wspy = rand() % 19 +1;
                 d[0]=Sprawdz(wspx,wspy,komp,'_');
                switch (kier)
                {      
                   case 1 : 
                        for(int i=1;i<=3;i++) d[i]=Sprawdz(wspx+i,wspy,komp,'_');                                       
                        break;
                   case 2 :
                        for(int i=1;i<=3;i++) d[i]=Sprawdz(wspx-i,wspy,komp,'_');
                        break;
                   case 3 :
                        for(int i=1;i<=3;i++) d[i]=Sprawdz(wspx,wspy+i*2,komp,'_');
                        break;
                   case 4 :
                        for(int i=1;i<=3;i++) d[i]=Sprawdz(wspx,wspy-i*2,komp,'_');
                        break;   
                 
                 
                 }
                
                
                }
                while(d[0]==false || d[1]== false || d[2] == false || d[3]==false); 
                komp[wspx][wspy]='*';
                switch(kier)
                {
                   case 1  :
                        for(int i=1;i<=3;i++) komp[wspx+i][wspy]='*';
                        break;
                   case 2 :
                        for(int i=1;i<=3;i++) komp[wspx-i][wspy]='*';
                        break;
                   case 3 :
                        for(int i=1;i<=3;i++) komp[wspx][wspy+i*2]='*';
                        break;
                   case 4 :
                        for(int i=1;i<=3;i++) komp[wspx][wspy-i*2]='*';
                        break;                         
                }
                break;  
            }               
               
        }  
        
        
        
    }
  
    
    
}           
 
//void Cgra::Delay(int czas) { for(int i=czas*1000000;i>=0;i--);}

Wektor Ckomputer::Wyszukaj(char tabl[11][45],char znak,int wx,int wy)
{
   Wektor w;
   w.kierunek=0;
  if (tabl[wx-1][wy]==znak)
  {
    w.w_x=wx-1;
    w.w_y=wy;
	w.kierunek=1;
  }
  else if (tabl[wx+1][wy]==znak)
  {
    w.w_x=wx+1;
    w.w_y=wy;
	w.kierunek=2;
  }
  else if (tabl[wx][wy-2]==znak)
  {
   w.w_x=wx;
   w.w_y=wy-2; 
   w.kierunek=3;
  } 
  else if (tabl[wx][wy+2]==znak)
  {
   w.w_x=wx;
   w.w_y=wy+2;  
   w.kierunek=4;
  }

  return w;  
       
}   
bool Ckomputer::Ruch(int wx, int wy,int poziom, int &kierunek,char tab[11][45],char komp[11][45]) 
{
  Wektor w;
  int i=0,licznik=0;
  bool zatopiony=false;
  this->il_ruchow++;
  int nr=0;
  switch (poziom)
  {
   case 1:   /* Ruch komputera opiera sie na losowym strzelaniu do pol */
        
         if (tab[wx][wy]=='*') 
         {
           cout<<"Zostales trafiony"<<endl;
           tab[wx][wy]='+';
           komp[wx][wy+22]='+';
           wx = rand() % 10 +1;
           do
           wy = rand() % 19 +1;
           while( wy % 2 == 0);
           Ruch(wx,wy,poziom,kierunek,tab,komp);                   
                               
         }        
         else 
         {
            if (tab[wx][wy]=='_')
            {
              cout<<"Komputer spudlowal"<<endl;
              tab[wx][wy]='x';
              komp[wx][wy+22]='x';
              return false;  
            }       
            else
            {
              while (tab[wx][wy]=='x' || tab[wx][wy]=='+')
              {
                wx = rand() % 10 +1;
                do
                wy= rand() % 19 +1;
                while(wy % 2 == 0);
              }  
              this->Ruch(wx,wy,poziom,kierunek,tab,komp);   
            }  
          }     
         break;
                  
                 
              
         
  case 2:      
         
  if (tab[wx][wy]=='*')   //Sprawdzamy czy pod wylosowanymi wsp kryje sie statek lub jego
   { 
	cout<<"Zostales trafiony"<<endl;                     // czesc
    tab[wx][wy]='+';
    komp[wx][wy+22]='+';
    zatopiony = CzyZatopiony(tab,wx,wy);  
    if (zatopiony==true) /* jesli statek zostal zatopiony "okropkowujemy" miejsca
  w ktorych na pewno nie bedzie innych statkow        */                  
    {  
       cout<<" i zatopiony"<<endl;     
       UsunZbedne(wx,wy,tab); //okropkowujemy miejsca gdzie strzal jest bez celowy gdyz wokol statku masztow innego
	   //zgodnie z konstrukcja nie bedzie
       do                    // Losowe wybranie kolejnych wspolrzednych dla ruchu komputera
       {                     // i rekursywne wywolanie jego ruchu              
       wx= rand() % 10 +1;   //
       wy= rand() % 19 +1;   
       } 
      while(wy % 2 == 0 || tab[wx][wy]=='.' || tab[wx][wy]=='+' || tab[wx][wy]=='x');  
     
     this->Ruch(wx,wy,poziom,kierunek,tab,komp);  
     
         
    }
    else if (zatopiony==false)
    {
      w=Wyszukaj(tab,'*',wx,wy);
      if (w.w_x!=0) this->Ruch(w.w_x,w.w_y,poziom,kierunek,tab,komp);    
    }                  
  }
  else
  {
      cout<<"Komputer spudlowal"<<endl;
      tab[wx][wy]='x';
      komp[wx][wy+22]='x';
      return false;
             
  } 
  break;

  case 3:
//Prosze analizowac od tego miejsca
   if  (pamiec.ListaPusta()==true)
   { 
		cout<<"Pamiec jest pusta!!!!!"<<endl;
		if (tab[wx][wy]=='*')   //Sprawdzamy czy pod wylosowanymi wsp kryje sie statek lub jego
		{ 
		  cout<<"Zostales trafiony"<<endl;                     // czesc
		  tab[wx][wy]='+';
		  komp[wx][wy+22]='+';
		  zatopiony = CzyZatopiony(tab,wx,wy);
		  w.w_x = wx;
		  w.w_y = wy;
		  w.trafiony = false;
	      if (zatopiony == false)	
	      {
		//Statek zostal tylko trafiony a nie zostal zatopiony
			
			if ( tab[w.w_x-1][w.w_y]=='_' || tab[w.w_x-1][w.w_y]=='*') 
			{
				w.w_x=w.w_x-1;
				pamiec.Dodaj(w);
				w.w_x=w.w_x+1;
			}
			if ( tab[w.w_x+1][w.w_y]=='_' || tab[w.w_x+1][w.w_y]=='*') 
			{
				w.w_x=w.w_x+1;
				pamiec.Dodaj(w);
				w.w_x=w.w_x-1;
			}
			if ( tab[w.w_x][w.w_y-2]=='_' || tab[w.w_x][w.w_y-2]=='*') 
			{
				w.w_y=w.w_y-2;
				pamiec.Dodaj(w);
				w.w_y=w.w_y+2;
			}
			if ( tab[w.w_x][w.w_y+2]=='_' || tab[w.w_x][w.w_y+2]=='*') 
			{
				w.w_y=w.w_y+2;
				pamiec.Dodaj(w);
				w.w_y=w.w_y-2;
			}
	
			this->Ruch(1,1,poziom,kierunek,tab,komp);
	    }//-if statek niezatopiony
	    else
		{
			cout<<"i zatopiony"<<endl;
			UsunZbedne(w.w_x,w.w_y,tab);
			if ( pamiec.ListaPusta()!=false)   pamiec.Skasuj();
			
			do                    // Losowe wybranie kolejnych wspolrzednych dla ruchu komputera
			{                     // i rekursywne wywolanie jego ruchu              
				wx= rand() % 10 +1;   //
				wy= rand() % 19 +1;   
			} 
			while(wy % 2 == 0 || tab[wx][wy]=='.' || tab[wx][wy]=='+' || tab[wx][wy]=='x');  
		    this->Ruch(wx,wy,poziom,kierunek,tab,komp);
		}
	  }//-koniec if trafiono masz
      else 
      {
            if (tab[wx][wy]=='_')
            {
              cout<<"Komputer spudlowal"<<endl;
              tab[wx][wy]='x';
              komp[wx][wy+22]='x';
              return false;  
            }       
            else
            {
              while (tab[wx][wy]!='_' || tab[wx][wy]!='*')
              {
                wx = rand() % 10 +1;
                do
                wy= rand() % 19 +1;
                while(wy % 2 == 0);
              }  
              this->Ruch(wx,wy,poziom,kierunek,tab,komp);   
            }
			
       }
  }//--if pamiec jest pusta
	  //----------------pamiec nie jest pusta-------------------
  else 
  {
	//Lista nie jest pusta w przypadku gdy ktorys masz n-masztowca zostal w poprzednim ruchu odkryty
	  //Sprawdzam czy obok trafionego sa juz jakies maszty trafione
	      nr = rand() % pamiec.ZwrocIlosc()+1;
		  cout<<"Zmienna nr ma wartosc: "<<nr<<endl;
		  getch();
		  w = pamiec.Usun(nr);
		  if(tab[w.w_x][w.w_y]=='*') 
		  {
			  tab[w.w_x][w.w_y]='+';
			  komp[w.w_x][w.w_y+22]='+';
			  cout<<"Zostales trafiony"<<endl;
			  if(CzyZatopiony(tab,w.w_x,w.w_y)==true)
			  {
				cout<<"i zatopiony"<<endl;
				pamiec.Skasuj(); //jezeli statek zostal juz zatopiony to kasujemy liste i wracamy
				//do losowania pola uderzenia random oczywiscie bierzemy pod uwage
				//tylko pola logicznie poprawne tj te ktore nie sasiaduja z np odkrytym wczesniej
				//statkiem
				UsunZbedne(w.w_x,w.w_y,tab);
				do                    // Losowe wybranie kolejnych wspolrzednych dla ruchu komputera
				{                     // i rekursywne wywolanie jego ruchu              
					wx= rand() % 10 +1;   //
					wy= rand() % 19 +1;   
				} 
				while(tab[wx][wy]!='*' && tab[wx][wy]!='_');  
			    this->Ruch(wx,wy,poziom,kierunek,tab,komp); 
			  }
			  else
			  {
				  w=Wyszukaj(tab,'+',w.w_x,w.w_y); //----Sprawdzamy w jakiej pozycji znajduje sie poprzedni odkryty juz 
				  //maszt statku
				  pamiec.Skasuj(); //kasujemy liste mozliwosci poniewaz moga byc w niej ruchy bezsensowne
				  //i tworzymy nowa liste ruchow w ktorych szansa trafienia kolejnego masztu to 50%
				  cout<<"jestesmy tu kurwa!! czyli dwa maszty sa jebniete!!!"<<endl;
				  switch(w.kierunek)
				  {
				    case 1:  //szukany masz znajduje sie w pozycji wx-1 a wiec kolejne maszty statku moga byc w ponizszych pozycjach
						if(tab[w.w_x-1][w.w_y]=='_' || tab[w.w_x-1][w.w_y]=='*')
						 {
							 w.w_x=w.w_x-1;
							 pamiec.Dodaj(w);
							 w.w_x=w.w_x+1; //przywrocenie do pozycji poczatkowej
						 }
						 if(tab[w.w_x+2][w.w_y]=='_' || tab[w.w_x+2][w.w_y]=='*')
						 {
							 w.w_x=w.w_x+2;
							 pamiec.Dodaj(w);
							 w.w_x=w.w_x-2;
						 }
						 break;
				    case 2: //szukany maszt w wx+1
						 if(tab[w.w_x+1][w.w_y]=='_' || tab[w.w_x+1][w.w_y]=='*')
						 {
							 w.w_x=w.w_x+1;
							 pamiec.Dodaj(w);
							 w.w_x=w.w_x-1;
						 }
						 if(tab[w.w_x-2][w.w_y]=='_' || tab[w.w_x-2][w.w_y]=='*')
						 {
							 w.w_x=w.w_x-2;
							 pamiec.Dodaj(w);
							 w.w_x=w.w_x+2;
						 }
						 
					     break;
				    case 3: //szukany maszt w wy-2
						 if(tab[w.w_x][w.w_y-2]=='_' || tab[w.w_x][w.w_y-2]=='*')
						 {
							 w.w_y=w.w_y-2;
							 pamiec.Dodaj(w);
							 w.w_x=w.w_y+2;
						 }
						 if(tab[w.w_x][w.w_y+4]=='_' || tab[w.w_x][w.w_y+4]=='*')
						 {
							 w.w_y=w.w_y+4;
							 pamiec.Dodaj(w);
							 w.w_y=w.w_y-4;
						 }
						 
					     break;
				    case 4: //szukany maszt w wy+2
						 if(tab[w.w_x][w.w_y+2]=='_' || tab[w.w_x][w.w_y+2]=='*')
						 {
							 w.w_y=w.w_y+2;
							 pamiec.Dodaj(w);
							 w.w_y=w.w_y-2;
						 }
						 if(tab[w.w_x][w.w_y-4]=='_' || tab[w.w_x][w.w_y-4]=='*')
						 {
							 w.w_y=w.w_y-4;
							 pamiec.Dodaj(w);
							 w.w_y=w.w_y+4;
						 }
					
					     break;
				  }//--koniec tego switcha
				 // if(pamiec.ZwrocIlosc()>0)  nr = rand()% pamiec.ZwrocIlosc()+1;
				//  w = pamiec.Usun(nr);
				  Ruch(1,1,3,kierunek,tab,komp);
			  }//--koniec elsa ktory mowi ze statek zostal trafiony ale nie zostal zatopiony
		  }//--koniec ifa ze statek zostal trafiony
		  else
		  {
			  if (tab[w.w_x][w.w_y]!='x')
			  {
				tab[w.w_x][w.w_y]='x';
				komp[w.w_x][w.w_y+22]='x';
				cout<<"Komputer spudlowal"<<endl;
			  }
			  else  Ruch(wx,wy,3,kierunek,tab,komp);
			  
			  return false;
		  }
	 
  } //-koniec else czyli kodu obslugujacego gdy lista nie jest pusta
 
       //------------Poziom inteligentny ----------------------/ 
  } //--koniec switcha
} //--koniec funkcji

void Ckomputer::SkasujPamiec()
{
	pamiec.Skasuj();

}
/*----------------------KLASA Cgra--------------------------*/
Cgra::Cgra() 
{
   // generowanie ziarna czasowego do losowania pol przez komputer  
	this->poziom=1;
	this->losowo=1;
   srand (static_cast<unsigned int>(time(NULL))); 

}
void Cgra::Delay(int czas)
{
  for(int i=0;i<czas*CZAS;i++);                
} 
bool Cgra::Wygrana(char tabl[11][45])
{
 int licznik=0;    
 for (int i=1;i<11;i++)
  for (int j=0;j<20;j++) 
  {
   if (tabl[i][j]=='*') licznik++;   
      
  } 
  if (licznik==0)  return true;
  else return false;       
} 
bool Cgra::Wspolrzedne( char a, int x)
{
    
  if ((a>='a' && a<='j') || (a>='A' && a<='J') && x>=1 && x<=10) return true;
  else return false;   
   
} 

void Cgra::Intro()
{
  system("COLOR  4E");
  system("CLS");
  for(int i=1;i<12;i++)
   cout<<endl;
  for(int i=1;i<35;i++)
  {
    Delay(100);
    cout<<"-" ;     
          
  } 
 Delay(100);
 cout<<"S";
 Delay(100);
 cout<<"T";
 Delay(100);
 cout<<"A";
 Delay(100);
 cout<<"T";
 Delay(100);
 cout<<"K";
 Delay(100);
 cout<<"I";
 for(int i=1;i<35;i++)
  {
    Delay(100);
    cout<<"-" ;     
          
  }
 for(int i=1;i<15;i++)
   cout<<endl;      
 cout<<"                                                         Pawel Czech II EF-DI"<<endl;
 Delay(1000);
 system("CLS");    
}

int Cgra::Menu()
{
	int pozycja = 1;
	int pozycja_pod_menu=1;
	int pozycja_pod_pod_menu=1;
	char znak='a';
	while(znak!=ESC)
	{
		
		if(znak=='s') pozycja++;
		if(znak=='w') pozycja--;
		if(pozycja==0) pozycja=3;
		if(pozycja==4) pozycja=1;
		system("CLS");
		switch(pozycja)
		{
			case 1:
				gotoxy(30,8);
				setcolor(CZERWONY);
				cout<<"NOWA GRA"<<endl;
				gotoxy(30,11);
				setcolor(BIALY);
				cout<<"OPCJE"<<endl;
				gotoxy(30,14);
				cout<<"ZAKONCZ"<<endl;
				break;
			case 2:
				gotoxy(30,8);
				setcolor(BIALY);
				cout<<"NOWA GRA"<<endl;
				gotoxy(30,11);
				setcolor(CZERWONY);
				cout<<"OPCJE"<<endl;
				gotoxy(30,14);
				setcolor(BIALY);
				cout<<"ZAKONCZ"<<endl;
				break;
			case 3:
				gotoxy(30,8);
				setcolor(BIALY);
				cout<<"NOWA GRA"<<endl;
				gotoxy(30,11);
				cout<<"OPCJE"<<endl;
				gotoxy(30,14);
				setcolor(CZERWONY);
				cout<<"ZAKONCZ"<<endl;
				break;
		}
		znak = getch();
		if(znak==ENTER)
		{
			switch(pozycja)
			{
				case 1:
					return 1;
				case 3:
					return 0;
				case 2:
					system("CLS");
					do
					{
						switch(pozycja_pod_menu)
						{
							case 1:
								gotoxy(30,8);
								setcolor(CZERWONY);
								cout<<"LOKALIZACJA"<<endl;
								gotoxy(30,11);
								setcolor(BIALY);
								cout<<"POZIOM"<<endl;
								break;
							case 2:
								gotoxy(30,8);
								setcolor(BIALY);
								cout<<"LOKALIZACJA"<<endl;
								gotoxy(30,11);
								setcolor(CZERWONY);
								cout<<"POZIOM"<<endl;
								break;
						}
						znak=getch();
						if(znak=='s') pozycja_pod_menu++;
						if(znak=='w') pozycja_pod_menu--;
						if(pozycja_pod_menu==3) pozycja_pod_menu=1;
						if(pozycja_pod_menu==0) pozycja_pod_menu=2;
						}  
						while(znak!=ESC && znak!=ENTER);
						system("CLS");
						if(znak==ENTER)
						{
							
							switch(pozycja_pod_menu)
							{
								case 1:
									do
									{
									switch(pozycja_pod_pod_menu)
									{
										case 1:
											this->losowo=0;
											gotoxy(30,8);
											setcolor(CZERWONY);
											cout<<"RECZNA"<<endl;
											gotoxy(30,11);
											setcolor(BIALY);
											cout<<"LOSOWA"<<endl;
											break;
										case 2:
											this->losowo=1;
											gotoxy(30,8);
											setcolor(BIALY);
											cout<<"RECZNA"<<endl;
											gotoxy(30,11);
											setcolor(CZERWONY);
											cout<<"LOSOWA"<<endl;
											break;
											
									}
									znak=getch();
									if(znak=='s') pozycja_pod_pod_menu++;
									if(znak=='w') pozycja_pod_pod_menu--;
									if(pozycja_pod_pod_menu==0) pozycja_pod_pod_menu=2;
									if(pozycja_pod_pod_menu==3) pozycja_pod_pod_menu=1;
							        }
									while(znak!=ESC && znak!=ENTER);
									break;
								case 2:
									system("CLS");
									do
									{
									switch(pozycja_pod_pod_menu)
									{
										case 1:
											this->poziom=1;
											gotoxy(30,8);
											setcolor(CZERWONY);
											cout<<"LATWY"<<endl;
											gotoxy(30,11);
											setcolor(BIALY);
											cout<<"SREDNI"<<endl;
											gotoxy(30,14);
											cout<<"TRUDNY"<<endl;
											break;
										case 2:
											this->poziom=2;
											gotoxy(30,8);
											setcolor(BIALY);
											cout<<"LATWY"<<endl;
											gotoxy(30,11);
											setcolor(CZERWONY);
											cout<<"SREDNI"<<endl;
											gotoxy(30,14);
											setcolor(BIALY);
											cout<<"TRUDNY"<<endl;
											break;
										case 3:
											this->poziom=3;
											gotoxy(30,8);
											setcolor(BIALY);
											cout<<"LATWY"<<endl;
											gotoxy(30,11);
											cout<<"SREDNI"<<endl;
											gotoxy(30,14);
											setcolor(CZERWONY);
											cout<<"TRUDNY"<<endl;
											break;

									}
									znak=getch();
									if(znak=='s') pozycja_pod_pod_menu++;
									if(znak=='w') pozycja_pod_pod_menu--;
									if(pozycja_pod_pod_menu==0) pozycja_pod_pod_menu=3;
									if(pozycja_pod_pod_menu==4) pozycja_pod_pod_menu=1;
									}
									while(znak!=ESC && znak!=ENTER);
									break;
									

							}
						   
						}
				
			}
		}
	}

}
int Cgra::ZwrocPoziom()
{
	return this->poziom;
}
bool Cgra::CzyLosowo()
{
	return this->losowo;
}

 

Ta funkcja ktora niedokońca działa to w klasie CKomputer Ruch(...) i tam od case 3 : proszę analizować.

0

Muszę przyznać, że dawno nie widziałem gorszego kodu :/.

0

sądzisz, że ktoś będzie analizować tysiąc linijek takiego kodu-spaghetti? to co napisałeś da się napisać cztery razy krócej (pewnie zaraz znajdzie się kozak, który zrobi to w dziesięciu linijkach). obie ZamienWsp() i Zamiana() to po prostu smutek.
na otarcie łez mogłeś chociaż zdradzić nazwę tej 40-linijkowej metody.

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