Kółko i krzyżyk, tablica o rozmiarze n

0

Witam, dziś na zajęciach dostałem polecenie stworzenia gry w kółko i krzyżyk w cpp. Na początku użytkownik ma podawać n czyli rozmiar tablicy (np n=36 to tablica 6x6) a także m czyli długość łańcucha który powoduje wygranie (np tablica 6x6 ale wygranie powoduje już ułożenie 4 kółek/krzyży pod rząd). O ile na stworzenie gry z tablicą n mam jakiś pomysł to nie mam zielonego pojęcia jak rozwiązać drugi problem. Czy ktoś jest w stanie podać rozwiązanie/nakierować mnie? Zaznaczam, że jestem początkujący i w cpp piszę od miesiąca.

#include <iostream>

using namespace std;

// Funkcja rysuje planszę gry w kółko i krzyżyk
//---------------------------------------------
void plansza(char t[])
{
  for(int i = 1; i <= 36; i++)
  {
    cout << " " << t[i] << " ";
    if(i % 6)
      cout << "|";
    else if(i != 36)
      cout << "\n---+---+---+---+---+---\n";
    else cout << endl;        
  }    
}

// Funkcja zwraca true, jeśli nastąpiła
// wygrana danego zawodnika
//-------------------------------------
bool wygrana(char t[], char g)
{
  bool test;
  int i;
  
  test = false;
  for(i = 1; i <=31; i += 6)
    test |= ((t[i] == g) && (t[i+1] == g) && (t[i+2] == g)&& (t[i+3] == g)&& (t[i+4] == g)&& (t[i+5] == g));
  for(i = 1; i <= 6; i++)
    test |= ((t[i] == g) && (t[i+6] == g) && (t[i+12] == g) && (t[i+18] == g) && (t[i+24] == g) && (t[i+30] == g));
  test |= ((t[1] == g) && (t[8] == g) && (t[15] == g) && (t[22] == g) && (t[29] == g) && (t[36] == g));
  test |= ((t[6] == g) && (t[11] == g) && (t[16] == g) && (t[21] == g) && (t[26] == g) && (t[31] == g));
  if(test)
  {
    plansza(t);
    cout << "\nGRACZ " << g << " WYGRYWA!!!\n\n";
    return true;
  }
  return false;
}

// Funkcja zwraca true, jeśli na planszy nie ma już
// żadnego wolnego pola na ruch.
//-------------------------------------------------
bool remis(char t[])
{
  for(int i = 1; i <= 36; i++)
    if(t[i] == ' ') return false;
  plansza(t);
  cout << "\nREMIS !!!\n\n";
  return true;     
}

// Funkcja umożliwia ruch gracza
// Po ruchu następuje zamiana gracza
//------------------------------------
void ruch(char t[], char &gracz)
{
   int r;
   
   plansza(t);
   cout << "\nGRACZ " << gracz << " : Twoj ruch : ";
   cin >> r;
   cout << "-----------------------\n\n";
   if((r >= 1) && (r <= 36) && (t[r] == ' ')) t[r] = gracz;
   gracz = (gracz == 'O') ? 'X' : 'O';
}

main()
{
  char p[10],g,w;
  
  do
  {
    cout << "kolko i krzyzyk\n\n\n";
    for(int i = 1; i <= 36; i++) p[i] = ' ';
    g = 'O';
    while(!wygrana(p,'X') && !wygrana(p,'O') && !remis(p)) ruch(p,g);
    cout << "Jeszcze raz ? (T = TAK) : ";
    cin >> w;
    cout << "\n\n\n";
  } while((w == 'T') || (w == 't'));
}

0

Po wstawieniu znaku Z w jakąś pozycje zliczasz ile jest dokładnie takich samych znaków (w górę)+(w dół)+1 oraz (w lewo)+(w prawo)+1 oraz tak samo dwie przekątne.
Jeżeli chociaż jedna z tych liczb jest równa m to mamy wygraną.

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