package sk.upjs.paz.Game;
import java.awt.Color;
import java.awt.event.MouseEvent;
import sk.upjs.jpaz2.*;
public class PrepinaciaHra extends WinPane {
/**
* Policka hracej dosky
*/
private boolean[][] doska = new boolean[6][6];;
/**
* Indikuje, ci hra bezi (hra konci, ked sa dosiahlo vyherne rozlozenie)
*/
private boolean hraBezi = true;
public PrepinaciaHra() {
this.kresliMriezku();
this.zamiesaj(3);
this.kresliDosku();
}
/**
* Nakresli mriezku
*/
public void kresliMriezku() {
Turtle k = new Turtle();
this.add(k);
for (int i = 1; i < 6; i++) {
k.setPosition(i * 50, 0);
k.moveTo(i * 50, this.getHeight());
}
for (int i = 1; i < 6; i++) {
k.setPosition(0, i * 50);
k.moveTo(this.getWidth(), i * 50);
}
this.remove(k);
}
/**
* Nakresli farebne kamene na zaklade obsahu policok v this.doska
*/
public void kresliDosku() {
// prejdem dvojrozmerne pole
// v strede policka vykreslim bodku podla T/F
Turtle k = new Turtle();
this.add(k);
for (int r = 0; r < 6; r++) {
for (int s = 0; s < 6; s++) {
k.setPosition(s * 50 + 25, r * 50 + 25);
if (doska[r][s]) {
k.setFillColor(Color.blue);
} else {
k.setFillColor(Color.red);
}
k.dot(20);
}
}
this.remove(k);
}
/**
* Overi, ci riadok r a stlpec s su platne suradnice
*/
public boolean dobraSuradnica(int r, int s) {
return (r >= 0) && (r < 6) && (s >= 0) && (s < 6);
}
/**
* Zrealizuje tah, kedy bolo zatlaceny prepinac na policku v riadku r a stlpci s
*/
public void tah(int r, int s) {
int[][] smery = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };
// tu by bola potrebna podmienka ku kazdemu riadku
// ci je dobra suradnica
// this.doska[r + 1][s] = !this.doska[r + 1][s];
// this.doska[r][s + 1] = !this.doska[r][s + 1];
// this.doska[r - 1][s] = !this.doska[r - 1][s];
// this.doska[r][s - 1] = !this.doska[r][s - 1];
for (int i = 0; i < 4; i++) {
int novyR = r + smery[i][0];
int novyS = s + smery[i][1];
if (this.dobraSuradnica(novyR, novyS)) {
this.doska[novyR][novyS] = !this.doska[novyR][novyS];
}
}
}
/**
* Vytvori startovacie rozlozenie kamenov tak, ze spravi zadany pocet nahodnych
* prepnuti (tahov)
*/
public void zamiesaj(int pocetMiesani) {
for (int i = 0; i < pocetMiesani; i++) {
this.tah((int) (Math.random() * 6), (int) (Math.random() * 6));
}
}
/**
* Vrati, ci v aktualnom stave policok je kresliaca plocha jednofarebna
*/
public boolean jeVyherna() {
for (int r = 0; r < 6; r++) {
for (int s = 0; s < 6; s++) {
if (this.doska[r][s] != this.doska[0][0]) {
return false;
}
}
}
return true;
}
@Override
protected void onMouseClicked(int x, int y, MouseEvent detail) {
if (this.hraBezi) {
int r = y / 50;
int s = x / 50;
this.tah(r, s);
this.kresliDosku();
if (this.jeVyherna()) {
System.out.println("Vyhral si.");
this.hraBezi = false;
}
}
}
}