algorytm szukania 3 znaków w grze kolko i krzyzyk

0

Witma

mam problem z algorytmem sprawdzajacym czy na planszy ktos wygrał stawiajac 3 znaki, na planszy 10x10

znajduje mi wygrana tylko jak mój ciag X czy O rozpoczyna sie od miejsc 0,0 albo 0,1 gdzie x to nr wiersza a 2 liczba to kolumny
prosze o jaks pomoc

bool wygrana(int x,int y){
		int licznik = 0;

		for(x=0; x< wymiar; x++){
			for(y=0; y<wymiar;y++){
		
			if (p[x][y]->getkrzyzyk()){
		

		for(int i = x; i < 3; i++)//poziomo
		{
			if(i  >= 3)
				break;
			if(p[i][y]->getkrzyzyk())
				licznik++;
		}
		if(licznik == 3)
			return true;
	
		else licznik = 0;
			

		for(int i = y; i < 3; i++)//pionowo
		{
			if(i  >= 3)
				break;
			if(p[x][i]->getkrzyzyk())
				licznik++;
		}
		if(licznik == 3)
			return true;
		else licznik = 0;
	
		for(int i = 0; i < 3; i++)//ukośnie 1
		{
			if(x + i >= 3 || y + i >= 3)
				break;
			if(p[x + i][y + i]->getkrzyzyk())
				licznik++;
		}
		if(licznik == 3)
			return true;
		else 
			licznik = 0;


		return false;
		}
	
	
			

			
		
	
		
		
			if (p[x][y]->getkolko()){
		

		for(int i = x; i < 3; i++)//poziomo
		{
			if(i  >= 3)
				break;
			if(p[i][y]->getkolko())
				licznik++;
		}
		if(licznik == 3)
			return true;
	
		else licznik = 0;
			

		for(int i = y; i < 3; i++)//pionowo
		{
			if(i  >= 3)
				break;
			if(p[x][i]->getkolko())
				licznik++;
		}
		if(licznik == 3)
			return true;
		else licznik = 0;
	
		for(int i = 0; i < 3; i++)//ukośnie 1
		{
			if(x + i >= 3 || y + i >= 3)
				break;
			if(p[x + i][y + i]->getkolko())
				licznik++;
		}
		if(licznik == 3)
			return true;
		else 
			licznik = 0;



		return false;
	}
			}
		}
	



		
		 
	}

0

Tu masz błąd

                for(int i = x; i < 3; i++)//poziomo
                {
                        if(i  >= 3)
                                break;
                        if(p[i][y]->getkrzyzyk())
                                licznik++;
                }

Powinno być

                for(int i = x; i < x+3; i++)//poziomo
                {
                        if(i  >= x+3)
                                break;
                        if(p[i][y]->getkrzyzyk())
                                licznik++;
                }

Tego break tez nie rozumiem. For już to załatwi.

                        if(i  >= 3)
                                break;

Po drugie co jeśli x = 10? Nie masz zabezpieczenia przed przekroczeniem rozmiarów planszy.
W analogicznych innych miejscach tez masz ten błąd

0

if(i >= 3)
break;

mail wlasnie pelnic role tego zabazpieczenia przed i wiekszym od planszy

if(i > wymiar)
break;

jak zmona sprawdzac remis na takiej planszy i czy w tej petli trzeba dopisac spr w petli nie do x+3 tylko jeszce x-3?

0

Jeżeli twoja funkcja mówi że nie ma trójki i wszystkie pola są zapełnione to masz remis

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