Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
rxbn_ | 2a27f74846 | |
rxbn_ | 5a5d661719 | |
rxbn_ | 05a4463ba8 | |
rxbn_ | 59c2f83f49 | |
rxbn_ | 59fdc12e4f | |
rxbn_ | 90afe2d72e | |
rxbn_ | 21a7b951d6 | |
rxbn_ | 5ea292bbae | |
rxbn_ | b51c1c4f62 |
|
@ -1,33 +1,35 @@
|
||||||
{
|
{
|
||||||
"field" : [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
"field" : [
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 1, 0, 3, 0, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 1, 0, 3, 0, 1, 0],
|
||||||
[0, 0, 2, 0, 2, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0],
|
[0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
[0, 0, 0, 0, 0, 3, 3, 3, 3, 2, 1, 2, 3, 3, 3, 3, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0],
|
[0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
],
|
||||||
"maxLives" : 5
|
"maxLives" : 5
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"field" : [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 2, 0, 2, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||||||
|
[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
|
||||||
|
[0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
|
||||||
|
"maxLives" : 5
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"field" : [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 1, 1, 1, 1, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0],
|
||||||
|
[0, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2, 0, 3, 3, 0, 3, 3, 0, 0, 3, 3, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 3, 3, 0, 0, 3, 0, 0, 3, 3, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 2, 0, 0, 3, 0, 0, 3, 0, 3, 3, 0, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 0, 2, 2, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 0, 0],
|
||||||
|
[0, 1, 0, 0, 0, 1, 0, 2, 2, 0, 0, 0, 0, 3, 0, 3, 3, 0, 3, 0, 0, 0],
|
||||||
|
[0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 3, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 3, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
|
||||||
|
"maxLives" : 5
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
package break_out;
|
package break_out;
|
||||||
|
|
||||||
|
import break_out.model.Position;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,21 +79,51 @@ public class Constants {
|
||||||
/**
|
/**
|
||||||
* The background color for the field
|
* The background color for the field
|
||||||
*/
|
*/
|
||||||
public static final Color COLOR_GAME_BACKGROUND = new Color(33, 97, 138);
|
public static final Color COLOR_GAME_BACKGROUND = new Color(64, 45, 61);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default component color
|
* The default component color
|
||||||
*/
|
*/
|
||||||
public static final Color COLOR_COMPONENT = new Color(200, 200, 200);
|
public static final Color COLOR_COMPONENT = new Color(191, 105, 145);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The component color for the bottom paddle
|
* The component color for the bottom paddle
|
||||||
*/
|
*/
|
||||||
public static final Color COLOR_PADDLE_BOTTOM = new Color(226, 215, 73);
|
public static final Color COLOR_PADDLE_BOTTOM = new Color(242, 173, 148);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The component color for the top paddle
|
* The component color for the top paddle
|
||||||
*/
|
*/
|
||||||
public static final Color COLOR_PADDLE_TOP = new Color(140, 226, 165);
|
public static final Color COLOR_PADDLE_TOP = new Color(242, 196, 141);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The component color for the text
|
||||||
|
*/
|
||||||
|
public static final Color COLOR_TEXT = new Color(0, 0, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The component color for the scoreboard
|
||||||
|
*/
|
||||||
|
public static final Color COLOR_SCOREBOARD = new Color(140, 140, 140, 144);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The padding / offset of the scoreboard to the inner text elements
|
||||||
|
*/
|
||||||
|
public static final int SCOREBOARD_OFFSET = 15;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The string for the score on the scoreboard
|
||||||
|
*/
|
||||||
|
public static final String SCOREBOARD_SCORE = "Score: ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The string for the lives on the scoreboard
|
||||||
|
*/
|
||||||
|
public static final String SCOREBOARD_LIVES = "Lives: ";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The position for the scoreboards midpoint (bottom center)
|
||||||
|
*/
|
||||||
|
public static final Position SCOREBOARD_MIDPOINT = new Position(SCREEN_WIDTH*5/6, SCREEN_HEIGHT);
|
||||||
|
|
||||||
}
|
}
|
|
@ -136,7 +136,7 @@ public class Controller implements ActionListener, KeyListener {
|
||||||
case KeyEvent.VK_ESCAPE:
|
case KeyEvent.VK_ESCAPE:
|
||||||
// exit current level
|
// exit current level
|
||||||
game.getLevel().setFinished(true);
|
game.getLevel().setFinished(true);
|
||||||
toStartScreen();
|
toStartScreen(game.getLevel().getScore());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,10 +161,14 @@ public class Controller implements ActionListener, KeyListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method switches the view to the StartScreen view.
|
* This method switches the view to the StartScreen view.
|
||||||
|
* @param score The player score
|
||||||
*/
|
*/
|
||||||
public void toStartScreen() {
|
public void toStartScreen(int score) {
|
||||||
view.showScreen(StartScreen.class.getName());
|
view.showScreen(StartScreen.class.getName());
|
||||||
view.getStartScreen().requestFocusInWindow();
|
view.getStartScreen().requestFocusInWindow();
|
||||||
|
|
||||||
|
view.getStartScreen().addScore(score);
|
||||||
|
view.getStartScreen().repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,6 +28,11 @@ public class Ball implements IBall {
|
||||||
*/
|
*/
|
||||||
private boolean hitsPaddle;
|
private boolean hitsPaddle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The balls lost state for upper and lower borders
|
||||||
|
*/
|
||||||
|
private boolean isLost;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The balls color with default component color
|
* The balls color with default component color
|
||||||
*/
|
*/
|
||||||
|
@ -44,12 +49,12 @@ public class Ball implements IBall {
|
||||||
*/
|
*/
|
||||||
public Ball() {
|
public Ball() {
|
||||||
this.position = new Position(0, 0);
|
this.position = new Position(0, 0);
|
||||||
this.direction = new Vector2D(Constants.BALL_SPEED, Constants.BALL_SPEED);
|
|
||||||
this.direction.rescale();
|
|
||||||
|
|
||||||
// start at bottom-center
|
// reset direction
|
||||||
this.position.setX((Constants.SCREEN_WIDTH - Constants.BALL_DIAMETER) / 2.0);
|
resetDirection();
|
||||||
this.position.setY(Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER - Constants.PADDLE_HEIGHT);
|
|
||||||
|
// reset position to bottom-center
|
||||||
|
resetPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,8 +98,7 @@ public class Ball implements IBall {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
|
|
||||||
// random hue without blue colors to prevent ghosting
|
// random hue without blue colors to prevent ghosting
|
||||||
// 65 <~ 170/255
|
float hue = (random.nextInt(200)+50) / 360f;
|
||||||
float hue = (random.nextInt(65)) / 100f;
|
|
||||||
|
|
||||||
// saturation between 0.5 and 0.7
|
// saturation between 0.5 and 0.7
|
||||||
float saturation = (random.nextInt(2000) + 5000) / 10000f;
|
float saturation = (random.nextInt(2000) + 5000) / 10000f;
|
||||||
|
@ -147,14 +151,12 @@ public class Ball implements IBall {
|
||||||
|
|
||||||
// reacts on top border
|
// reacts on top border
|
||||||
if (this.position.getY() <= 0) {
|
if (this.position.getY() <= 0) {
|
||||||
this.position.setY(0);
|
isLost = true;
|
||||||
this.direction.setDy(-(this.direction.getDy()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// reacts on bottom border (+Diameter because of hitbox)
|
// reacts on bottom border (+Diameter because of hitbox)
|
||||||
if (this.position.getY() >= Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER) {
|
if (this.position.getY() >= Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER) {
|
||||||
this.position.setY(Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER);
|
isLost = true;
|
||||||
this.direction.setDy(-(this.direction.getDy()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,4 +371,37 @@ public class Ball implements IBall {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The getter for balls lost state
|
||||||
|
* @return balls lost state
|
||||||
|
*/
|
||||||
|
public boolean isLost() {
|
||||||
|
return isLost;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The setter for balls lost state
|
||||||
|
* @param lost balls lost state
|
||||||
|
*/
|
||||||
|
public void setLost(boolean lost) {
|
||||||
|
isLost = lost;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resets balls position
|
||||||
|
*/
|
||||||
|
public void resetPosition() {
|
||||||
|
// start at bottom-center
|
||||||
|
position.setX((Constants.SCREEN_WIDTH - Constants.BALL_DIAMETER) / 2.0);
|
||||||
|
position.setY(Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER - Constants.PADDLE_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resets balls direction
|
||||||
|
*/
|
||||||
|
public void resetDirection() {
|
||||||
|
direction = new Vector2D(Constants.BALL_SPEED, Constants.BALL_SPEED);
|
||||||
|
direction.rescale();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class Game {
|
||||||
/**
|
/**
|
||||||
* The last levelnumber
|
* The last levelnumber
|
||||||
*/
|
*/
|
||||||
private int maxLevel = 1;
|
private int maxLevel = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The total score of the game
|
* The total score of the game
|
||||||
|
@ -114,7 +114,7 @@ public class Game {
|
||||||
controller.toPlayground();
|
controller.toPlayground();
|
||||||
} else {
|
} else {
|
||||||
// tells the controller to switch to the startScreen of the game
|
// tells the controller to switch to the startScreen of the game
|
||||||
controller.toStartScreen();
|
controller.toStartScreen(level.getScore());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,4 +17,7 @@ public interface IBall {
|
||||||
// Exercise 4
|
// Exercise 4
|
||||||
public boolean hitsStone(ArrayList<Stone> stones);
|
public boolean hitsStone(ArrayList<Stone> stones);
|
||||||
public Stone getHitStone();
|
public Stone getHitStone();
|
||||||
|
|
||||||
|
// Exercise 5
|
||||||
|
public boolean isLost();
|
||||||
}
|
}
|
|
@ -73,13 +73,7 @@ public class Level extends Thread implements ILevel {
|
||||||
this.score = score;
|
this.score = score;
|
||||||
this.ball = new Ball();
|
this.ball = new Ball();
|
||||||
|
|
||||||
// calc paddle positions
|
resetPaddles();
|
||||||
Position posPaddleTop = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, 0);
|
|
||||||
Position posPaddleBottom = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT);
|
|
||||||
|
|
||||||
// set paddles
|
|
||||||
this.paddleTop = new Paddle(posPaddleTop);
|
|
||||||
this.paddleBottom = new Paddle(posPaddleBottom);
|
|
||||||
|
|
||||||
// set paddles color
|
// set paddles color
|
||||||
this.paddleTop.setColor(Constants.COLOR_PADDLE_TOP);
|
this.paddleTop.setColor(Constants.COLOR_PADDLE_TOP);
|
||||||
|
@ -137,6 +131,11 @@ public class Level extends Thread implements ILevel {
|
||||||
// Call here the balls method for reacting on the borders of the playground
|
// Call here the balls method for reacting on the borders of the playground
|
||||||
getBall().reactOnBorder();
|
getBall().reactOnBorder();
|
||||||
|
|
||||||
|
// Call here the balls method for reacting on lost ball state
|
||||||
|
if(getBall().isLost()) {
|
||||||
|
decreaseLives();
|
||||||
|
}
|
||||||
|
|
||||||
// if ball hits paddle (top|bottom), reflect ball
|
// if ball hits paddle (top|bottom), reflect ball
|
||||||
if(getBall().hitsPaddle(paddleTop)) getBall().reflectOnPaddle(paddleTop);
|
if(getBall().hitsPaddle(paddleTop)) getBall().reflectOnPaddle(paddleTop);
|
||||||
if(getBall().hitsPaddle(paddleBottom)) getBall().reflectOnPaddle(paddleBottom);
|
if(getBall().hitsPaddle(paddleBottom)) getBall().reflectOnPaddle(paddleBottom);
|
||||||
|
@ -273,6 +272,11 @@ public class Level extends Thread implements ILevel {
|
||||||
if(stone.getType() == 0) {
|
if(stone.getType() == 0) {
|
||||||
stones.remove(stone);
|
stones.remove(stone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(allStonesBroken()) {
|
||||||
|
setFinished(true);
|
||||||
|
nextLevel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -282,6 +286,65 @@ public class Level extends Thread implements ILevel {
|
||||||
private boolean allStonesBroken() {
|
private boolean allStonesBroken() {
|
||||||
return stones.isEmpty();
|
return stones.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* decreases the lives and interact to the new count
|
||||||
|
*/
|
||||||
|
private void decreaseLives() {
|
||||||
|
lifeCounter--;
|
||||||
|
// reset paddles to center pos
|
||||||
|
if(lifeCounter > 0) {
|
||||||
|
resetPaddles();
|
||||||
|
getBall().resetPosition();
|
||||||
|
getBall().resetDirection();
|
||||||
|
getBall().setLost(false);
|
||||||
|
stopBall();
|
||||||
|
// level failed
|
||||||
|
} else {
|
||||||
|
setFinished(true);
|
||||||
|
game.getController().toStartScreen(getScore());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* resets paddles position and or init them
|
||||||
|
*/
|
||||||
|
private void resetPaddles() {
|
||||||
|
// calc paddle positions
|
||||||
|
Position posPaddleTop = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, 0);
|
||||||
|
Position posPaddleBottom = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT);
|
||||||
|
|
||||||
|
// resets top paddle
|
||||||
|
if(paddleTop == null) paddleTop = new Paddle(posPaddleTop);
|
||||||
|
else paddleTop.setPosition(posPaddleTop);
|
||||||
|
|
||||||
|
// resets bottom paddle
|
||||||
|
if(paddleBottom == null) paddleBottom = new Paddle(posPaddleBottom);
|
||||||
|
else paddleBottom.setPosition(posPaddleBottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The getter for levels score
|
||||||
|
* @return the score
|
||||||
|
*/
|
||||||
|
public int getScore() {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The getter for levels lives
|
||||||
|
* @return the life counter
|
||||||
|
*/
|
||||||
|
public int getLives() {
|
||||||
|
return lifeCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* switch to next level
|
||||||
|
*/
|
||||||
|
public void nextLevel() {
|
||||||
|
game.createLevel(++levelnr, score);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -127,17 +127,17 @@ public class Stone implements IStone {
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// stone type one
|
// stone type one
|
||||||
setColor(Color.CYAN);
|
setColor(new Color(77, 80, 140));
|
||||||
setValue(1);
|
setValue(1);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// stone type two
|
// stone type two
|
||||||
setColor(Color.WHITE);
|
setColor(new Color(242, 191, 94));
|
||||||
setValue(2);
|
setValue(2);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// stone type three
|
// stone type three
|
||||||
setColor(Color.BLUE);
|
setColor(new Color(242, 80, 65));
|
||||||
setValue(3);
|
setValue(3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
package break_out.view;
|
package break_out.view;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.font.TextAttribute;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
@ -114,6 +118,9 @@ public class Field extends JPanel {
|
||||||
// Calls the method for drawing the top paddle
|
// Calls the method for drawing the top paddle
|
||||||
drawPaddleTop(g2);
|
drawPaddleTop(g2);
|
||||||
|
|
||||||
|
// Calls the method for drawing the scoreboard
|
||||||
|
drawScoreboard(g2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -249,4 +256,96 @@ public class Field extends JPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws the scoreboard with score and lives
|
||||||
|
* @param g2
|
||||||
|
*/
|
||||||
|
private void drawScoreboard(Graphics2D g2) {
|
||||||
|
Font currentFont = g2.getFont();
|
||||||
|
|
||||||
|
// source: <a href="https://stackoverflow.com/questions/18249592/"> Stackoverflow Question - 18249592 </a>
|
||||||
|
Map<TextAttribute, Object> attributes = new HashMap<>();
|
||||||
|
attributes.put(TextAttribute.FAMILY, currentFont.getFamily());
|
||||||
|
attributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
|
||||||
|
attributes.put(TextAttribute.SIZE, (int) (currentFont.getSize() * 1.8));
|
||||||
|
Font myFont = Font.getFont(attributes);
|
||||||
|
g2.setFont(myFont);
|
||||||
|
|
||||||
|
// temporarily save default component color to draw text and background in specific color
|
||||||
|
Color temp = g2.getColor();
|
||||||
|
|
||||||
|
// draw background in specific color
|
||||||
|
g2.setColor(Constants.COLOR_SCOREBOARD);
|
||||||
|
|
||||||
|
// bottom centered mid-point
|
||||||
|
int midX = (int) Constants.SCOREBOARD_MIDPOINT.getX();
|
||||||
|
int midY = (int) Constants.SCOREBOARD_MIDPOINT.getY();
|
||||||
|
|
||||||
|
int offset = Constants.SCOREBOARD_OFFSET;
|
||||||
|
|
||||||
|
// calculate rendered string width
|
||||||
|
int scoreWidth = g2.getFontMetrics().stringWidth(Constants.SCOREBOARD_SCORE + view.getGame().getLevel().getScore());
|
||||||
|
int lifeWidth = g2.getFontMetrics().stringWidth(Constants.SCOREBOARD_LIVES + view.getGame().getLevel().getLives());
|
||||||
|
int maxWidth = Math.max(scoreWidth, lifeWidth); // max width
|
||||||
|
int fontSize = g2.getFontMetrics().getHeight(); // font size
|
||||||
|
|
||||||
|
// fillRoundRect(x, y, width, height, arcWidth, arcHeight)
|
||||||
|
g2.fillRoundRect((midX)-offset-maxWidth/2, midY-2*offset-3*fontSize, maxWidth+2*offset, 2*(fontSize+offset), 5, 5);
|
||||||
|
|
||||||
|
// draw text in specific color (sharing g2 object and therefore also color)
|
||||||
|
g2.setColor(Constants.COLOR_TEXT);
|
||||||
|
|
||||||
|
// draw score and lives
|
||||||
|
drawScore(g2);
|
||||||
|
drawLives(g2);
|
||||||
|
|
||||||
|
// reset color and font
|
||||||
|
g2.setColor(temp);
|
||||||
|
g2.setFont(currentFont);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws the score
|
||||||
|
*
|
||||||
|
* @param g2 The graphics object
|
||||||
|
*/
|
||||||
|
private void drawScore(Graphics2D g2) {
|
||||||
|
int score = view.getGame().getLevel().getScore();
|
||||||
|
|
||||||
|
int fontSize = g2.getFontMetrics().getHeight(); // font size
|
||||||
|
|
||||||
|
// bottom centered mid-point
|
||||||
|
int x = (int) Constants.SCOREBOARD_MIDPOINT.getX();
|
||||||
|
int y = (int) Constants.SCOREBOARD_MIDPOINT.getY()-(int)((3.0/2.0)*fontSize);
|
||||||
|
|
||||||
|
String str = Constants.SCOREBOARD_SCORE+score;
|
||||||
|
|
||||||
|
x -= g2.getFontMetrics().stringWidth(str)/2; // because x is middle position on x axis
|
||||||
|
|
||||||
|
// draw string
|
||||||
|
g2.drawString(str, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws the life counter
|
||||||
|
*
|
||||||
|
* @param g2 The graphics object
|
||||||
|
*/
|
||||||
|
private void drawLives(Graphics2D g2) {
|
||||||
|
int lives = view.getGame().getLevel().getLives();
|
||||||
|
|
||||||
|
int fontSize = g2.getFontMetrics().getHeight(); // font size
|
||||||
|
|
||||||
|
// bottom centered mid-point
|
||||||
|
int x = (int) Constants.SCOREBOARD_MIDPOINT.getX();
|
||||||
|
int y = (int) Constants.SCOREBOARD_MIDPOINT.getY()-3*fontSize;
|
||||||
|
|
||||||
|
String str = Constants.SCOREBOARD_LIVES+lives;
|
||||||
|
|
||||||
|
x -= g2.getFontMetrics().stringWidth(str)/2; // because x is middle position on x axis
|
||||||
|
|
||||||
|
// draw string
|
||||||
|
g2.drawString(str, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,11 @@ public class StartScreen extends JPanel {
|
||||||
*/
|
*/
|
||||||
private JLabel error;
|
private JLabel error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The scoreMenu
|
||||||
|
*/
|
||||||
|
private SectionPanel scoreMenu;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor needs a view
|
* The constructor needs a view
|
||||||
|
@ -125,16 +130,16 @@ public class StartScreen extends JPanel {
|
||||||
*/
|
*/
|
||||||
private void initializeScoreMenu() {
|
private void initializeScoreMenu() {
|
||||||
// The layout
|
// The layout
|
||||||
SectionPanel scoreMenu = new SectionPanel(Color.WHITE);
|
scoreMenu = new SectionPanel(Color.WHITE);
|
||||||
scoreMenu.shady = false;
|
scoreMenu.shady = false;
|
||||||
scoreMenu.setLayout(new MigLayout("", "10[center, grow, fill]10",
|
scoreMenu.setLayout(new MigLayout("", "10[center, grow, fill]10",
|
||||||
"5[center]5"));
|
"5[center]5"));
|
||||||
|
|
||||||
// adding the compoenents to the layout
|
// adding the components to the layout
|
||||||
JLabel headline = new JLabel("Scores");
|
JLabel headline = new JLabel("Scores");
|
||||||
headline.setFont(new Font("Sans-serif", Font.PLAIN, 16));
|
headline.setFont(new Font("Sans-serif", Font.PLAIN, 16));
|
||||||
headline.setHorizontalAlignment(SwingConstants.CENTER);
|
headline.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
scoreMenu.add(headline, "cell 0 0, gaptop 5");
|
scoreMenu.add(headline, "cell 0 0, gaptop 5, wrap");
|
||||||
|
|
||||||
add(scoreMenu, "cell 1 0, gapleft 5");
|
add(scoreMenu, "cell 1 0, gapleft 5");
|
||||||
}
|
}
|
||||||
|
@ -200,4 +205,28 @@ public class StartScreen extends JPanel {
|
||||||
error.setText("");
|
error.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a score to the scoreboard
|
||||||
|
* @param score
|
||||||
|
*/
|
||||||
|
public void addScore(int score) {
|
||||||
|
// adding the components to the layout
|
||||||
|
|
||||||
|
// name
|
||||||
|
JLabel lName = new JLabel(getPlayersName());
|
||||||
|
lName.setFont(new Font("Sans-serif", Font.PLAIN, 16));
|
||||||
|
lName.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
scoreMenu.add(lName, "gaptop 5");
|
||||||
|
|
||||||
|
// spacing
|
||||||
|
JLabel space = new JLabel();
|
||||||
|
scoreMenu.add(space);
|
||||||
|
|
||||||
|
// score
|
||||||
|
JLabel lScore = new JLabel(String.valueOf(score));
|
||||||
|
lScore.setFont(new Font("Sans-serif", Font.PLAIN, 16));
|
||||||
|
lScore.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
scoreMenu.add(lScore, "gaptop 5, wrap");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue