//BeginStand tekent de vier stenen die al op het bord liggen aan het begin van het spel. private void BeginStand() { int centerX = xkolommen / 2; int centerY = yrijen / 2; stenen[centerX - 1, centerY - 1] = new Steen(centerX - 1, centerY - 1, true); stenen[centerX, centerY] = new Steen(centerX, centerY, true); stenen[centerX - 1, centerY] = new Steen(centerX - 1, centerY, false); stenen[centerX, centerY - 1] = new Steen(centerX, centerY - 1, false); }
//Deze onderstaande methode checkt of er omliggende stenen zijn van de vijandige kleur. public bool Insluit(int a, int b) { bool nietaanzet; if (beurt % 2 == 0) { nietaanzet = false; } else { nietaanzet = true; } var richtingen = Richtingen(); foreach (int richtingx in richtingen.Item1) { foreach (int richtingy in richtingen.Item2) { int stappengezet = 1; int teller = 0; //De teller telt hoeveel stenen er van de vijand ingesloten moeten worden. for (int x = a + richtingx * stappengezet, y = b + richtingy * stappengezet; x >= 0 && y >= 0 && x < xkolommen && y < yrijen; stappengezet++, x = a + richtingx * stappengezet, y = b + richtingy * stappengezet) { //Stel we willen een steen neerzetten op plek [a,b], dan mogen de omliggende stenen op plekken [x,y] niet leeg zijn. //Dus als alle omliggendeStenen de waarde null hebben, mag er op [a,b] geen steen geplaatst worden. Steen omliggendeSteen = stenen[x, y]; if (omliggendeSteen == null) { break; } //Naast dat er een steen naast plek [a,b] moeten liggen, moet minstens een van de omliggende stenen van de vijandige kleur zijn. //Oftewel een van de omliggende stenen moet van de kleur zijn die niet aan zet is. if (omliggendeSteen.green == nietaanzet) { teller++; } else { if (teller > 0) { return(true); } else { break; } } } } } return(false); }
//Als er op de Picturebox geklikt wordt, wordt Veldenklikker aangeroepen. Deze methode kijkt of het legaal is om op de desbetreffende //plek een steen te plaatsen. Zo ja, dan wordt er een steen getekend en veranderen de vijandige stenen die worden ingesloten van kleur. private void Veldenklikker(object o, MouseEventArgs mea) { int locatieMuisX = mea.X; int locatieMuisY = mea.Y; int a = 0, b = 0; Point locatieSteen = new Point(a, b); //Stap 1: Transleer de muispositie naar de positie in de array stenen. for (int positieX = xkolommen; locatieMuisX < xkolommen * grootte && locatieMuisX > 0; positieX -= 1) { locatieMuisX += grootte; a = positieX - 1; } for (int positieY = yrijen; locatieMuisY < xkolommen * grootte && locatieMuisY > 0; positieY -= 1) { locatieMuisY += grootte; b = positieY - 1; } //Stap 2: Is de desbetreffende positie legaal? Oftewel er mag nog geen steen liggen en er moet minstens een vijandige steen worden ingesloten. if (stenen[a, b] == null && Insluit(a, b) == true) { legaal = true; } //Stap 3: Creeer een nieuwe Steen op de positie indien deze legaal is, en verander omliggende stenen van kleur. if (legaal == true) { if (beurt % 2 == 0) { stenen[a, b] = new Steen(a, b, true); beurt = beurt + 1; } else { stenen[a, b] = new Steen(a, b, false); beurt = beurt + 1; } Omzet(a, b); legaal = false; velden.Invalidate(); zet.Text = AanDeBeurt(); winnaar.Text = Winnaar(); aantalgroen.Text = Aantalgroen() + " stenen"; aantalblauw.Text = Aantalblauw() + " stenen"; } }
//Omzet verandert de stenen indien nodig van kleur. public void Omzet(int a, int b) { bool nietaanzet, aanzet; if (beurt % 2 == 0) { nietaanzet = true; } else { nietaanzet = false; } aanzet = !nietaanzet; var richtingen = Richtingen(); foreach (int richtingx in richtingen.Item1) { foreach (int richtingy in richtingen.Item2) { int stappengezet = 1; int teller = 0; //De teller telt hoeveel stenen er van de vijand ingesloten moeten worden. for (int x = a + richtingx * stappengezet, y = b + richtingy * stappengezet; x >= 0 && y >= 0 && x < xkolommen && y < yrijen; stappengezet++, x = a + richtingx * stappengezet, y = b - richtingy * stappengezet) { if (richtingy == 0 && richtingx == 0) { break; } Steen omliggendeSteen = stenen[x, y]; if (omliggendeSteen == null) { break; } if (omliggendeSteen.green == nietaanzet) { teller++; } else if (omliggendeSteen.green == aanzet) { if (teller > 0) { while (teller > 0) { stenen[a + richtingx * teller, b + richtingy * teller].green = aanzet; teller--; } } } else { break; } } } } }