2. Előző órai feladat
Milyen kezdő értékeket adjunk?
2
private void incrementNeighbours(int bombX, int bombY) {
int startX =
int endX =
int startY =
int endY =
for (int x = startX; x <= endX; ++x) {
for (int y = startY; y <= endY; ++y) {
if ( ) {
field[y][x] = field[y][x] + 1;
}
}
}
}
3. Előző órai feladat
Milyen esetben rosszak a kezdőértékek?
3
private void incrementNeighbours(int bombX, int bombY) {
int startX = bombX - 1;
int endX = bombX + 1;
int startY = bombY - 1;
int endY = bombY + 1;
for (int x = startX; x <= endX; ++x) {
for (int y = startY; y <= endY; ++y) {
if ( ) {
field[y][x] = field[y][x] + 1;
}
}
}
}
4. Előző órai feladat
Ez jó, de rövidebben hogyan lehet?
4
private void incrementNeighbours(int bombX, int bombY) {
int startX = bombX - 1;
if (startX < 0) {
startX = 0;
}
int endX = bombX + 1;
if (endX > width - 1) {
endX = width - 1;
}
int startY = bombY - 1;
if (startY < 0) {
startY = 0;
}
int endY = bombY + 1;
if (endY > width - 1) {
endY = width - 1;
}
...
}
5. Előző órai feladat
Milyen föltétel kell az if-be?
5
private void incrementNeighbours(int bombX, int bombY) {
int startX = Math.max(0, bombX - 1);
int endX = Math.min(width - 1, bombX + 1);
int startY = Math.max(0, bombY - 1);
int endY = Math.min(height - 1, bombY + 1);
for (int x = startX; x <= endX; ++x) {
for (int y = startY; y <= endY; ++y) {
if ( ) {
field[y][x] = field[y][x] + 1;
}
}
}
}
6. Előző órai feladat
Ez a teljes megvalósítása a metódusnak
6
private void incrementNeighbours(int bombX, int bombY) {
int startX = Math.max(0, bombX - 1);
int endX = Math.min(width - 1, bombX + 1);
int startY = Math.max(0, bombY - 1);
int endY = Math.min(height - 1, bombY + 1);
for (int x = startX; x <= endX; ++x) {
for (int y = startY; y <= endY; ++y) {
if (field[y][x] != BOMB) {
field[y][x] = field[y][x] + 1;
}
}
}
}
11. Robbanást hogyan jelezzünk
amikor int[][] a visszatérési érték?
11
public class Mask {
public static int[][] unmask(
MineField mineField, int[][] mask, int clickX, int clickY) {
if (mineField.at(clickX, clickY) == BOMB) {
}
int[][] newMask = deepCopy(mask);
return unmaskCell(mineField, mask, newMask, clickX, clickY);
}
12. Robbanást hogyan jelezzünk
amikor int[][] a visszatérési érték?
12
public class Mask {
public static class Explosion extends Exception {
}
public static int[][] unmask(
MineField mineField, int[][] mask, int clickX, int clickY) {
if (mineField.at(clickX, clickY) == BOMB) {
throw new Explosion();
}
int[][] newMask = deepCopy(mask);
return unmaskCell(mineField, mask, newMask, clickX, clickY);
}
13. A 0-ák megjelenítése
13
1. A 0-ákat fölfedni
2. Környezetében minden 0-t fölfedni
3. A határvonalon lévő értékeket is fölfedni
4. Az aknákat takarva hagyni
17. 17
private static int[][] unmaskNeighbours(
MineField mineField, int[][] mask, int[][] newMask,
int cellX, int cellY) {
int startY =
int endY =
int startX =
int endX =
for (int y = startY; y <= endY; ++y) {
for (int x = startX; x <= endX; ++x) {
}
}
return newMask;
}
18. 18
private static int[][] unmaskNeighbours(
MineField mineField, int[][] mask, int[][] newMask,
int cellX, int cellY) {
int startY = Math.max(0, cellY - 1);
int endY = Math.min(mineField.getHeight() - 1, cellY + 1);
int startX = Math.max(0, cellX - 1);
int endX = Math.min(mineField.getWidth() - 1, cellX + 1);
for (int y = startY; y <= endY; ++y) {
for (int x = startX; x <= endX; ++x) {
}
}
return newMask;
}
19. 19
private static int[][] unmaskNeighbours(
MineField mineField, int[][] mask, int[][] newMask,
int cellX, int cellY) {
int startY = Math.max(0, cellY - 1);
int endY = Math.min(mineField.getHeight() - 1, cellY + 1);
int startX = Math.max(0, cellX - 1);
int endX = Math.min(mineField.getWidth() - 1, cellX + 1);
for (int y = startY; y <= endY; ++y) {
for (int x = startX; x <= endX; ++x) {
unmaskCell(mineField, mask, newMask, x, y);
}
}
return newMask;
}