Sztuczna inteligencja saper

0

Witam, mam taki kod do sapera i muszę dorobić do tego żeby pola się odkrywały jak w saperze tym z windowsa i muszę jeszcze zrobić tak żeby komputer sama grał w tego sapera, nie mam pojęcia jak to zrobić, pomoże ktoś?



#include<iostream>
#include<stdio.h>
#include<sstream>
#include<time.h>
using namespace std;

char konwersja(int ilosc){
        int ile=ilosc;                                  
        stringstream ss;                                //konwersja int-->string
        string wokol;
        ss << ile;              
        ss >> wokol;
        std::string str(wokol);                 //konwersja string-->char
        char znak = str[0];             
        return znak;
}
void wyswietl2(int x, int y, char zakryj[11][11])
{
        for (int i=1;i<=10;i++)
		{
                cout<<endl;
                for(int j=1;j<=10;j++){
                        zakryj[y][x]='B';
                        cout<<zakryj[i][j]<<"  ";
                }
        }
}
void wyswietl(int x, int y, char zakryj[11][11], int ilosc)
{
        cout<<endl;
        for (int i=1;i<=10;i++)
		{
                cout<<endl;
                for(int j=1;j<=10;j++){
                        zakryj[y][x]=konwersja(ilosc);
                        cout<<zakryj[i][j]<<"  ";
                }
        }
}
void gra()

{
        int n,x,y,s,d,puste;
        while(1){
                cout<<"Podaj ilosc bomb max[99]: ";                     //podajemy ilosc bomb
                cin>>n;
                if (n>=100)continue;
                else break;
        }

        srand(time(0));
        int tab[11][11];                                        //generowanie pustych pól
        for (int i=1;i<=10;i++){
                for(int j=1;j<=10;j++)
				{
                        tab[i][j]=0;                    
                }
        }
                for(int k=0;k<n;k++)
				{
                                s=1+rand()%10;                  //losowanie bomb na planszy
                                d=1+rand()%10;
                                tab[s][d]=1;   
                }

        puste=100-n;
        cout<<"Ilosc bomb na planszy: "<<n<<endl;
                char zakryj[11][11];
        for (int i=1;i<=10;i++)
		{
                cout<<endl;
                for(int j=1;j<=10;j++)
				{
                        zakryj[i][j]='-';                       //zakrywanie bomb znakiem '-'
                        cout<<zakryj[i][j]<<"  ";
                }
        }
        while(1)
		{
                cout<<endl<<endl;
                int ilosc=0;
        cout<<"Podaj wspolrzedne punktu: "<<endl;
        cout<<"x= ";
        cin>>x;
        cout<<"y= ";
        cin>>y;
        if(zakryj[y][x]!='-')continue;
                if(tab[y][x]==1)
				{
                        wyswietl2(x,y,zakryj);
                        cout<<endl<<endl;
                        cout<<"Bomba, przegrales!"<<endl<<endl;
                        break;
                }
                if (x<=10 && y<=10)
				{
                        if(tab[y][x]==0)
						{
                                if(tab[y][x-1]==1)ilosc++;
                                if(tab[y-1][x]==1)ilosc++;
                                if(tab[y-1][x-1]==1)ilosc++;                    //sprawdzanie
                                if(tab[y+1][x-1]==1)ilosc++;                    //czy wokół punktu
                                if(tab[y+1][x]==1)ilosc++;                      //znajdują się bomby
                                if(tab[y-1][x+1]==1)ilosc++;
                                if(tab[y][x+1]==1)ilosc++;
                                if(tab[y+1][x+1]==1)ilosc++;
                                
                                wyswietl(x,y,zakryj,ilosc);
                                puste--;
                                if(puste==0){cout<<endl<<"Wygrales!"<<endl<<endl;break;}
                                cout<<endl<<endl;
                                cout<<"Pozostalo "<<puste<<" pol do odkrycia";
                                continue;
                        }
                }
        }
}
int main()
{
        char kont;
cout<<" SAPER "<<endl<<endl<<endl;
        while(1)
		{
                gra();
                cout<<"Grasz jeszcze raz?"<<endl<<"t - aby grac dalej..."<<endl<<"n - aby zakonczyc..."<<endl;
                cin>>kont;
                if (kont=='t' || kont=='T'){system("cls");continue;}
                else break;
        }
        cout<<endl;
        system("pause");
        return 0;
}

0

Już poprawiałem ci tą konwersję i znowu wyłazisz z tym ...
char konwersja(int ilosc) { return (char)('0'+ilosc); }

0

Żeby pola sięodkrywały masz algorytm flood fill, polecam osmiokierunkowy, i tworzyć listę sprawdzonych, by nie sprawdzać pól kilka razy.

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