zliczanie kamieni na planszy

0

Witam, mam do zrobienia zadanie polegające na tym, że na planszę 6x6 mam zliczać symbole. Tzn., za 3 zajęte pola obok siebie (po skosie, pionowo lub poziomo) gracz dostaje 1 punkt, a za 6 zajętych w ten sposób pól - 2 punkty. Gracze na zmianę podają pola - jeden z nich gra losowo, jest to komputer. Mój problem polega właśnie na zliczaniu tych punktów, nie wiem za bardzo jak to zrobić. Oto mój kod, zawiera on już funkcję licz_punkty, która jest skomentowana, bo nie jestem pewny, co do jej poprawności:

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <windows.h>

using namespace std;
const int MAX_WIERSZ = 6;
const int MAX_KOLUMNA = 6;


void inicjuj_plansze (char plansza[MAX_WIERSZ][MAX_KOLUMNA])
{   for (int i=0; i<MAX_WIERSZ; i++) 
    {   for (int j=0; j<MAX_KOLUMNA; j++)
            plansza[i][j] = ' ';        
    }
}

void rysuj_plansze (const char plansza[MAX_WIERSZ][MAX_KOLUMNA])
{   for (int i=0; i<MAX_WIERSZ; i++)
    {   cout << " +-----+-----+-----+-----+-----+-----+" << endl;
        cout << i + 1 << "|";
        for(int j = 0; j < MAX_KOLUMNA; j++)
        if( plansza[i][j] == '#' )
             cout << " ### |";
        else
             cout << "     |";        
        cout << endl;
        cout << " |";
        for(int j = 0; j < MAX_KOLUMNA; j++)
        if(plansza[i][j] == '#' )
             cout << " ### |";
        else
             cout << "     |";
        
        cout << endl;
    }
    cout << " +-----+-----+-----+-----+-----+-----+" << endl;
    cout << "    A     B     C     D     E     F   " << endl;
    cout << endl << endl;
}

bool sprawdz_pole (const char plansza[MAX_WIERSZ][MAX_KOLUMNA], int wiersz, int kolumna)
{   if (wiersz < 1 || wiersz > MAX_WIERSZ)
    {   cout << "Nieprawidlowy wiersz" << endl;
        return false;
    }
    if (kolumna < 1 || kolumna > MAX_KOLUMNA)
    {   cout << "Nieprawidlowa kolumna" << endl;
        return false;
    }
    if (plansza[wiersz-1][kolumna-1] != ' ')
    {   cout << "Pole jest zajete, podaj inne wspolrzedne: " << endl;
        return false;
    }
    return true;    //  okay to place stone here
}

void wybierz_pole1 (char plansza[MAX_WIERSZ][MAX_KOLUMNA])
{   char litera;
    int wiersz;
    int kolumna;

    do
    {   cout << "Podaj wiersz (1-6): ";
        cin >> wiersz;
        cout << "Podaj kolumne (A-F): ";
        cin >> litera;
        litera = toupper(litera);
        kolumna = litera - 'A' + 1;
    }
    while (! sprawdz_pole (plansza, wiersz, kolumna));    
    plansza[wiersz-1][kolumna-1] = '#';
    
    cout << "wybrane pole to: " << wiersz << litera << endl;
}
bool sprawdz_dostepnosc2 (const char plansza[MAX_WIERSZ][MAX_KOLUMNA], int wiersz, int kolumna)
{   //  nie potrzeba sprawdzac dostepnosci pola
    return (plansza[wiersz-1][kolumna-1] == ' ');
}
void wybierz_pole2 (char plansza[MAX_WIERSZ][MAX_KOLUMNA])
{    char litera;
     int wiersz;
     int kolumna;
     
     do
     {  wiersz = rand()%6+1;
        kolumna = rand()%6+1;     
        litera = kolumna + 'A' - 1;
     }
     while ( !sprawdz_dostepnosc2 (plansza, wiersz, kolumna));    
     plansza[wiersz-1][kolumna-1] = '#';     
     cout << "Wybrane pole to: " << wiersz << litera << endl;
}

bool sprawdz_dostepnosc (char plansza[MAX_WIERSZ][MAX_KOLUMNA])
{  for (int i=0; i<MAX_WIERSZ;  i++) 
   { for (int j=0; j<MAX_KOLUMNA; j++)
      {  if (plansza[i][j] == ' ')
             return false;  
      }          
    } 
    return true;  
}
/*
void policz_punkty(char plansza[MAX_WIERSZ][MAX_KOLUMNA]) //int wiersz, int kolumna)
{
    int wiersz;
    int kolumna;
	int punkty =0;
    int licznik =0;
	for(int i=0;i<6;i++) //dla kolumny
{
if(plansza[wiersz][i]=='#') licznik++;	
}
if(licznik==3) punkty=punkty+1;
else if(licznik==6) punkty=punkty+2;
licznik=0;
for(int i=0;i<6;i++) // dla wiersza
{
if(plansza[i][kolumna]=='#') licznik++;	
}
if(licznik==3) punkty=punkty+1;
else if(licznik==6) punkty=punkty+2;
licznik=0;
if(wiersz==kolumna) //dla przekątnej (lewy gorny rog -> prawy dolny), jeżeli do niej należy
{
	for(int i=0;i<6;i++)
{
	if(plansza[i][i]=='#') licznik++;
}
if(licznik==3) punkty=punkty+1;
else if(licznik==6) punkty=punkty+2;
licznik=0;
}
if(wiersz+kolumna==5) //dla drugiej, jeżeli do niej należy
{

		for(int i=0;i<6;i++)
{
if(plansza[i][i]=='#') licznik++;
}
if(licznik==3) punkty=punkty+1;
else if(licznik==6) punkty=punkty+2;
}
return punkty;
}
*/
int main()
{   
    char plansza[MAX_WIERSZ][MAX_KOLUMNA]; 
    int numer_ruchu = 0;
    
    srand(time(NULL));
    
    inicjuj_plansze (plansza);
    while (! sprawdz_dostepnosc(plansza))
    {   
        rysuj_plansze (plansza);
        if (numer_ruchu & 1){
        wybierz_pole2 (plansza);
        system("cls");}
        else
        wybierz_pole1 (plansza); 
        numer_ruchu++;
        system("cls");
    }
    //policz_punkty(plansza);
    cout << "Koniec gry" << endl;
    rysuj_plansze (plansza);
    system ("pause");
    return 0;
}

Z góry dziękuję za pomoc :)

1

Postaraj złożyć się całość do kupy - zorganizuj planszę i informacje na temat stanów pól.

1
  1. A za 4 pola?
  2. A jeżeli to jakaś figura wyszła np prostokąt 3x4?
  3. Czy to liczy się stan obecny czy tylko dolicza się zmiana?
0

Punkty są TYLKO I WYŁĄCZNIE za 3 lub 6 kamieni obok siebie pionowo, poziomo lub na skos. Za 3 kamienie 1 punkt, za 6 - 2 punkty. Gra jest na dwóch graczy, jeden gra losowo (komputer), drugim graczem jestem ja. Punkty dodaje się po każdym ruchu, gdy rzecz jasna takowe wedle wyżej wymienionych zasad powinny zostać przyznane.

0

Jakieś sugestie?

0

Dostałeś sugestię, w skrócie: wytłumacz dokładnie co chcesz osiągnąć lub idź na forum wróżbitów.

0
kevindurant95 napisał(a):

Punkty są TYLKO I WYŁĄCZNIE za 3 lub 6 kamieni obok siebie pionowo, poziomo lub na skos. Za 3 kamienie 1 punkt, za 6 - 2 punkty. Gra jest na dwóch graczy, jeden gra losowo (komputer), drugim graczem jestem ja. Punkty dodaje się po każdym ruchu, gdy rzecz jasna takowe wedle wyżej wymienionych zasad powinny zostać przyznane.

Przecież chyba tutaj wszystko wytłumaczyłem?

0

Skoro wszystko wytłumaczyłeś to powiedz mi w którym miejscu napisano, albo z których informacji da się wywnioskować jak ma być policzony kwadrat 3x3 ?
Nie będę z ciebie wyciągać informacji siłą, nie chcesz porządnie opisać - nie musisz, ale zastanów się: jakakolwiek będzie podpowiedź - będzie to podpowiedź od człowieka, który nie rozumie dokładnie co chcesz osiągnąć (bo podałeś za mało informacji). Potrzebujesz takiej podpowiedzi?

0

Jaki kwadrat 3x3. Wszystko napisałem dokładnie, pierwszy lepszy rozgarnięty umysłowo człowiek zrozumiałby, o co chodzi. Sprawdza się stan planszy po każdym ruchu, więc gdy gracze utworzą kwadrat trzy na trzy, to ostatni ruch będzie punktowany w zależności od tego, ile trójek (może i szóstek) będzie tworzył. Nie rozumiem naprawdę po co takie spinanie. Jestem początkujący z programowania, to fakt przyznany bez bicia, jednakże nie należy myślę takiego kogoś traktować jak z góry gorszego.

0

Należy ci się traktowanie jako pospolitego debi...utanta,
Na tym forum ten algorytm był podawany wielokrotnie, np ostatnio: Kołko i krzyżyk pozycja wygrywająca
Nawet nie spróbowałeś poszukać.

1

Dziękuję, o boska Alfo i Omego.

0

Dlatego tym bardziej dziękuję, Alfo i Omego.

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