[Falling Grade]
Updated:
Falling Grade
๋ณธ ํ๋ก์ ํธ๋ 2019๋ 2ํ๋ 2ํ๊ธฐ Java Programming ํ ํ๋ก์ ํธ ์ด๋ค.
๊ฐ์
์๋ฐ ์์ ์ ์๊ฐํ๋ฉด์ ๊ฒ์ ๋ง๋ค๊ธฐ๊ฐ ๋ง์ง๋ง ํ ํ๋ก์ ํธ๋ก ์ฃผ์ด์ก๋ค.
์ด์ํผํ๊ธฐ, ๋ฆฌ๋ฌ๊ฒ์ ๊ฐ์ ๊ณ ์ ๊ฒ์์ ๊ฐ๋ ์ ์์ฉํ๊ธฐ๋ก ํ๋ค.
์ฌ๊ธฐ์ ์ด์ ํผํ๊ธฐ์ ํผํ๋ ๊ฐ๋ , ๋ฆฌ๋ฌ๊ฒ์์์ ๋ด๋ ค์ค๋ ๋ ธํธ๋ฅผ ๋ง์ถ๋ ๊ฐ๋ ์ ํฉ์ณค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์๊ฒ ์น๊ทผํ๊ฒ ๋ค๊ฐ ์ฌ ์ ์๋ ์ฃผ์ ์ธ ํ์ ์ ๋ํด
์์์ ๋จ์ด์ง๋ ํ์ ์ ์ป๋ ๊ฒ์์ ๋ง๋ค๊ธฐ๋ก ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋์ ์ผ๋ก ๋ฎ์ ํ์ ์ ์ด์ ํผํ๊ธฐ ์ฒ๋ผ ํผํ๋ ค๊ณ ํ ๊ฒ ์ด๊ณ
๋์ ํ์ ์ ๋ฆฌ๋ฌ๊ฒ์ ์ฒ๋ผ ๋ง์ถ๋ ค๊ณ ํ ๊ฒ ์ด๋ค.
๋ฐ๋ก ์ด๋ฆด๋ ์์ฃผ ํ๋ ๋ฅ ํผํ๊ธฐ ๊ฒ์๊ณผ ํ์ ์ ํฉ์ณ ์์์ ๋จ์ด์ง๋ ํ์ ์ ๋จน๋ ๊ฒ์์ ๋ง๋ค๊ธฐ๋ก ํ๋ค.
ํ๋ฉด ๊ตฌ์ฑ
- ๊ฒ์ ๊ตฌ์ฑ์ ํ์ํ ๋ชจ๋ ์ด๋ฏธ์ง, ๋ฒํผ ์์ฑ
- ๊ฐ๊ฐ์ ํ๋ฉด์ ํ์ํ ๋ณ์ ์ค์
- If๋ฌธ, ๋ณ์, setVisible ๋ฉ์๋๋ฅผ ํตํด ์ํฉ์ ๋ง๋ ๋ฒํผ, ์ด๋ฏธ์ง ์ถ๋ ฅ
๊ฒ์ ๊ตฌ๋
- ๋์ด๋ ๋ณ ํ์ ์์ฑ ๋น๋ ์ ์กฐ์
- ๋๋ค ์์ฑ ๊ฐ์ ๋ฐ๋ฅธ ํ์ ์ข ๋ฅ ์กฐ์
- ๋๋ค ํ๊ฐ ๊ฐ์ ๋ฐ๋ฅธ ํ์ ํ๊ฐ ์๋ ๋ถ์ฌ
- ์บ๋ฆญํฐ ์ด๋ฏธ์ง์ ํ์ ์ด๋ฏธ์ง ์ขํ ๊ณ์ฐ์ ํตํ ์ ์ ๊ณ์ฐ
- KeyAdapter ํด๋์ค๋ฅผ ์ด์ฉํ ์บ๋ฆญํฐ ์ด๋
- Thread ๋ฅผ ํตํ ํ์ , ์บ๋ฆญํฐ repaint
๊ฒ์ ๊ฒฐ๊ณผ ์ฐ์ถ
- Static ๋ณ์๋ฅผ ํตํ ๊ฒ์ ๊ฒฐ๊ณผ ๊ณ์ฐ
- ์บ๋ฆญํฐ์ ํ์ ์ด ์ ์ด ์ ํ์ ์ ์์ฑ ๊ฐ์ผ๋ก ์ ์ ๋ถ์ฌ
- double ๊ฐ์ผ๋ก ๊ณ์ฐ ํ String.format ๋ฉ์๋๋ฅผ ํตํด ์์์ 2์๋ฆฌ ๊น์ง ์ถ๋ ฅ
์ค์ ๋ฉ์๋
๋์ด๋์ ๋ฐ๋ผ ํ์ ์์ฑ ๋น๋์๋ฅผ ์กฐ์
-
Easy : 0.8์ด ๋ง๋ค ํ์ ์์ฑ
-
Normal : 0.5์ด ๋ง๋ค ํ์ ์์ฑ
-
Hard : 0.3์ด ๋ง๋ค ํ์ ์์ฑ
๊ตฌํ์๋ฆฌ
-
Thread์ Sleep ๊ธฐ๋ฅ ์ด์ฉ
-
Sleep ์๊ฐ์ ๋ฃ์ด์ฃผ์ด ๋์ด๋์ ๋ง๋ ๋น๋ ๊ตฌํ
-
ํ์ ๊ฐ์ฒด ์์ฑ โย ์์ง์ Thread ์คํ โย ๋ฐฐ์ด๋ฆฌ์คํธ ์ฝ์
// ๋์ด๋ ๋ณ ํ์ ์์ฑ ๋น๋์ ์กฐ์ ๋ฉ์๋
public void run() {
while (true) {
if (Main.GAME_START) {
if (this.difficulty.equals("EASY")) {
try {
Thread.sleep(800); // 0.8์ด๋ง๋ค
Grade grade = new Grade(generator.nextInt(22));
grade.start();
gradeList.add(grade);
} catch (InterruptedException e) {
System.err.println(e.getMessage());
}
} else if (this.difficulty.equals("NORMAL")) {
try {
Thread.sleep(500); // 0.5์ด๋ง๋ค
Grade grade = new Grade(generator.nextInt(22));
grade.start();
gradeList.add(grade);
} catch (InterruptedException e) {
System.err.println(e.getMessage());
}
} else {
try {
Thread.sleep(300); // 0.3์ด๋ง๋ค
Grade grade = new Grade(generator.nextInt(22));
grade.start();
gradeList.add(grade);
} catch (InterruptedException e) {
System.err.println(e.getMessage());
}
}
} else {
interrupt();
break;
}
}
}
ํ์ ๊ฐ์ฒด ์์ฑ ์ ๋๋ค ์์ฑ ๊ฐ ๋ถ์ฌ
- ์์ฑ ๊ฐ 0 ~ 4 : A+, A โย ํ๋ฅ 23%
- ์์ฑ ๊ฐ 5 ~ 9 : B+, B โย ํ๋ฅ 23%
- ์์ฑ ๊ฐ 10: ~ 12 : C+, C โ ํ๋ฅ 13.5%
- ์์ฑ ๊ฐ 13 ~ 15 : D+, D โ ํ๋ฅ 13.5%
- ์์ฑ ๊ฐ 16 ~ 19 : F โย ํ๋ฅ 18%
- ์์ฑ ๊ฐ 20 ~ 21 : Item โย ํ๋ฅ 9%
๊ตฌํ์๋ฆฌ
- Random ๋ฉ์๋๋ฅผ ์ด์ฉ, ์์ฑ ๊ฐ ๋๋ค ์์ฑ
- ์์ฑ ๊ฐ์ ๋ง๋ ํ์ ์ด๋ฏธ์ง ์ฝ์
- ๊ฐ ํ์ ์ ๋๋ค ํ๊ฐ ๊ฐ, ๋๋ค ์์ฑ์์น ๋ถ์ฌ
// ํ์ ์ด๋ฏธ์ง ์์ฑ ๋ฐ ๋๋ค ๊ฐ ๋ถ์ฌ ๋ฉ์๋
public Grade(int gradeType) {
//ํ์ ์ด๋ฏธ์ง ์์ฑ
if (gradeType >= 0 && gradeType <= 4) {
if (gradeType % 2 != 0) {
gradeImage = new ImageIcon(".\\bin\\Data\\gradeAPlus.png").getImage();
} else
gradeImage = new ImageIcon(".\\bin\\Data\\gradeA.png").getImage();
} else if (gradeType >= 5 && gradeType <= 9) {
if (gradeType % 2 != 0) {
gradeImage = new ImageIcon(".\\bin\\Data\\gradeBPlus.png").getImage();
} else
gradeImage = new ImageIcon(".\\bin\\Data\\gradeB.png").getImage();
} else if (gradeType >= 10 && gradeType <= 12) {
if (gradeType % 2 != 0) {
gradeImage = new ImageIcon(".\\bin\\Data\\gradeCPlus.png").getImage();
} else
gradeImage = new ImageIcon(".\\bin\\Data\\gradeC.png").getImage();
} else if (gradeType >= 13 && gradeType <= 15) {
if (gradeType % 2 != 0) {
gradeImage = new ImageIcon(".\\bin\\Data\\gradeDPlus.png").getImage();
} else
gradeImage = new ImageIcon(".\\bin\\Data\\gradeD.png").getImage();
} else if (gradeType >= 16 && gradeType <= 19) {
gradeImage = new ImageIcon(".\\bin\\Data\\gradeF.png").getImage();
} else if (gradeType == 20) {
gradeImage = new ImageIcon(".\\bin\\Data\\timePlus.png").getImage();
} else {
gradeImage = new ImageIcon(".\\bin\\Data\\FMinus.png").getImage();
}
this.speed = 2 + generator.nextInt(5);
this.x = generator.nextInt(1200);
this.gradeType = gradeType;
}
๊ฒ์ ์ข ๋ฃ, ๋ ์ ๋จ์ด์ก์ ๊ฒฝ์ฐ ํ์ ํ๊ฐ ๋ฉ์ถค
-
๊ฒ์ ์ข ๋ฃ
ํ์ ์ด ๊ณ์ ๋จ์ด์ง๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ์ฐ์ถ์ ์ค๋ฅ ๋ฐ์
-
๋ ์ ๋จ์ด์ก์ ๊ฒฝ์ฐ
์์ง์ ์ข ๋ฃ ํ ๋ฐฐ์ด๋ฆฌ์คํธ์์ ์ญ์
๊ตฌํ์๋ฆฌ
- ํ์ ํ๊ฐ ์ฌ๋ถ ๋ณ์๋ฅผ ํตํด ๊ด๋ฆฌ
- ํ์ ์ด ํ๊ฐ ์ค์ด ์๋ ๋ Thread ์ ์ง ํ ๋ฐฐ์ด๋ฆฌ์คํธ์์ ์ญ์
// ๊ฒ์ ์ข
๋ฃ, ๋
์ ๋จ์ด์ก์ ๊ฒฝ์ฐ ํ์ ํ๊ฐ ๋ฉ์ถค ๋ฉ์๋
public void run() {
try {
while (true) {
drop();
if (proceeded) {
if (!Main.GAME_START) { // ๋จ์ด์ง๋ ํ์ ์ด ์๋ ๋์ค์ ๊ฒ์์ด ์ข
๋ฃ ๋๋ค๋ฉด ๋จ์ด์ง๊ณ ์๋ ํ์ ๋ ๋ฉ์ถฐ์ผ ํ๋ค
interrupt();
break;
}
Thread.sleep(Main.SLEEP_TIME);
} else {
interrupt();
break;
}
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
Leave a comment