Hello,
Im trying to make a kind of minesweeper game, but with 3 objects the player can find on the gameboard. I now have the code working to load 1 object into the game board. But i need all three objects placed on the gameboard. The object is loaded into the gameboard by void plaatsObjecten right now. The other objects are defined in the class Vakje. How can i fix that the three objects are placed into the game board without overlap each other?
Thank you!
int speelveldPosX, speelveldPosY;
int speelveldSizeX, speelveldSizeY;
int vakSize;
int gatSize;
int speelveldWidth, speelveldHeight;
Vakje[][] vakjes;
int legevakjes;
boolean lost, win;
int objecten;
//int aantalSpeelvakX;
void speelSchermStart() {
spelerAanDeBeurt = 0;
spelPauze = 0;
//aantalSpeelvakX = aantalSpeelvak * 2;
//speelveldSizeX = aantalSpeelvakX + 1;
speelveldSizeX = aantalSpeelvak;
speelveldSizeY = aantalSpeelvak;
vakSize = schermSchaal/3;
gatSize = 2;
lost = false;
win = false;
speelveldWidth = speelveldSizeX * (vakSize + gatSize) - gatSize;
speelveldHeight = speelveldSizeY * (vakSize + gatSize) - gatSize;
maakVakjes();
}
void speelSchermMaken() {
for (int j = 0; j < speelveldSizeY; j++) {
for (int i = 0; i < speelveldSizeX; i++) {
vakjes[i][j].show();
}
}
if (spelPauze>0) {
if (spelPauze==1) {
eindeBeurt(speelveldSizeY, speelveldSizeX);
}
spelPauze--;
}
if (lost || win) {
speelSchermRunning = false;
}
}
void weergeven(int x, int y) {
if (x < 0 || y < 0 || x >= speelveldSizeX || y >= speelveldSizeY) {
return;
}
if (vakjes[x][y].isClicked()) {
return;
}
vakjes[x][y].reveal();
if(vakjes[x][y].getValue() == -1) {
lost = true;
} else {
legevakjes--;
if (legevakjes == 0) {
win = true;
}
}
}
void maakVakjes() {
vakjes = new Vakje[speelveldSizeX][speelveldSizeY];
speelveldPosX = (int)(width / 2 - speelveldWidth / 2.0);
speelveldPosY = (int)(height / 2 - speelveldHeight / 2.0);
int x = speelveldPosX;
int y = speelveldPosY;
for (int j = 0; j < speelveldSizeY; j++) {
for (int i = 0; i < speelveldSizeX; i++) {
vakjes[i][j] = new Vakje(x, y, vakSize, vakSize);
x += vakSize + gatSize;
}
x = speelveldPosX;
y += vakSize + gatSize;
}
plaatsObjecten();
}
void plaatsObjecten() {
objecten = (aantalDepots + aantalSchatten) + koning;
legevakjes = (speelveldSizeX * speelveldSizeY) - objecten;
int objectengeplaatst = 0;
while(objectengeplaatst < objecten){
int x = (int)random(speelveldSizeX);
int y = (int)random(speelveldSizeY);
if (vakjes[x][y].getValue() >= 0) {
vakjes[x][y].plantObjecten();
increaseNeighborValues(x, y);
objectengeplaatst++;
}
}
}
void increaseNeighborValues(int x, int y) {
for (int i = x - 1; i < x + 2; i++) {
for (int j = y - 1; j < y + 2; j++) {
if ( !(i == x && j == y) && i >= 0 && i < speelveldSizeX && j >= 0 && j < speelveldSizeY) {
vakjes[i][j].increaseValue();
}
}
}
}
class Vakje {
private int x, y, breedte, hoogte;
private int value; // -1 : bomb, 0 - 8 : number of adjacent bomb
private boolean geklikt;
// private boolean middle;
Vakje (int x, int y, int w, int h) {
this.x = x;
this.y = y;
breedte = w;
hoogte = h;
value = 0;
geklikt = false;
}
void show() {
noStroke();
if (geklikt) {
if (value == -1) {
fill(kleurKoning); // -1 = de koning
rect(x, y, breedte, hoogte);
fill(200);
textAlign(CENTER);
textSize(hoogte * 0.9);
text("K", x + breedte / 2, y + (hoogte / 2) + (0.73 * textAscent() / 2));
} else if (value == -2){ // -2 = schat
aantalGevondenSchatten++;
fill(kleurSchat);
rect(x, y, breedte, hoogte);
fill(200);
textAlign(CENTER);
textSize(hoogte * 0.9);
text("S", x + breedte / 2, y + (hoogte / 2) + (0.73 * textAscent() / 2));
} else if (value == -3) { // -3 = bommendepots
aantalBommen++;
fill(kleurDepot);
rect(x, y, breedte, hoogte);
fill(200);
textAlign(CENTER);
textSize(hoogte * 0.9);
text("D", x + breedte / 2, y + (hoogte / 2) + (0.73 * textAscent() / 2));
} else {
aantalBommen--;
fill(kleurLeegvak); // leeg vakje
rect(x, y, breedte, hoogte);
}
} else {
fill(120);
rect(x, y, breedte, hoogte);
//fill(#0000CD);
//rect(735, y, breedte, hoogte);
}
}
boolean isClicked() {
return geklikt;
}
//boolean isMiddle() {
// return middle;
//}
void reveal() {
geklikt = true;
//return value;
}
int getValue() {
return value;
}
void plantObjecten() {
value = -2;
}
void increaseValue() {
if (value == -1) {
return;
}
value += 1;
}
}
//Berekent de speelscherm hoogt
int berekenSpeelSchermHoogte(int aantalVakjes) {
int speelveldbreedte = width-schermSchaal*2;
int spelbreedte;
speelveldHoogte = aantalSpeelvak;
do {
speelveldHoogte++;
speelvakSize = int(float(schermSchaal*3)/float(speelveldHoogte));
spelbreedte = speelvakSize*(aantalVakjes/speelveldHoogte);
} while (spelbreedte>speelveldbreedte);
return speelveldHoogte;
}