Techit 20th 2nd

Huisu·2023년 9월 18일
0

Techit

목록 보기
42/42
post-thumbnail
  1. DAY_VOTE 상태일 때 startVote를 통해서 빈 투표 객체가 생성 → 이후 사용자들이 투표를 다 해서 confirm 수가 살아 있는 사람 수와 같을 때 endVote를 호출함

  2. endVote 호출 시 DAY_VOTE가 끝난 거라면 DAY_DISCUSSION으로 페이즈를 바꿔 줌

  3. endVote가 다 끝나면 voteController에서는 publish라는 함수를 호출함 이때 DAY_DISCUSSION (마피아 후보 한 명 추리기) 과정이라면 DayDiscussionMessage 객체를 만들어서 DayDiscussionManager를 이용해 로직을 처리함

  4. DAY_DISCUSSION도 끝나면 이제 확정 버튼이 나타나고 이 사람을 진짜 죽일 것인지 결정하는 DAY_ELIMINATE 단계로 바꿔 줌 현재 phase = DAY_ELIMINATE 임. 이 상태에서 또 죽일 것인지 확정/취소 버튼을 통해 DAY_ELIMINATE를 위한 startVote → vote → confirm → endVote 과정이 진행됨

  5. 또 인원수대로 투표가 끝나면 publish를 함 현재 단계 DAY_ELIMINATd이기 때문에 DayEliminateMessage 객체를 만들고 DayEliminateManager 실행함

이런 식으로 메시지 보내기가 아니라 연결 연결 연결로 바꾸는 작업을 하고 있었어요!!

저 10분만 쉬고… 올겠습니다 잠시.. → 넴 알겠습니당..

현재 저의 상황 (희건)

천천히하셔유…

약간 지금 저희 게임 로직을 어떻게 연결할지 통일이 필요할 것 같습니다.

그 publish 메소드에서 하는 짓을 옮기면 그것도 통합이 안 될까요??

그게 단계를 구분해서 다른 매니저한테 보내주는 역할을 하고있습니다

코드 잠깐 보고 오겠습니다..

네에엡

어려워용 크어어억

혹시 지금 로직이 endVote하고 startVote를 또 호출하는데 지금 로직 자체로 모든 게임로직이 담겨있는건가요?

낮투표시작부터 빙빙 돌아오나요? 메서드 호출 순서가 헷갈립니당

그 startVote → 참여자들 모두가 vote를 함 → endVote 이 사이클이

낮 투표에서 한번 돌고 (DAY_VOTE) 지목된 사람이 추려지면 이 사람을 죽일지말지 투표하는 (DAY_ELIMINATION)에서 한번돌고 밤투표(NIGHT_VOTE)에서 한번돌고 마무리됩니다

투표는 레디스 동시성 때문에 생성된 뒤 바로 삭제되고 결과값만 파라미터로 넘기면서 전달하는 방식입니다 진짜 바로바로 계산하고 바로바로 전달해 주고 연속적으로 진행돼요

오호 그런것이군요. 으으음

그래서 제가 로직을 나누기가 어려웠군요 바로바로 진행되는거라

제가 지금 어려운 부분은 투표할 때마다 검사하는 로직이 시간복잡도가 너무 높아서 투표를 모두 끝내고

한번에 집계를 해서 결과를 내려고 했기 때문인데 이게 연결되어 있으면 어떻게 나눠야 하나 싶습니다

만약에 30초동안 투표를 진행한다고 하면 30초동안 딜레이를 주고 30초 뒤에 투표 결과 처리 로직이 호출되는 방식으로 생각하고 있었습니다.

이 메시지 매핑을 사용하시나요? → 사용하지 않습니다!! 지우셔도돼용..

그 publish 뒤에 이렇게 돼 있는 부분이 있습니다 getSuspiciousList 처음에 동점자가 발생하면 그 후보에 한해서 재투표를 하는 줄 알고 후보자를 저장한 거고 (현재는 한 명만 넣어서 List로 반환합니다) getEliminationPlayer가 죽어야 하는 사람 한 명의 id를 반환해 주는 함수라서 publish에서 각단계메시지의 객체를 만들고 각 단계 Manager의 sendMessage 메소드를 호출해 주는 게 결과 처리랑 비슷할까요?

→ 질문이 이해가 안되어요…저 지금 난독증입니다.

디스코드로 이야기하실까요??

그 투표가 끝난 뒤 publish를 호출할 때 vote 이게 결과예요 <투표한 사람, 투표받은사람>

0개의 댓글