이번엔 지난 1편에 이어
시너지, 아이템에 대해 써보고자 한다!
[기타] 안드로이드로 TFT(전략적 팀 전투) 유사하게 구성해보기(1)
여느날처럼 식사를 하며 TFT 유튜브를 시청하고 있었는데, 평소엔 들지 않았던 저건 어떻게 만들었을까? 라는 생각이 문득 들어, 밥을 먹다가 고민에 빠졌다. 그리고 재미있을 것 같다는 생각이
and-chunbae.tistory.com
1편은 위 링크로 들어가면 볼 수 있다.
1. 시너지
TFT에는 다양한 시너지가 있고, 각 시너지별로 특정 기물의 수를 충족시킬 때 마다 효과가 증폭되는 방식이다.
시너지 내에서도 직업/계열로 나뉘게 되는데
이전에는 직업 계열 시너지는 하나만 있었던 시절이 있었으나, 최근 들어 둘 사이의 경계가 모호해져 통일하도록 구현하려고 한다.
시너지는 시너지 마크 이미지, 시너지명, 포함된 유닛, 시너지가 발동되는 기물의 필요 수, 시너지의 효과 가 있다.
시너지 효과의 경우, 단순히 수치 상승 뿐 아니라 효과가 변경되는 경우도 있어, 데이터 클래스에는 따로 담지 않고 개별적으로 구현해두는게 좋을 것 같다는 생각이 들었다.
data class Trait(
val name : String,
val traitIcon : String,
val traitUnits : List<Unit>,
val traitLevel : List<Int>
)
그래서 위와 같이 구성했다.
2. 아이템
아이템의 경우는 크게 8가지 종류로 나눌 수 있다.
조합 아이템 / 완성 아이템 / 지원 아이템 / 오른의 유물 / 찬란한 아이템 / 챔피언 복제기 / 자석 제거기 / 아이템 재조합기
하지만 여기서 직접적으로 '아이템' 이라고 칭할 수 있는 것들은 5가지이고,
챔피언 복제기 / 자석 제거기 / 아이템 재조합기 는 아이템의 형상을 띄지만 유닛에게 아이템의 효과를 부여한다고 보기는 어렵기 때문에
따로 구현하는 것이 맞지 않을까? 라고 생각했다.
data class Item (
val name : String,
val thumbNail : String,
val itemType : EquipItemType, // 두 개 이상의 특성을 동시에 가질 수 없으므로 List가 아니다.
val itemStat : UnitStat, // 이 아이템이 직접적으로 올려주는 유닛의 스텟이다.
val itemEffect : List<ItemEffectType> // 한 아이템이 두 가지 이상의 기능을 할 수 있으므로 List로 설정했다. ex) 방어력, 마법저항력 증가 / 공격력과 체력 증가 등
)
enum class EquipItemType() { // 유닛이 착용 가능한 아이템의 종류
HALF, // 재료 아이템 2개를 조합해 완성 아이템 1개를 만드는 형식이므로, half 와 full로 표기하는게 좋을 것 같다고 생각했다.
FULL,
RELIC, // 오른의 유물 아이템
BRILLIANT, // 찬란한 아이템
SUPPORT //지원 아이템
}
enum class ItemEffectType() {
DAMAGE_AP,
DAMAGE_AD,
HEAL,
SHIELD,
RAISE_DEFENCE,
RAISE_ANTI_MAGIC,
REDUCE_DAMAGE, // 받는 피해 감소
REDUCE_AS, // 공격 속도 감소
AIRBORNE,
MANA_REGEN,
MANA_BURN
}
위와 같이 구성했고, 아이템을 구성하며 이전에 구성했던 부분에 변경점이 생겼다.
아이템이 종류에 따라 직접적으로 유닛의 스텟에 관련하기도 하므로, 이전에 작성했던 유닛 쪽 데이터 클래스에 변화가 생기게 되었다.
data class UnitStat(
val healthPoint : Int,
val manaPoint : Int,
val defaultManaPoint : Int,
val attackDamage : Int,
val abilityPower : Int,
val defence : Int,
val antiMagic : Int,
val attackSpeed : Int,
val moveSpeed : Int,
val attackRange : Int,
)
기존에 Unit의 데이터클래스 파일에 선언되어있던 스텟 관련 변수들을 따로 모아 별도의 데이터클래스를 구성했다.
비착용적 아이템 (챔피언 복제기, 자석 제거기, 재조합기) 의 경우에는 자체적으로 가지는 효과 외에는 다른 효과가 없기에
data class EffectItem(
val name : String,
val thumbNail : String,
val type : EffectItemType
)
enum class EffectItemType() {
COPY_UNDER_3_COST_UNIT, // 하급 챔피언 복제기
COPY_UNIT, // 챔피언 복제기
REMOVE_EQUIP_ITEM,
ROLL_ITEM
}
위와 같이 이 아이템이 무슨 효과를 가질 수 있는 아이템인지만을 구분하여 작성하였다.
이렇게 안드로이드로 전략적 팀 전투 구성해보기 2편이 끝났다.
아마 가면 갈수록 수정사항이 많아지겠지만..
평소에 정말 재미있게 하고 있는 게임이라 간단하게나마 끝까지 구현해보고 싶은 마음이 크다.
GitHub - ChunBaee/TFT_System_Clone_Android: 재미로 만들어보는 전략적 팀 전투 시스템
재미로 만들어보는 전략적 팀 전투 시스템. Contribute to ChunBaee/TFT_System_Clone_Android development by creating an account on GitHub.
github.com
'[개발] > [개발_기타]' 카테고리의 다른 글
[기타] 안드로이드로 TFT(전략적 팀 전투) 유사하게 구성해보기(1) (1) | 2023.10.18 |
---|---|
[달력 일정 구현 로직] 일정이 유기적으로 보여야하는 달력 일정 구성 로직 (0) | 2023.08.08 |