24b0d121e09c28a8699fe8b115ef0464d68ce5cf


새로운 리워드카드 시스템은


플로어 클리어시 보상으로 나오는 '카드'를 선택하면 덱의 변화를 주는 특수한 규칙을 갖고있는 카드가 랜덤하게 제시되는데


이를 이용해 덱빌딩을 진행하는것을 핵심으로 하는 시스템


이 시스템을 위해 덱의 크기를 10x3으로 고정(번외 모드인 멘헤라 모드에서는 다른 규칙이 적용 될 수 있음)




24b0d121e09c28a8699fe8b115ef0464d789ebc8


이를위해 리워드카드를 ScriptableObject로 만들고 비슷하거나 중복되는 효과도 함께 처리 할 수 있도록


확장성을 고려하여 코드를 구현하기 시작


구조는 각 카드를 구분하는 RewardCardType,


카드 효과 범위를 지정하고 Offset을 구분하는 RangeType

(예: Horizontal5면 Offset0=덱에서 랜덤으로 선택된 카드, Offset1=선택카드의 좌/우 1칸 카드, Offset2=선택카드의 좌/우 2칸 카드)


그리고 List 형태의 RangeEffects을 줘서 각 Offset에 어떤 EffectValue을 적용할지로 나눔


UI는 Odin 에셋을 활용





24b0d121e09c28a8699fe8b115ef046c64f6214e9e


EffectValue는 기본적인

+1 (현재 카드값에 +1을 더함)

-5 (현재 카드값에 -5를 더함)

*2 (현재 카드값에 +2를 곱함)

과 같은 계산부터


-5~+5 (현재 카드값에 -5부터 +5 사이의 랜덤값을 더함)

50%+100 (50% 확률로 현재 카드값에 +100을 더함)

50%++5 (50%확률로 현재 카드값에 +5를 더함, 반복)

10%*7 (10%확률로 현재 카드값에 7을 곱함)

이러한 확률 응용에


특수규칙들과

Digit* (각자리 숫자를 곱해서 더해줌)

Even?*0.5:*2 (짝수면 반으로, 홀수면 2배)


마지막으로 10x3 덱의 카드 위치를 활용해 범위와 함께 적용하는

- Range: RightAll, EffectValue: +2n (선택된곳 오른쪽으로 2 4 6 8 10 12 이렇게 더해줌 제일 오른쪽일시 효과는 2로 끝 다음줄로는 넘어가지않음)

- Range: Hikikomori, EffectValue:

Offset0+50,

Offset1+30,

Offset2 +10,

Offset3 -10 (구석으로 갈수록 수를 크게 더해줌 가운데가면 오히려 숫자가 줄어듦 모서리: +50 좌우끝: +30 상하끝: +10 중앙: -10)

- Center?*3:value (덱의 테두리부분이 아니라면 x3배 테두리부분이라면 무효 (예 1번째줄 3번째줄모두무효 2번째줄 좌우제일끝무효))


이렇게 짜기로 정하고 코드로 구현함



24b0d121e09c28a8699fe8b115ef046c62f62c489f


문제는 덱의 카드를 버려서 덱을 압축하는 카드 버리기 부분인데


10x3의 덱 크기를 유지하며(카드는 최대 30장) 버려진 카드의 부분은 빈 공간으로 남기면서


만약 좌우카드의 값을 +10이라는 효과를 받을때 근처에 빈칸이 있거나 막힌 공간이 있으면 적용을 건너뛰게되는 형태로 구현하려고 코드를 짜는게


자꾸 지웠던 카드가 부활해 있거나, 무시되어야 할 효과가 버려진 카드부분에 적용되거나, 10x3 덱이 10/9/10 형태로 뒤틀리거나 오류가 자꾸나서


버린 카드는 -9999값을 가지게 한 뒤 그래픽적으로만 없는카드처럼 보이게끔 일단 임시조치했음


랜덤카드선택에서는 건너뛰게 구현하고



제발 버그 안나와야할텐데 당장은 더 좋은 아이디어가 생각나지 않아서 불안불안






3ebec223e0dc0aa36dff9ee45f9f23348dd4ad9c307fc34c5d3ea37794c6


저번에 올렸던 지금 시스템으로 눈덩이 카드가 적용된 모습