Pomocy! Gra gomuku

0

Witam wszystkich musze zrobic grę gomoku ( cos jak kółko krzyzyk tylko na planszy 15x15 i aby wygrac musi być ustawionych 5 znaków)

Poniższym kodem gdy włączam grę wszystko działa tylko że na planszy 5x5 w reszcie nic się nie dzieje chociaż ustawie 5 znaków,
proszę o pomoc gdzie robię błąd :)

 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <conio.h>




/* Funkcja czyszcąca planszę */
void wyczysc(char plansza[15][15])
{
	int i, j;
	for (i = 0; i<15; i++)
	for (j = 0; j<15; j++)
		plansza[i][j] = ' ';

}


/* Funkcja rysująca planszę na ekranie */
void wypisz(char plansza[15][15])
{
	system("cls"); // czyśc ekran. Są szybsze sposoby czyszczenia, ale ten jest w miare uniwersalny

	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[0][0], plansza[0][1], plansza[0][2], plansza[0][3], plansza[0][4], plansza[0][5], plansza[0][6], plansza[0][7], plansza[0][8], plansza[0][9], plansza[0][10], plansza[0][11], plansza[0][12], plansza[0][13], plansza[0][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[1][0], plansza[1][1], plansza[1][2], plansza[1][3], plansza[1][4], plansza[1][5], plansza[1][6], plansza[1][7], plansza[1][8], plansza[1][9], plansza[1][10], plansza[1][11], plansza[1][12], plansza[1][13], plansza[1][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[2][0], plansza[2][1], plansza[2][2], plansza[2][3], plansza[2][4], plansza[2][5], plansza[2][6], plansza[2][7], plansza[2][8], plansza[2][9], plansza[2][10], plansza[2][11], plansza[2][12], plansza[2][13], plansza[2][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[3][0], plansza[3][1], plansza[3][2], plansza[3][3], plansza[3][4], plansza[3][5], plansza[3][6], plansza[3][7], plansza[3][8], plansza[3][9], plansza[3][10], plansza[3][11], plansza[3][12], plansza[3][13], plansza[3][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[4][0], plansza[4][1], plansza[4][2], plansza[4][3], plansza[4][4], plansza[4][5], plansza[4][6], plansza[4][7], plansza[4][8], plansza[4][9], plansza[4][10], plansza[4][11], plansza[4][12], plansza[4][13], plansza[4][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[5][0], plansza[5][1], plansza[5][2], plansza[5][3], plansza[5][4], plansza[5][5], plansza[5][6], plansza[5][7], plansza[5][8], plansza[5][9], plansza[5][10], plansza[5][11], plansza[5][12], plansza[5][13], plansza[5][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[6][0], plansza[6][1], plansza[6][2], plansza[6][3], plansza[6][4], plansza[6][5], plansza[6][6], plansza[6][7], plansza[6][8], plansza[6][9], plansza[6][10], plansza[6][11], plansza[6][12], plansza[6][13], plansza[6][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[7][0], plansza[7][1], plansza[7][2], plansza[7][3], plansza[7][4], plansza[7][5], plansza[7][6], plansza[7][7], plansza[7][8], plansza[7][9], plansza[7][10], plansza[7][11], plansza[7][12], plansza[7][13], plansza[7][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[8][0], plansza[8][1], plansza[8][2], plansza[8][3], plansza[8][4], plansza[8][5], plansza[8][6], plansza[8][7], plansza[8][8], plansza[8][9], plansza[8][10], plansza[8][11], plansza[8][12], plansza[8][13], plansza[8][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[9][0], plansza[9][1], plansza[9][2], plansza[9][3], plansza[9][4], plansza[9][5], plansza[9][6], plansza[9][7], plansza[9][8], plansza[9][9], plansza[9][10], plansza[9][11], plansza[9][12], plansza[9][13], plansza[9][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[10][0], plansza[10][1], plansza[10][2], plansza[10][3], plansza[10][4], plansza[10][5], plansza[10][6], plansza[10][7], plansza[10][8], plansza[10][9], plansza[10][10], plansza[10][11], plansza[10][12], plansza[10][13], plansza[10][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[11][0], plansza[11][1], plansza[11][2], plansza[11][3], plansza[11][4], plansza[11][5], plansza[11][6], plansza[11][7], plansza[11][8], plansza[11][9], plansza[11][10], plansza[11][11], plansza[11][12], plansza[11][13], plansza[11][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[12][0], plansza[12][1], plansza[12][2], plansza[12][3], plansza[12][4], plansza[12][5], plansza[12][6], plansza[12][7], plansza[12][8], plansza[12][9], plansza[12][10], plansza[12][11], plansza[12][12], plansza[12][13], plansza[12][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[13][0], plansza[13][1], plansza[13][2], plansza[13][3], plansza[13][4], plansza[13][5], plansza[13][6], plansza[13][7], plansza[13][8], plansza[13][9], plansza[13][10], plansza[13][11], plansza[13][12], plansza[13][13], plansza[13][14]);
	//printf("\n");
	printf("[%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c][%c]\n", plansza[14][0], plansza[14][1], plansza[14][2], plansza[14][3], plansza[14][4], plansza[14][5], plansza[14][6], plansza[14][7], plansza[14][8], plansza[14][9], plansza[14][10], plansza[14][11], plansza[14][12], plansza[14][13], plansza[14][14]);

}

int pelna(char plansza[15][15])
{
	int i, j;
	for (i = 0; i<15; i++)
	for (j = 0; j<15; j++)
	if (plansza[i][j] == ' ')
		return 0;
	return 1;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////

void ruch_gracza(char plansza[15][15])
{
	unsigned int i = 15, j;
	wypisz(plansza);
	printf("\nPodaj wiersz i kolumne w ktorej chcesz wstawic krzyzyk\n");
	while ((i>14) || (j>14) || (plansza[i][j] != ' '))
		scanf_s("%u %u", &i, &j);
	plansza[i][j] = 'x';
}

///////////////////////////////////////////////////////////////////////////////////////////////////////

void ruch_komputera(char plansza[15][15])
{
	unsigned int i = 15, j;
	wypisz(plansza);
	printf("\nPodaj wiersz i kolumne w ktorej chcesz wstawic kolko\n");
	while ((i>14) || (j>14) || (plansza[i][j] != ' '))
		scanf_s("%u %u", &i, &j);
	plansza[i][j] = 'O';
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////


char sprawdz(char plansza[15][15])
{
	int i;
	for (i = 0; i<15; i++)
	{
		if ((plansza[i][0] != ' ')
			&& (plansza[i][0] == plansza[i][1])
			&& (plansza[i][0] == plansza[i][2])
			&& (plansza[i][0] == plansza[i][3])
			&& (plansza[i][0] == plansza[i][4]))
			return plansza[i][0];

		if ((plansza[0][i] != ' ')
			&& (plansza[0][i] == plansza[1][i])
			&& (plansza[0][i] == plansza[2][i])
			&& (plansza[0][i] == plansza[3][i])
			&& (plansza[0][i] == plansza[4][i]))
			return plansza[0][i];

	} // for

	if ((plansza[0][0] != ' ')
		&& (plansza[0][0] == plansza[1][1])
		&& (plansza[0][0] == plansza[2][2])
		&& (plansza[0][0] == plansza[3][3])
		&& (plansza[0][0] == plansza[4][4]))
		return plansza[0][0];

	if ((plansza[2][0] != ' ')
		&& (plansza[2][0] == plansza[1][3])
		&& (plansza[2][0] == plansza[2][2])
		&& (plansza[2][0] == plansza[3][1])
		&& (plansza[2][0] == plansza[0][4]))
		return plansza[4][0];


	if (pelna(plansza) == 1)
		return 1;
	return 0;

} //sprawdz

int uzupelnij(char plansza[15][15], char c)
{
	int i, j;
	for (i = 0; i<15; i++)
	{
		for (j = 0; j<15; j++)
		{
			if ((plansza[i][j] == c) && (plansza[i][(j + 1) % 5] == c) && (plansza[i][(j + 2) % 5] == c) && (plansza[i][(j + 3) % 5] == c) 
				&& (plansza[i][(j + 4)] % 5 == ' '))
			{
				plansza[i][(j + 4) % 5] = 'o';
				return 1;
			} // if
			if ((plansza[j][i] == c) && (plansza[(j + 1) % 5][i] == c) && (plansza[(j + 2) % 5][i] == c) && (plansza[(j + 3) % 5][i] == c)
				&& (plansza[(j + 4) % 5][i] == ' '))
			{
				plansza[(j + 4) % 5][i] = 'o';
				return 1;
			} //if
		}// for
		if ((plansza[i][2 - i] == c)
			&& (plansza[(i + 1) % 5][4 - (i + 1) % 5] == c)
			&& (plansza[(i + 2) % 5][4 - (i + 2) % 5] == c)
			&& (plansza[(i + 3) % 5][4 - (i + 3) % 5] == c)
			&& (plansza[(i + 4) % 5][4 - (i + 4) % 5] == ' '))
		{
			plansza[(i + 4) % 5][4 - (i + 4) % 5] = 'o';
			return 1;
		}//if
	}//for



	return 0;
}



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main(int argc, char *argv[])
{
	int ruch = 1;
	char wynik = 0;
	char plansza[15][15];
	printf("********************************************************************************\n");
	printf("-============================== KOLKO I KRZYZYK ================================\n");
	srand(time(NULL));
	wyczysc(plansza);
	while (wynik == 0)
	{
		if (ruch == 0)
			ruch_gracza(plansza);
		else
			ruch_komputera(plansza);
		ruch = 1 - ruch;
		wynik = sprawdz(plansza);
	}
	wypisz(plansza);
	if (wynik == 1)
		printf("Remis\n");
	else
	if (wynik == 'x')
	{
		printf("Wygral gracz X\n");
		printf("Nacisnij ENTER aby kontynowac\n");
		getchar();
		getchar();
	}
	else
	{
		printf("Wygral gracz O\n");
		printf("Nacisnij ENTER aby kontynowac\n");
		getchar();
		getchar();
	}
	// for

	return 0;
}
3

W propos funkcji wypisz - myślałeś kiedyś, żeby zapisać się do tych mnichów co przepisują księgi?

(Przepraszam, nie mogłem)

1
  1. Rozumiem że nie słyszałeś nigdy o pętli? o_O
void wypisz(char plansza[15][15]){
  for (int i=0;i<15;i++){
    for(int j=0;i<15;j++){
      printf("%c", plansza[i][j]);
    }
    printf("\n");
  }
}

Do programowania używa się mózgu.

  1. Wywal cały ten twój kod, bo nie nadaje się do niczego. Następnie wypij kawę, włącz myślenie i przeczytać chociaż jeden kurs programowania w C/C++.
  2. Czy gdybyś miał napisać to samo ale dla nieznanego rozmiaru planszy podawanego przez użytkownika to zrobiłbyś to tak samo jak teraz? Albo dla planszy 1000x1000? Też wypisywałbyś wszystkie możliwości? Nie? No właśnie. Napisz to tak żeby było niezależne od rozmiaru planszy.
0
system("cls"); // czyśc ekran. Są szybsze sposoby czyszczenia, ale ten jest w miare uniwersalny

To co w komentarzu to jakieś majaczenia chorego umysłowo.

0

Dzięki Shalom, pomogło i ułatwiło kod. Jeszcze prosił bym o jakąś wskazówkę co do funkcji sprawdzania tablicy.

0

Podpowiedź może być tylko jedna: użyj mózgu a nie palców kiedy programujesz.

  1. Zrób normalną dekompozycje tych wszystkich funkcji, tak żeby miały < 10 linijek kodu i od razu było wiadomo co robią. Podziel to wszystko na małe funkcje które wiadomo-co-sprawdzają. U ciebie masz tylko masę porównań, Czemu taki blok z porównaniami nie jest wyjęty jako funkcja np. "sprawdzPionowo" albo "sprawdzPoziomo"? Wtedy dużo łatwiej czytałoby się kod i łatwiej byłoby znaleźć potencjalne błędy.
  2. To samo z funkcją "uzupelnij". Jej treść to jakiś WTF.

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