Egy négyzet alakú, adott méretű falat szeretnénk becsempézni, kezdetben csak egyféle (adott) színű csempékkel. Később szeretnénk adott pozíción lévő csempéket más színűre cserélni, vagy esetleg egy adott mintázat alapján cserélgetni a falunkon a csempéket.
A csempéket (Tile
), a falakat (Wall
) és a mintákat (Pattern
)
reprezentáló osztályok kerüljenek a javazh.tiling
csomagba, a
tesztosztályunkat (TilingTest
) a javazh
csomag fogja tartalmazni.
A javazh.tiling.Tile
osztály létrehozása a következő módon:
Adattagok:
int colour
: a csempe színkódját jelöli
(a példáinkban és a tesztben csak egyjegyű, pozitív számok lesznek)Konstruktor:
Tile(int Colour)
: létrehoz egy adott színű csempétMetódusok:
int getColour()
: visszaadja a csempe színétString toString()
: visszaadja a csempe String reprezentációját, ami a színkód két függőleges vonal között
Pl. 8-as színkódú csempe esetén:"|8|"
A javazh.tiling.Wall
osztály létrehozása a következő módon:
Adattagok:
Tile[][] tiles
: két dimenziós, csempéket tartalmazó tömb, a falat reprezentálja
Megjegyzés: a fal csempéinek sorszámozása vízszintesen és függőlegesen is 0-tól kezdődikKonstruktor:
Wall(int size, int colour)
: létrehoz egysize*size
-as méretű falat úgy, hogy minden mezőbe egy új, a paraméterként megadott színnel megegyező színű csempe kerülMetódusok:
Tile[][] getTiles()
: visszaadja a csempéket tartalmazó tömböt
A javazh.tiling.Wall
osztály kiegészítése a következő metódusokkal:
Tile getTile(int x, int y)
: visszaadja a fal (x,y)
pozíción lévő csempéjétvoid changeTile(int x, int y, Tile t)
: a fal (x,y)
pozíción lévő csempéjének kicserélése a paraméterként megadott csempévelString toString()
: visszaadja a fal String
reprezentációját úgy, hogy a csempék sorokba és oszlopokba rendezve jelennek meg
Pl. 3*3
-as méretű, csak 0
-ás színkódú csempéket tartalmazó fal:
|0||0||0|
|0||0||0|
|0||0||0|
A javazh.tiling.Pattern
osztály létrehozása a következő módon:
Adattagjai nincsenek
Metódus:
static boolean isColoured(char pattern, int size, int x, int y)
: az osztály egyetlen, osztályszintű metódusa megadja, hogy egy adott méretű mintán az adott pozíció mezője a minta alapján színes-e vagy nem
Részletek: a mintát jelölő karakter lehet 'X'
, 'B'
vagy 'C'
és ezek kisbetűs változatai. Ha másféle karaktert kapunk paraméterként, a visszatérési érték false
.
A példákon 1
-es fogja jelölni a színes, 0
-ás a nem színes mezőket egy 5*5
-ös mintán.
A minták jelentése:
-'X'
: az adott pozíción lévő mező színes, ha a mező elhelyezkedése:
jobb_felső_sarokból_induló_átló ∨ bal_felső_sarokból_induló_átló
10001
01010
00100
10001
01010
-'B'
(border): az adott pozíción lévő mező színes, ha a mező elhelyezkedése:
jobb_szélső_oszlop ∨ bal_szélső_oszlop ∨ felső_sor ∨ alsó_sor
11111
10001
10001
10001
11111
-'C'
(cross): az adott pozíción lévő mező színes, ha a mező elhelyezkedése:
középső_oszlop ∨ középső_sor
00100
00100
11111
00100
00100
A javazh.tiling.Wall
osztály kiegészítése a következő metódussal:
void usePattern(char pattern, int colour)
: a falon az adott minta alapján cserélje le a csempéket új, a paraméterben megadott színű csempére (használd a Pattern
osztály isColoured(...)
metódusát annak eldöntésére, hogy mely csempéket kell lecserélni)A fájlok a következő könyvtárszerkezetben helyezkedjenek el:
KOJQAAI - EHA
+---javazh
+---tiling
| \--- - forrásállományok
\---TilingTest.java
A TilingTest
osztály futtatása során a standard kimenetre kerül
kiírásra az elkészített programnak megfelelő érdemjegy. A tesztelőt
érdemes egy-egy részfeladat megoldása után is lefutattni, ekkor ki
kell törölni/kommentezni azokat tesztfüggvény-hívásokat, amikhez
tartozó megoldás még nincsen kész.
Pl. ha a 3-as szintig van kész a program, a TilingTest
osztály
main
metódusa így fog kinézni:
... {
testForMark2();
testForMark3();
//testForMark4();
//testForMark5();
writeMark();
}
A tesztfájl egyéb helyeken nem módosítható, az elkészített osztályoknak fordulnia és futnia kell a megadott tesztfájllal.
Megjegyzés: Ha több hiba van a megoldásban, a tesztelő csak a legelső megtalált hibát fogja kiírni.