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() {
Turtle k = new Turtle();
this.add(k);
for(int j=0; j<6; j++){
for(int i=0; i<6; i++){
k.setPosition(i*50+25, j*50+25);
/*
if(doska[j][i]){
k.setFillColor(Color.red);
} else {
k.setFillColor(Color.blue);
}*/
k.setFillColor(doska[j][i] ? Color.red : Color.blue);
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 = { {0, 0}, { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };
for(int i=0; i<smery.length; i++){
int novyr = r+smery[i][0];
int novys = s+smery[i][1];
if(dobraSuradnica(novyr, novys)){
doska[novyr][novys] = !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++){
int r = (int)(Math.random()*6);
int s = (int)(Math.random()*6);
tah(r, s);
}
}
/**
* Vrati, ci v aktualnom stave policok je kresliaca plocha jednofarebna
*/
public boolean jeVyherna() {
boolean farbaPolicka = doska[0][0];
for(int r = 0; r<doska.length; r++){
for(int s = 0; s<doska[r].length; s++){
if(doska[r][s] != farbaPolicka){
return false;
}
}
}
return true;
}
@Override
protected void onMouseClicked(int x, int y, MouseEvent detail) {
tah(y/50, x/50);
kresliDosku();
if(jeVyherna()){
this.clear();
}
}
}