Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- riverpod
- nodejs
- 단축키
- Clean Architecture
- abap
- JQ
- Flutter
- react
- ListView
- lifecycle
- java 콘솔 출력 차이
- DART
- firebase
- 앱심사
- java 출력
- 자바 출력 방식
- 배포
- scss
- LLM
- develop
- unity
- java
- println
- 자바스크립트
- 엡
- printf
- npm
- UI/UX
- 자바 포맷 출력
- JS
Archives
- Today
- Total
guricode
[CLI RPG] 몬스터의 랜덤데미지가 처음에만 적용되던 버그 본문
문제 내용
전투 RPG 게임에서 몬스터의 공격은 매 턴 랜덤한 공격력으로 캐릭터에게 피해를 줘야 한다.
그러나 실제 실행 결과, 몬스터의 공격 데미지가 처음 공격 때만 랜덤으로 생성되고 이후부터는 고정값으로 계속 들어갔다.
문제 상황
게임을 플레이하면 몬스터가 처음 공격할 때는 데미지가 랜덤으로 계산된다.
그러나 그 이후로는 동일한 고정 데미지가 반복된다.
기대한 동작은 몬스터가 공격할 때마다 새로운 랜덤 데미지를 생성하는 것이다.
원인 분석
Monster(String name, int health, int maxAttack, int playerDefense)
: super(
name,
health,
Random().nextInt(maxAttack + 1), // 이게 단 한 번 실행됨
0,
);
attack 값이 생성자에서 한 번만 Random().nextInt(...)로 계산됨.
이후 attack을 사용하는 attackCharacter()는 고정된 값만 계속 사용.
이로 인해 전투가 진행될수록 몬스터가 매번 똑같은 데미지를 입힘.
변경 후 코드 (정상 동작)
class Monster extends Unit {
final int maxAttack;
Monster(String name, int health, this.maxAttack, int playerDefense)
: super(name, health, 0, 0); // attack은 쓰지 않음
int generateAttack(int playerDefense) {
return Random().nextInt(maxAttack + 1); // 방어력보다 높게
}
void attackCharacter(Character character) {
int generatedAttack = generateAttack(character.defense); // ✅ 매번 새로 계산
int damage = generatedAttack - character.defense;
if (damage < 0) damage = 0;
character.health -= damage;
print('$name이(가) ${character.name}에게 $damage 데미지를 입혔습니다. (공격력: $generatedAttack)');
}
}
attack 필드에 고정값을 넣지 않고, generateAttack() 메서드로 공격력을 직접 계산하게 구조를 바꿨다.
매 공격마다 Random().nextInt()를 호출하여 진짜 랜덤한 데미지가 나오도록 했다.
결과
전투 시 매번 다른 공격력으로 데미지가 계산됨.
attack 필드를 고정값으로 둘 필요 없이, 공격 시에만 동적으로 생성하도록 설계가 명확해짐.
'앱 > Flutter&Dart' 카테고리의 다른 글
| Flutter 스토어 앱 만들기 - 기본 위젯 정복하기 (0) | 2025.07.08 |
|---|---|
| 객체지향 프로그래밍 - static (0) | 2025.07.04 |
| CLI 쇼핑몰 구현 중 Cart list에 중복된 아이템 입력됨 트러블 슈팅 (2) | 2025.06.27 |
| Dart - 예외 처리 (0) | 2025.06.25 |
| 한눈에 보는 클래스와 메서드 요약 (0) | 2025.06.25 |