zliczanie kamieni na planszy

zliczanie kamieni na planszy
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
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:

Kopiuj
#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 :)

spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:9 dni
1

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
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?

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
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.

K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
0

Jakieś sugestie?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
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?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
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?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
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.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
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ć.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
1

Dziękuję, o boska Alfo i Omego.

_13th_Dragon
Gdyby sensownie opisałeś problem dostałbyś odpowiedź w 5 min, szukając 5-30 min, smarując na forum - prawie doba.
K9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:7
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)