AI 공부

[바이브코딩] MD5 배틀 시뮬레이터 제작기 3일차

싱커 2025. 7. 5. 22:07

원래의 채팅방으로 돌아와서 영역전개!

8속성이 조금 아쉬워서 8종족을 추가해볼까하다가 찾은건데, 마족 언데드 정령 용족같은애들이 방어상성이 있으면 더 괜찮겠다싶어. 현행 해시코드에서 얻어쓰면되겠는데

[8속성 & 8종족 리스트]
8속성 (공격과 방어에 모두 적용):
화(火) 수(水) 지(地) 풍(風) 광(光) 암(暗) 뇌(雷) 금(金)
8종족 (방어에만 적용되는 특성):
인간(Human) 엘프(Elf) 드워프(Dwarf) 오크(Orc)
언데드(Undead) 정령(Spirit) 용족(Dragonkin) 마족(Fiend)
이 케이스는 목 대신 뇌를 썼는데, 목 존치 vs 뇌 대체 어느쪽이 나아보여?

AI의 답변은 이랬다.

이 의견대로 진행하긴 했는데, 개발 완료 시점에서 돌아보니 막상 초목 속성이 없는 게 아쉬웠다. 보통 번개는 빛 또는 바람속성으로 포괄하기도하고.. 번개족은 메이저한 종족도 아니어서 약간의 아쉬움으로 남았다. 향후 개량을 하면 또 재밌을 것 같다.

8종족 방어상성

이어서 방어상성도 만들어줬다. 직관적으로 와닿는것도 있고, 아닌 것도 있다. 공격속성중에 빙속성이 따로 없는게 아쉽다. 그렇다고 다 때려넣을 순 없다. 일단 이대로 ㄱㄱ

흠 좋아. 저걸 반영해서 스크립트 코드를 재설계한다치자. 그 흐름을 나한테 말로 설명해봐. 해시 어느자리가 어느범위에서 어떤역할하고 이런식으로. 남는값은 얼마고 등등

게임 로직

0~25번째 자리값을 사용하고, 26~31번은 남는다. 추후 게임성을 위해 활용되면 좋을 것 같다.


이제 코딩을 해야하니,

다시 게임 로직을 설계해보고자 중간 점검을 시도했다. 대화 컨텍스트가 너무 길어져서 누락된 게 생기진 않았을까?

체력 위력 명중률 범위를 어떻게뒀었지? 체력은 10부터 참값으로 1씩가산
명중률은 30~100% 위력은 기준없음이던가?

게임성이 좀 아쉬우면 체력의 범위를 65가 최저 몫3당1씩증가 이렇게할까?
명중이 낮은 기술은 위력이 높은 상관관계를 만들고싶은데 과한로직이려나?

체력, 위력, 명중

AI는 피통이 많은 걸 좋아하나보다. 나는 루즈한게 별로라고 느꼈는데, 감성차이겠지?

전투알고리즘이 현재는 기대위력이 제일 높은대로 공격하잖아? 전투 중후반에 남은 체력을 고려하고 저위력 고명중 기술로 다른선택을 할 수 있게끔 AI를 설계할 수 있나?

만들다보니 전투알고리즘에 하자(무지성 최대 기대위력 기술 선택)가 있어보여서 개선을 요구했다.

새로운 AI 설계: '상황 적응형' 전투 알고리즘

새로운 AI는 크게 두 가지 모드를 가지며, 상대방의 남은 체력에 따라 스스로 모드를 전환하여 최적의 판단을 내립니다.

모드 1: '마무리 모드 (Finisher Mode)'

이 모드는 AI가 "이번 턴에 확실히 끝낼 수 있다!"고 판단했을 때 발동됩니다.
발동 조건: 상대방의 남은 HP가 전체 HP의 25% 이하일 때.행동 로직:먼저, 자신이 가진 모든 기술로 입힐 수 있는 **'최소 보장 데미지'**를 각각 계산합니다.(데미지 공식은 85%~100% 사이의 편차를 가지므로, 85%의 데미지를 최소 보장 데미지로 봅니다.)계산된 '최소 보장 데미지'가 상대의 남은 HP보다 높은 기술이 있는지 찾습니다. 즉, '이번에 쓰면 빗나가지만 않으면 무조건 이기는 기술'을 찾는 것입니다.만약 그런 '확정킬' 기술이 하나 이상 있다면, 그중에서 가장 명중률이 높은 기술을 최종적으로 선택합니다.이유: 이미 이길 수 있는 상황에서는, 위력이 조금 낮더라도 빗나갈 확률을 1%라도 줄이는 것이 가장 현명한 판단이기 때문입니다.

모드 2: '최대 효율 모드 (Max Efficiency Mode)'

이 모드는 상대의 HP가 아직 충분히 많아서 한 방에 끝낼 수 없을 때 사용되는 기본 모드입니다.
발동 조건: 상대방의 남은 HP가 전체 HP의 25%를 초과할 때.행동 로직:이것은 기존의 방식과 같습니다. AI는 장기적인 관점에서 가장 효율적으로 데미지를 누적시키는 방법을 찾습니다.자신이 가진 모든 기술에 대해 **'기대 데미지'**를 계산합니다.기대 데미지 = (기본 데미지) × (명중률 / 100)계산된 '기대 데미지'가 가장 높은 기술을 최종적으로 선택합니다.이유: 이 방식은 위력이 높아도 명중률이 낮으면 기대값이 낮아지고, 위력이 낮아도 명중률이 높으면 기대값이 높아지는 것을 모두 반영하므로, 장기적으로 가장 많은 피해를 줄 수 있는 최적의 수를 선택하게 됩니다.

 

놀랍게도 포켓몬식 대미지 난수가 들어가있었다..! 명중난수까지 고려하면 매 게임마다 다른 양상이 펼쳐질텐데, 이걸 고정시드로 가져갈지, 현행대로 놔둘지 고민이 되었다.

와 잠깐만..
1. 지금 포켓몬식 85%난수가 들어있어?
2. 명중난수는 지금 완전히 랜덤인데 고정시드가아닌 랜덤시드가 더 좋은게임성인가?
3. 이걸 플레이하는 유저한테 보일 정보량은 어느수준인게좋을까? 지금은 보유스킬을 안보여주고있어서 동타입 저위력 저명중같은 하위호환 스킬이 있어도 어색해보이진않아.

 

각각에 대한 답은 이랬다.

이 난수가 없다면 모든 공격의 데미지는 항상 똑같이 계산됩니다. 전투가 예측 가능한 수학 문제처럼 변해버리죠. 이 약간의 불확실성이 "이번엔 데미지가 더 잘 뜰까?"하는 긴장감과 재미를 만들어주는 핵심적인 게임 요소입니다.
현재의 랜덤 시드 방식이 게임성에 더 좋습니다.
우리는 '한 번 결과를 보고 마는 시뮬레이터'가 아니라, '계속 즐길 수 있는 배틀 게임'을 만들고 있으므로, 매번 다른 결과가 나오는 지금의 방식이 훨씬 더 재미있습니다.
우리가 만들고 있는 '이름의 바이브로 즐기는 간단한 배틀 게임'이라는 컨셉에는, 현재의
'블랙박스' 방식이 훨씬 더 잘 어울립니다.
지금처럼 정보를 제한하는 것이 이 게임의 매력을 극대화하는 길입니다. 나중에 플레이어가 직접 기술을 선택하는 기능을 추가하게 된다면, 그때 정보를 공개하는 것을 고려해볼 수 있습니다.

 

수긍할만한 이야기들이어서 재미요소로 선회했다.


알겠어. 그럼 재미요소쪽을 개선해보자. HP바 줄어드는 애니메이션은 괜찮긴 해. 한데 시각적으로 더 보여줄 수 있는 방법은 없을까?

피격효과, Super Effective, Faint 연출을 넣어준다고 한다.

ㅇㅇ 괜찮네. 내가 더 생각했던 건, 우리가 종족 8개를 구상했었으니까 도트일러스트도 넣어서 그 캐릭터간의 상호작용을 보여줄수있을까하는 생각도 드는데, 도트그리기 너한테 좀 어렵나? 여차하면 팔레트스왑도 지원해줘서 8종캐릭터 8가지색깔로 64개를 지원해주는것도 생각해보고싶은데 ㅋㅋ

AI도 감탄하는 나의 아이디어

SVG로 도트아트 구현, 팔레트스왑 시스템 설계등을 해준다고 한다.

캐릭터 프로필 시스템

남는 해시값을 이용하면 같은 속성 같은 종족이어도 다른 캐릭터 디자인을 만들수도 있겠다.

svg로 만들어도 좋아보이긴하네. 지금까지 나눈 대화를 토대로, 종족을 포함한 캐릭터 구현과 애니메이션이 기능하도록 코드를 만들어줘.

해줘!

이걸 해줌

그런데 버그가 있었다..

고쳐달라고 했더니 에러 없이 잘 돌아갔다.

저글링 vs 히드라

피통이 많아서 루즈하니까, 수정펀치를 날렸다.

체력은 65~150범위로 하자. 배틀이 너무 지저분해.
콘솔창에는 기대위력대신 결정력(위력, 명중률)을 찍자.
지금 디버그창에는 상대만 찍히는것같은데, 플레이어도 찍어주면 좋겠네.
HP바 밑에 공방특공특방스피드는 랭크로 표시하면 어떨까?

마크 주커버그 VS 일론 머스크

굿

직관성 게임성 모두 살아났다. 시연 GIF 및 전체 코드를 첨부하고 마무리해야겠다.

샘 알트먼 VS 데미스 허사비스(24프레임)