Konsolowa gra w piłkarzyki – jak dodać logikę?

0

cześc oto mój kod gry konsolowej do rozgrywki tekstowej bez grafiki

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
   int liczba1;
   int LiczbaPrzeciwna;
   int tablica[100] = { 0 };
   int index = 0;

   do{
       cin >> liczba1;

       if(liczba1 == 0) {
       LiczbaPrzeciwna = 4;
       }
       if(liczba1 == 1) {
       LiczbaPrzeciwna = 5;
       }
       if(liczba1 == 2) {
       LiczbaPrzeciwna = 6;
       }
       if(liczba1 == 3) {
       LiczbaPrzeciwna = 7;
       }
       if(liczba1 == 4) {
       LiczbaPrzeciwna = 0;
       }
       if(liczba1 == 5) {
       LiczbaPrzeciwna = 1;
       }
       if(liczba1 == 6) {
       LiczbaPrzeciwna = 2;
       }
       if(liczba1 == 7) {
       LiczbaPrzeciwna = 3;
       }

       tablica[index] += liczba1;
       index++;

       system( "cls" );
       cout << "\nMozliwe posuniecia to:";
       for(int i=0; i<8; i++) {
           if(LiczbaPrzeciwna!=i) {
                   cout << "\n posuniecie: " << i;
           }
       }
       cout<< "\n Podaj kolejna liczbe: ";
   }while(liczba1 == 0 || liczba1 == 1 || liczba1 == 2 || liczba1 == 3 || liczba1 == 4 || liczba1 == 5 ||liczba1 == 6 || liczba1 == 7);

   system( "cls" );
   //wygenerowanie zapisu partii
   for(int i=0; i<10; i++) {
       cout << i+1 << ". " << tablica[i] << " " << tablica[i+1] << " ";
   }

   return 0;
}

gra sie w nią tak że liczby od 0-7 reprezentują kierunek ruchu

701
6 2
543

północ 0 poludnie 4 wschód 2 zachód 6 połnocny zachód 7 połnocny wschód 1 południowy zachód 5 południowy wschód 3

gra sie rozgrywa na boisku o wymiarach 8x10. Wzoruje sie na piłkarzykach z kurnika
Jak mogę dodać sprawdzanie czy ruch jest legalny albo krawędzie? Czy macie jakieś porady albo sugestie lub jak usprawnić ten program żeby mógł w pełni odwzorować samą logike tak jak w prawdziwej grze

1
gnollmaruder napisał(a):

Jak mogę dodać sprawdzanie czy ruch jest legalny albo krawędzie? Czy macie jakieś porady albo sugestie lub jak usprawnić ten program żeby mógł w pełni odwzorować samą logike tak jak w prawdziwej grze

Napisz sobie odpowiednie funkcje robiące to co napisałeś ;)
Np. jak ktoś idzie do góry to sprawdzasz, czy po ruchu w górę nie wejdziesz na rząd tablicy o indeksie mniejszym niż zero. Jeśli wyjdziesz, to ruch jest niemożliwy (zwracasz false).
Słowa klucze:

  • współrzędne x, y
  • tablica dwuwymiarowa.

Twoja tablica ma 100 elementów, a na końcu wypisujesz tylko 10 - czuj się ostrzeżony ;)

0

cześć dzięki Spine za pomocne rady :)
przebudowałem swój program pod kątem tablic dwuwymiarowych jednak cieżko mi przekonwertować to na funkcje czy macie jakieś sugestie?
oraz potrzebuje porady jak ugryźć kwestie AI żeby np wyszukiwał najlepsze ruchy

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int x = 6;
    int y = 5;
    int Kierunek = 0;
    int tablica[50] = { 0 };
    int index = 0;


    int Board[13][11] = {
   //0 1 2 3 4 5 6 7 8 9 10
	{0,0,0,0,0,0,0,0,0,0,0}, //0
	{0,0,0,0,0,0,0,0,0,0,0}, //1
	{0,0,0,0,0,0,0,0,0,0,0}, //2
	{0,0,0,0,0,0,0,0,0,0,0}, //3
	{0,0,0,0,0,0,0,0,0,0,0}, //4
	{0,0,0,0,0,0,0,0,0,0,0}, //5
	{0,0,0,0,0,9,0,0,0,0,0}, //x6, y5 -> 9 oznacza obecną pozycje
	{0,0,0,0,0,0,0,0,0,0,0}, //7
	{0,0,0,0,0,0,0,0,0,0,0}, //8
	{0,0,0,0,0,0,0,0,0,0,0}, //9
	{0,0,0,0,0,0,0,0,0,0,0}, //10
	{0,0,0,0,0,0,0,0,0,0,0}, //11
	{0,0,0,0,0,0,0,0,0,0,0}  //12
	};

	//z kazdego punktu mozliwe 8 ruchow
	int PamiecPlanszy[143][8] = {
	//indeks wierszy // srodek to PamiecPlanszy[71][0]
	//      1                  2                3                   4                   5                   6               7                   8                   9                   10                 11
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,8,8,8,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, //1
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,8}, {0,1,2,8,8,8,6,7}, {0,1,2,8,8,8,6,7}, {0,8,8,8,8,8,6,7}, {8,8,8,8,8,8,8,8}, {0,1,2,8,8,8,8,8}, {0,1,2,8,8,8,6,7}, {0,1,2,8,8,8,6,7}, {0,8,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, //2
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //3
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //4
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //5
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //6
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //7
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //8
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //9
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //10
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}, {0,8,8,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //11
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,8,6,7}, {8,8,2,3,4,5,6,8}, {8,8,2,3,4,5,6,8}, {8,8,8,8,4,5,6,8}, {8,8,8,8,8,8,8,8}, {8,2,3,4,8,8,8,8}, {8,8,2,3,4,5,6,8}, {8,8,2,3,4,5,6,8}, {0,1,2,8,4,5,6,7}, {0,1,2,3,4,5,6,7}, //12
	{0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,8,8,8,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}  //13
	};



    //glowna petla programu
    do{



        cin >> Kierunek;
        system( "cls" );



        if(Kierunek == 0) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[(x-1)*11+y][4] != 4) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][0] = Kierunek;
                    x--;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 1) {
            if( PamiecPlanszy[(x-1)*11+y][1] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][1] == 8 || PamiecPlanszy[x*11+y+1][1] == 8 || PamiecPlanszy[(x+1)*11+y+1][1] == 8 || PamiecPlanszy[(x+1)*11+y][1] == 8 || PamiecPlanszy[(x+1)*11+y-1][1] == 8 || PamiecPlanszy[x*11+y-1][1] == 8 || PamiecPlanszy[(x-1)*11+y-1][1] == 8 ) {
                if(PamiecPlanszy[(x-1)*11+y+1][5] != 5) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][1] = Kierunek;
                    x--;
                    y++;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 2) {
            if( PamiecPlanszy[(x-1)*11+y][2] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][2] == 8 || PamiecPlanszy[x*11+y+1][2] == 8 || PamiecPlanszy[(x+1)*11+y+1][2] == 8 || PamiecPlanszy[(x+1)*11+y][2] == 8 || PamiecPlanszy[(x+1)*11+y-1][2] == 8 || PamiecPlanszy[x*11+y-1][2] == 8 || PamiecPlanszy[(x-1)*11+y-1][2] == 8 ) {
                if(PamiecPlanszy[x*11+y+1][2] != 2) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][2] = Kierunek;
                    y++;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 3) {
            if( PamiecPlanszy[(x-1)*11+y][3] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][3] == 8 || PamiecPlanszy[x*11+y+1][3] == 8 || PamiecPlanszy[(x+1)*11+y+1][3] == 8 || PamiecPlanszy[(x+1)*11+y][3] == 8 || PamiecPlanszy[(x+1)*11+y-1][3] == 8 || PamiecPlanszy[x*11+y-1][3] == 8 || PamiecPlanszy[(x-1)*11+y-1][3] == 8 ) {
                if(PamiecPlanszy[(x+1)*11+y+1][7] != 7) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][3] = Kierunek;
                    x++;
                    y++;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 4) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[(x+1)*11+y][0] != 0) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][4] = Kierunek;
                    x++;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 5) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[(x+1)*11+y-1][1] != 1) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][5] = Kierunek;
                    x++;
                    y--;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 6) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[x*11+y-1][2] != 2) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][6] = Kierunek;
                    y--;
                    Board[x][y] = 9;
                }
            }
        }

        if(Kierunek == 7) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[(x-1)*11+y-1][3] != 3) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][7] = Kierunek;
                    x--;
                    y--;
                    Board[x][y] = 9;
                }
            }
        }

        //prymitywna wizualizacja planszy
        for(int i=0; i<13; i++) {
            cout<< "\n";
            cout<< Board[i][0];
            for(int j=1; j<11; j++) {
                cout << Board[i][j];
            }
        }



        //Wypisuje indeksy PamieciPlanszy
        cout<< "\n";

        for(int i=0; i<143; i++) {
            cout << "\n";
            cout << i << " numer: " <<PamiecPlanszy[i][0];
            for(int j=1; j<8; j++) {
                cout << PamiecPlanszy[i][j];
            }
            if(i<=10) {
                cout <<"   Board[" << 0 << "][" << i << "]";
            }
            if(i<22 && i>=11) {
                cout <<"   Board[" << 1 << "][" << i-11 << "]";
            }
            if(i<33 && i>=22) {
                cout <<"   Board[" << 2 << "][" << i-22 << "]";
            }
            if(i<44 && i>=33) {
                cout <<"   Board[" << 3 << "][" << i-33 << "]";
            }
            if(i<55 && i>=44) {
                cout <<"   Board[" << 4 << "][" << i-44 << "]";
            }
            if(i<66 && i>=55) {
                cout <<"   Board[" << 5 << "][" << i-55 << "]";
            }
            if(i<77 && i>=66) {
                cout <<"   Board[" << 6 << "][" << i-66 << "]";
            }
            if(i<88 && i>=77) {
                cout <<"   Board[" << 7 << "][" << i-77 << "]";
            }
            if(i<99 && i>=88) {
                cout <<"   Board[" << 8 << "][" << i-88 << "]";
            }
            if(i<110 && i>=99) {
                cout <<"   Board[" << 9 << "][" << i-99 << "]";
            }
            if(i<121 && i>=110) {
                cout <<"   Board[" << 10 << "][" << i-110 << "]";
            }
            if(i<132 && i>=121) {
                cout <<"   Board[" << 11 << "][" << i-121 << "]";
            }
            if(i<143 && i>=132) {
                cout <<"   Board[" << 12 << "][" << i-132 << "]";
            }

        }
        //koniec rozpiski

        tablica[index] += Kierunek;
        index++;

    }while(Kierunek == 0 || Kierunek == 1 || Kierunek == 2 || Kierunek == 3 || Kierunek == 4 || Kierunek == 5 ||Kierunek == 6 || Kierunek == 7);


    system( "cls" );

    //wygenerowanie zapisu partii
    for(int i=0; i<50; i++) {
        cout << i+1 << ". " << tablica[i] << " " << tablica[i+1] << " ";
    }



    return 0;
}


0

copypaste

0

Fakt, duża ilość powtarzających się elementów sprawia że ten kod bardzo traci na czytelności ale też w każdym ifie są różniące się dośc ważne detale bo w zależności od kierunku gracz znajdzie się w innej pozycji na planszy to sprawia, że nie bardzo wiem jak zrobić z tego bloku funkcje którą by można dzięki petli for wywołać 8 razy z uwzględnieniem różnych wartości ifów

tu kod:

        if(Kierunek == 0) {
            if( PamiecPlanszy[(x-1)*11+y][0] == 8 || PamiecPlanszy[(x-1)*11+y+1+1][0] == 8 || PamiecPlanszy[x*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y+1][0] == 8 || PamiecPlanszy[(x+1)*11+y][0] == 8 || PamiecPlanszy[(x+1)*11+y-1][0] == 8 || PamiecPlanszy[x*11+y-1][0] == 8 || PamiecPlanszy[(x-1)*11+y-1][0] == 8 ) {
                if(PamiecPlanszy[(x-1)*11+y][4] != 4) {
                    Board[x][y] = Kierunek;
                    PamiecPlanszy[x*11+y][0] = Kierunek;
                    x--;
                    Board[x][y] = 9;
                }
            }
        }

A druga sprawa to pytanie do was odnośnie AI, jakieś sugieste, na razie w tym programie gram sam ze sobą a chciałbym podać kilka pierwszych ruchów i żeby komputer przeszukał w jakiś sensowny sposób liczbe możliwości i wybrał możliwie najlepszy ruch w jaki sposób do tego podejść z czego najlepiej skorzystać waszym zdaniem

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