Gra [dlaczego krzyżyk nie wygrywa]

0

Witam wszystkich. Piszę grę kółko-krzyżyk o rozmiarach planszy 10x10, 5 skreslen ma wygrywać. Mam z kodem dwa problemy-po pierwsze gdy wygrywa kólko to program sie wylancza, natomiast gry wygrywa krzyzyk to nic sie nie dzieje. Byłbym wdzieczny za rady i wskazówki jak usprawnic moj program
Oto kod:
#include<stdio.h>
#include<stdlib.h>
char znak;
char pole[10][10];
int x,y,liczba,licznik=0;
using namespace std;

void wyswietl()
{
printf (" AXIS X\n");
printf (" 0 1 2 3 4 5 6 7 8 9\n");
printf (" -----------------------------\n");
printf (" 0 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][0], pole[1][0], pole[2][0], pole[3][0], pole[4][0], pole[5][0], pole[6][0], pole[7][0], pole[8][0], pole[9][0]);
printf (" -----------------------------\n");
printf (" 1 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][1], pole[1][1], pole[2][1], pole[3][1], pole[4][1], pole[5][1], pole[6][1], pole[7][1], pole[8][1], pole[9][1]);
printf (" -----------------------------\n");
printf (" 2 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][2], pole[1][2], pole[2][2], pole[3][2], pole[4][2], pole[5][2], pole[6][2], pole[7][2], pole[8][2], pole[9][2]);
printf (" -----------------------------\n");
printf (" 3 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][3], pole[1][3], pole[2][3], pole[3][3], pole[4][3], pole[5][3], pole[6][3], pole[7][3], pole[8][3], pole[9][3]);
printf (" -----------------------------\n");
printf (" 4 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][4], pole[1][4], pole[2][4], pole[3][4], pole[4][4], pole[5][4], pole[6][4], pole[7][4], pole[8][4], pole[9][4]);
printf (" AXIS Y -----------------------------\n");
printf (" 5 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][5], pole[1][5], pole[2][5], pole[3][5], pole[4][5], pole[5][5], pole[6][5], pole[7][5], pole[8][5], pole[9][5]);
printf (" -----------------------------\n");
printf (" 6 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][6], pole[1][6], pole[2][6], pole[3][6], pole[4][6], pole[5][6], pole[6][6], pole[7][6], pole[8][6], pole[9][6]);
printf (" -----------------------------\n");
printf (" 7 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][7], pole[1][7], pole[2][7], pole[3][7], pole[4][7], pole[5][7], pole[6][7], pole[7][7], pole[8][7], pole[9][7]);
printf (" -----------------------------\n");
printf (" 8 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][8], pole[1][8], pole[2][8], pole[3][8], pole[4][8], pole[5][8], pole[6][8], pole[7][8], pole[8][8], pole[9][8]);
printf (" -----------------------------\n");
printf (" 9 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][9], pole[1][9], pole[2][9], pole[3][9], pole[4][9], pole[5][9], pole[6][9], pole[7][9], pole[8][9], pole[9][9]);
printf (" -----------------------------\n");

}

void czyszczenie()
{
for(int j=0;j<=9;j++)
for(x=0; x<=9; x++) pole[x][j]=' ';
}
bool sprawdzenie()
{
int licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j][i+1]=='O')
licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[i][j]=='O')
if(licz<5)
if(pole[i+1][j]=='O')
licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
	if(pole[j][i]=='O')
		if(licz<5)
			if(pole[j+1][i+1]=='O')
				licz++;
}
for(int i=9, j=9;i<=0;i--,j--)
{
	if(pole[j][i]=='O')
		if(licz<5)
			if(pole[j-1][i-1]=='O')
				licz++;
}
if(licz==4)
	return 0;
	
	
else return 1;

}

void gra(int nr)
{

 printf(" Tic Tac Toe\n");
 printf(" PLAYER 1: CIRCLE\n"); 
 printf(" PLAYER 2: CROSS\n");
 wyswietl();     
 printf(" PLAYER Move\n");
 printf(" Give Coordinate:\n");
 printf(" Give X:");
 scanf("%d", &x);
 printf(" Give Y:");
 scanf("%d", &y);
 if (pole[x][y]==' ') 
 {    
     pole[x][y]=znak;
     licznik++;
 }
 else 
 {
     printf("This Field Has Already Been Used, CHOOSE ANOTHER ONE.\n");
	 getchar();
     if (liczba==1) liczba=2; else liczba=1; 
     getchar();
 }

}

int main()
{
znak='O';
liczba=1;
czyszczenie();
do
{
gra(liczba);
system("cls");
if(liczba==1)
{
liczba=2;
znak='X';
}
else
{
liczba=1;
znak='O';
}
if (licznik==100) break;
}
while ( (sprawdzenie()));
printf(" Tic Tac Toe");
wyswietl();
if (!sprawdzenie())
{
if(liczba==1) liczba=2; else liczba=1;
printf(" PLAYER HAS WON !!!");
}
else printf("DRAW!");
getchar();
}

0

ups nie wiem czemu w planszy troche krzywo wkleily sie printf'y, ale to w sumie nic nie zmienia

0
  1. Te wszystkie printfy załatwiają dwie pętle for i jeden printf...
  2. Nie umiesz używać for(). Albo przekraczasz zakresy tablicy jak tu:
for(int i=0;i<=9;i++)

Albo tworzysz pętle która nie wykona sie ani razu jak tu:

for(int i=9, j=9;i<=0;i--,j--)
0

Czy mogłbyś zaznaczyc te linijki kodu ktore wymagaja zmian?

0

Nie mówie że tylko te linijki, ale:
każda z pętlą for + cały początek z tymi printfami. Może jest więcej blędów.

0

Czy mogłbyś mi to poprawić? Nie za bardzo rozumiem jak to zrobić.

0

jeśli chodzi o sprawdzanie czy to jest ruch wygrywający.
Napisz sobie funkcję w której podasz pozycję na której wykonano ruch. Ta metoda powinna sprawdzać tylko te możliwości, które krzyżują się z tym polem.
A twoja metoda sprawdzania zwycięstwa jest zupełnie bezsensu. Na dodatek przekraczasz zakres tablicy.

0

#include<stdio.h>
#include<stdlib.h>
char znak;
char pole[10][10];
int x,y,liczba,licznik=0;
using namespace std;

void wyswietl()
{
printf (" AXIS X\n");
printf (" 0 1 2 3 4 5 6 7 8 9\n");
printf (" -----------------------------\n");
printf (" 0 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][0], pole[1][0], pole[2][0], pole[3][0], pole[4][0], pole[5][0], pole[6][0], pole[7][0], pole[8][0], pole[9][0]);
printf (" -----------------------------\n");
printf (" 1 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][1], pole[1][1], pole[2][1], pole[3][1], pole[4][1], pole[5][1], pole[6][1], pole[7][1], pole[8][1], pole[9][1]);
printf (" -----------------------------\n");
printf (" 2 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][2], pole[1][2], pole[2][2], pole[3][2], pole[4][2], pole[5][2], pole[6][2], pole[7][2], pole[8][2], pole[9][2]);
printf (" -----------------------------\n");
printf (" 3 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][3], pole[1][3], pole[2][3], pole[3][3], pole[4][3], pole[5][3], pole[6][3], pole[7][3], pole[8][3], pole[9][3]);
printf (" -----------------------------\n");
printf (" 4 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][4], pole[1][4], pole[2][4], pole[3][4], pole[4][4], pole[5][4], pole[6][4], pole[7][4], pole[8][4], pole[9][4]);
printf (" AXIS Y -----------------------------\n");
printf (" 5 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][5], pole[1][5], pole[2][5], pole[3][5], pole[4][5], pole[5][5], pole[6][5], pole[7][5], pole[8][5], pole[9][5]);
printf (" -----------------------------\n");
printf (" 6 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][6], pole[1][6], pole[2][6], pole[3][6], pole[4][6], pole[5][6], pole[6][6], pole[7][6], pole[8][6], pole[9][6]);
printf (" -----------------------------\n");
printf (" 7 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][7], pole[1][7], pole[2][7], pole[3][7], pole[4][7], pole[5][7], pole[6][7], pole[7][7], pole[8][7], pole[9][7]);
printf (" -----------------------------\n");
printf (" 8 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][8], pole[1][8], pole[2][8], pole[3][8], pole[4][8], pole[5][8], pole[6][8], pole[7][8], pole[8][8], pole[9][8]);
printf (" -----------------------------\n");
printf (" 9 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][9], pole[1][9], pole[2][9], pole[3][9], pole[4][9], pole[5][9], pole[6][9], pole[7][9], pole[8][9], pole[9][9]);
printf (" -----------------------------\n");

}

void czyszczenie()
{
for(int j=0;j<=9;j++)
for(x=0; x<=9; x++) pole[x][j]=' ';
}
bool sprawdzenie()
{
int licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j][i+1]=='O')
licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[i][j]=='O')
if(licz<5)
if(pole[i+1][j]=='O')
licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
	if(pole[j][i]=='O')
		if(licz<5)
			if(pole[j+1][i+1]=='O')
				licz++;
}
  for(int i=0,j=8;i<=9;i++,j--)

{
if(pole[i][j]=='O')
if(licz<5)
if(pole[i+1][j-1]=='O')
licz++;
}
if(licz==4)
return 0;

else return 1;


licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
	if(pole[j][i]=='X')
		if(licz<5)
			if(pole[j][i+1]=='X')
				licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
	if(pole[i][j]=='X')
		if(licz<5)
			if(pole[i+1][j]=='X')
				licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
	if(pole[j][i]=='X')
		if(licz<5)
			if(pole[j+1][i+1]=='X')
				licz++;
}
for(int i=9, j=9;i<=0;i--,j--)
{
	if(pole[j][i]=='X')
		if(licz<5)
			if(pole[j-1][i-1]=='X')
				licz++;
}
if(licz==4)
	return 0;
	
	
else return 1;

}

void gra(int nr)
{

 printf(" Tic Tac Toe\n");
 printf(" PLAYER 1: CIRCLE\n"); 
 printf(" PLAYER 2: CROSS\n");
 wyswietl();     
 printf(" PLAYER Move\n");
 printf(" Give Coordinate:\n");
 printf(" Give X:");
 scanf("%d", &x);
 printf(" Give Y:");
 scanf("%d", &y);
 if (pole[x][y]==' ') 
 {    
     pole[x][y]=znak;
     licznik++;
 }
 else 
 {
     printf("This Field Has Already Been Used, CHOOSE ANOTHER ONE.\n");
	 getchar();
     if (liczba==1) liczba=2; else liczba=1; 
     getchar();
 }

}

int main()
{
znak='O';
liczba=1;
czyszczenie();
do
{
gra(liczba);
system("cls");
if(liczba==1)
{
liczba=2;
znak='X';
}
else
{
liczba=1;
znak='O';
}
if (licznik==100) break;
}
while ( (sprawdzenie()));// || (licznik==9) );
printf(" Tic Tac Toe");
wyswietl();
if (!sprawdzenie())
{
if(liczba==1) liczba=2; else liczba=1;
printf(" PLAYER HAS WON !!!");
}
else printf("DRAW!");
getchar();
}
Probuje to zrobic za poomoca 8 petli ale cos mi nie wychodzi, kolko dziala w pionie, poziomie i na ukos z lewj do prawej, ale juz z prawej do lewej nie, podobnie jak krzyzyk, mowiliscie ze mozna to zamienic na jakas funkcje, niestety nie wiem jak to zrobic, ktos mogłby pomoc?

0

Zrobilem 8 pętli-po 4 dla'O' i 'X'. Jedna sprawdza poziomo druga pionowo, kolejne na ukos w obie strony,niestety w przypadku gdt zaznaczam O lub X 5 pod rzad na ukos od prawej do lewj to nic sie nie dzieje, natomiast w pozostalych przypadkach program wysypuje sie zamiast wysciwtli z printf'a player has won, pisaliscie żeby zrobic to za pomoca funkcji, niestety nie mam pojecia jak. Czy ktos moglby mi ja napisac ew. pomoc w usprawnieniu tych petli?
licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j][i+1]=='O')
licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[i][j]=='O')
if(licz<5)
if(pole[i+1][j]=='O')
licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j+1][i+1]=='O')
licz++;
}
for(int i=9, j=9;i<=0;i--,j--)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j-1][i-1]=='O')
licz++;
}
if(licz==4)
return 0;

else return 1;

0

#include<stdio.h>
#include<stdlib.h>
char znak;
char pole[10][10];
int x,y,liczba,licznik=0;
using namespace std;

void wyswietl()
{
printf (" AXIS X\n");
printf (" 0 1 2 3 4 5 6 7 8 9\n");
printf (" -----------------------------\n");
printf (" 0 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][0], pole[1][0], pole[2][0], pole[3][0], pole[4][0], pole[5][0], pole[6][0], pole[7][0], pole[8][0], pole[9][0]);
printf (" -----------------------------\n");
printf (" 1 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][1], pole[1][1], pole[2][1], pole[3][1], pole[4][1], pole[5][1], pole[6][1], pole[7][1], pole[8][1], pole[9][1]);
printf (" -----------------------------\n");
printf (" 2 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][2], pole[1][2], pole[2][2], pole[3][2], pole[4][2], pole[5][2], pole[6][2], pole[7][2], pole[8][2], pole[9][2]);
printf (" -----------------------------\n");
printf (" 3 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][3], pole[1][3], pole[2][3], pole[3][3], pole[4][3], pole[5][3], pole[6][3], pole[7][3], pole[8][3], pole[9][3]);
printf (" -----------------------------\n");
printf (" 4 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][4], pole[1][4], pole[2][4], pole[3][4], pole[4][4], pole[5][4], pole[6][4], pole[7][4], pole[8][4], pole[9][4]);
printf (" AXIS Y -----------------------------\n");
printf (" 5 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][5], pole[1][5], pole[2][5], pole[3][5], pole[4][5], pole[5][5], pole[6][5], pole[7][5], pole[8][5], pole[9][5]);
printf (" -----------------------------\n");
printf (" 6 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][6], pole[1][6], pole[2][6], pole[3][6], pole[4][6], pole[5][6], pole[6][6], pole[7][6], pole[8][6], pole[9][6]);
printf (" -----------------------------\n");
printf (" 7 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][7], pole[1][7], pole[2][7], pole[3][7], pole[4][7], pole[5][7], pole[6][7], pole[7][7], pole[8][7], pole[9][7]);
printf (" -----------------------------\n");
printf (" 8 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][8], pole[1][8], pole[2][8], pole[3][8], pole[4][8], pole[5][8], pole[6][8], pole[7][8], pole[8][8], pole[9][8]);
printf (" -----------------------------\n");
printf (" 9 |%c |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", pole[0][9], pole[1][9], pole[2][9], pole[3][9], pole[4][9], pole[5][9], pole[6][9], pole[7][9], pole[8][9], pole[9][9]);
printf (" -----------------------------\n");

}

void czyszczenie()
{
for(int j=0;j<=9;j++)
for(x=0; x<=9; x++) pole[x][j]=' ';
}
bool sprawdzenie()
{
int licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j][i+1]=='O')
licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[i][j]=='O')
if(licz<5)
if(pole[i+1][j]=='O')
licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j+1][i+1]=='O')
licz++;
}
for(int i=9, j=9;i<=0;i--,j--)
{
if(pole[j][i]=='O')
if(licz<5)
if(pole[j-1][i-1]=='O')
licz++;
}
if(licz==4)
return 0;

else return 1;

licz=0;
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[j][i]=='X')
if(licz<5)
if(pole[j][i+1]=='X')
licz++;
}
for(int j=0;j<=9;j++)
for(int i=0;i<=9;i++)
{
if(pole[i][j]=='X')
if(licz<5)
if(pole[i+1][j]=='X')
licz++;
}

for(int i=0, j=0;i<=9;i++,j++)
{
if(pole[j][i]=='X')
if(licz<5)
if(pole[j+1][i+1]=='X')
licz++;
}
for(int i=9, j=9;i<=0;i--,j--)
{
if(pole[j][i]=='X')
if(licz<5)
if(pole[j-1][i-1]=='X')
licz++;
}
if(licz==4)
return 0;

else return 1;

}

void gra(int nr)
{

printf(" Tic Tac Toe\n");
printf(" PLAYER 1: CIRCLE\n"); 
printf(" PLAYER 2: CROSS\n");
wyswietl();     
printf(" PLAYER Move\n");
printf(" Give Coordinate:\n");
printf(" Give X:");
scanf("%d", &x);
printf(" Give Y:");
scanf("%d", &y);
if (pole[x][y]==' ') 
{    
    pole[x][y]=znak;
    licznik++;
}
else 
{
    printf("This Field Has Already Been Used, CHOOSE ANOTHER ONE.\n");

getchar();
if (liczba==1) liczba=2; else liczba=1;
getchar();
}
}

int main()
{
znak='O';
liczba=1;
czyszczenie();
do
{
gra(liczba);
system("cls");
if(liczba==1)
{
liczba=2;
znak='X';
}
else
{
liczba=1;
znak='O';
}
if (licznik==100) break;
}
while ( (sprawdzenie()));
printf(" Tic Tac Toe");
wyswietl();
if (!sprawdzenie())
{
if(liczba==1) liczba=2; else liczba=1;
printf(" PLAYER HAS WON !!!");
}
else printf("DRAW!");
getchar();
}

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