Vier op een rij - algoritme om winnaar te bepalen

Status
Niet open voor verdere reacties.

dionikink

Gebruiker
Lid geworden
14 mrt 2009
Berichten
83
Hallo allemaal,

Ik ben bezig met het maken van Vier Op Een Rij in Java. Op dit moment werkt eigenlijk het meeste prima, alleen de controle of er een winnaar is werkt niet. Ik heb de volgende code geschreven om te kijken of een speler wint in het horizontale vlak.
LET OP: Ik wil dat niet per se vaststaat dat iemand wint wanneer hij 4 'marks' op een rij heeft (vandaar de CONNECT constante). Stel dat ik CONNECT verander in 5, dan zou de code nog steeds moeten werken.

Code:
private static final int CONNECT = 4;
private int height = 6;
private int width = 7;

public boolean winHorizontal(Mark mark) {
	boolean result = false;
		
	for (int row = 0; row < height; row++) {
		int count = 0;
		
		for (int column = 0; column < width - CONNECT + 1; column++) {
			for (int next = 0; next < CONNECT; next++) {
				if (board[row][column + next] == mark) {
					count++;
					
					if (count >= CONNECT) {
						result = true;
						break;
					}
				} else {
					count = 0;
				}
			}
			
		}
	}
	return result;
}

Wat klopt er niet aan deze code? Hij werkt namelijk niet goed.
Bij voorbaat dank!

EDIT: De bovenstaande code werkt wanneer ik vanaf kolom 1 t/m kolom 4 een bepaalde mark plaats. Als ik vervolgens probeer om van 2 t/m 5 een bepaalde mark te plaatsen, denkt de code dat ik bij kolom 4 (dat is dus pas 3 marks vanaf 2) al gewonnen heb. Hetzelfde geldt voor alle andere mogelijkheden, behalve van kolom 7 t/m kolom 4 (dus van rechts naar links).
 
Laatst bewerkt:
De oplossing kan een recursieve loop zijn


dus je hebt een matrix van posities dan kan je door de zwaartekracht enkel
onder je rechtsonder linksonder links en rechts en linksboven en rechtboven lopen
dus zolang je je eigen kleur tegenkomt zal je verderlopen met ++ zo tel je het aantal stappen dat je zet
bij terugkeer heb je een aantal die je vergelijkt.

dus moet je altijd de tegenovergestelde directie controleren en zo bereken of je vier op één rij hebt
je stop bij het einde van veld zoals onderaan of links of rechts of leeg
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan