TIL
TIL - 전투 RPG게임 (코드 개선)
hamiric
2024. 11. 5. 17:21
## 해당 TIL은 주어진 과제를 수행하면서 얻은 학습 내용과, 시행착오 등등을 종합해서 작성한것임
1. 함수의 매개변수 줄이기
매개변수로써 객체를 넘긴다는 것은, 객체가 복사될 수 있는 위험성이 존재할 뿐만 아니라, 함수 내부에서 객체를 수정하는지에 대한 모호함이 있을 수 있으므로, 정말로 필요한 때가 아니면 되도록 쓰지 않는게 좋다.
개선한 코드들은, 객체에 직접 접근할 수 있음에도 불구하고 매개변수로 넘기고 있던 코드들을 멤버함수에서 처리하거나, 직접 접근하여 처리하는 걸로 수정하였다. (예시는 간단한것만)
< 기존 코드 >
Monster getRandomMonster(List<Monster> mons) {
int rndmonsidx = Random().nextInt(mons.length);
battlemonsidx = rndmonsidx;
return mons[rndmonsidx];
}
< 개선 코드 >
Monster getRandomMonster() {
int rndmonsidx = Random().nextInt(monsterlist.length);
battlemonsidx = rndmonsidx;
return monsterlist[rndmonsidx];
}
2. 전투시 턴에 대한 고찰 및 개선
수정 전에는 [ 캐릭터턴 ] 과 [ 몬스터턴 ] 이렇게 2개의 턴만을 이용하여, 각각 맞는 타이밍에 배틀이 진행 될 수 있게 했었는데, 도전기능을 추가함에 따라, 기능들이 약간 타이밍이 맞지 않게 전개되는 문제가 발생했다. 따라서 턴을 시작할때의 [ 시작턴 ] 과 전체 턴이 끝났을때의 [ 끝날턴 ] 을 추가로 만들어준 후, 각각에 맞는 기능들을 추가 및 수정해 주었다.
< 기존 코드 >
while (true) {
//...
switch (turn) {
case BattleTurn.characterturn:
print('\n${user.name}의 턴');
userselectaction(battleMonster);
turn = BattleTurn.monstertrun;
break;
case BattleTurn.monstertrun:
print('\n${battleMonster.name}의 턴');
battleMonster.attackCharacter(user);
showAllStatus(battleMonster);
turn = BattleTurn.characterturn;
break;
}
if (user.hp <= 0 || battleMonster.hp <= 0) {
break;
}
}
//...
}
< 수정 코드 >
battle:
while (true) {
// ...
switch (turn) {
case BattleTurn.startturn:
turnnum++;
print('\n${turnnum}번째 턴입니다!');
if (turnnum != 1 && turnnum % 3 == 1) { // 4, 7, 10...
battleMonster.increasedfs();
}
turn = BattleTurn.characterturn;
break;
case BattleTurn.characterturn:
print('\n${user.name}의 턴');
userselectaction(battleMonster);
turn = BattleTurn.monsterturn;
break;
case BattleTurn.monsterturn:
print('\n${battleMonster.name}의 턴');
battleMonster.attackCharacter(user);
turn = BattleTurn.endturn;
break;
case BattleTurn.endturn:
user.decresebuff();
if (user.hp <= 0 || battleMonster.hp <= 0) {
break battle;
}
showAllStatus(battleMonster);
turn = BattleTurn.startturn;
break;
}
// ...
}