241014 TIL - defense our universe 4

LIHA·2024년 10월 14일
0

내일배움캠프

목록 보기
83/117
post-thumbnail

뼈대잡기

아니 뭐가 이렇게 많... 필수기능 목록

  • 회원가입 / 로그인 기능 (REST API로 통신) 완료
  • 유저 별 게임 데이터 관리 -> ?? 이건 레디스가 필요할 것 같다
  • 클라이언트가 서버로부터 수신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
  • 클라이언트가 서버로 송신하는 이벤트 종류 정의 및 코드 구현 (WebSocket으로 통신)
  • 유저 별 최고 기록 스코어 저장

지금 구현해보고 싶은 것 - 차근차근 정리

  • 몬스터를 죽이면 점수를 얻고 (이건 구현했음)

  • 그 점수가 일정 이상이 되면 스테이지가 넘어가게 하고 싶다.

  • 일단 클라의 score를 서버단으로 보내고 싶은데 방법을 모르겠다
    -> game.js에서 let score = 0; 으로 하드코딩 했다. 이러니까 페이로드에 몬스터당 처치 점수, 처치당 골드, 누적스코어까지 잘 담겨서 보내졌다.

호영 튜터님의 1:1 속성과외

너무 생각만 하지 말고 일단 좀 만들어라

이 타워 어디있는지 정보가 x, y로 존재하니 보내주고, 이 타워의 레벨이 필요할테고, 그런 상식 선에서 필요한 것들을 페이로드에 담아 보내주면 된다. 핸들러 맵핑은 그걸 위해 하는 것이고.

나름대로 흐름 정리

bindTower 라는 메서드가 tower.handler.js 에 있다고 하자. 그리고 game.js의 타워 구매로직 중간쯤에서 sendEvent(99, {x, y}) 로 타워의 정보를 보낸다고 하자. 그러면 handlerMapping.js에는 99:bindTower가 들어가 있어야 할 것이다.
bindTower는 일단 공룡점프 참고하면 userId와 payload를 인자로 받으니 똑같이 받아보자. 그리고 그냥 console.log로 payload를 한번 찍어보자.
-> 이러면 클라단에서 서버에게 payload로 뭘 보내는지 알 수 있다.
이걸 봐가며 검증을 포함한 비즈니스 로직을 짜 주고, 성공하면 return { status: 'success', handler: 99 } 로 리턴해주자. 이러면 sendEvent(99, {x, y}) 에서 출발해 핸들러 맵핑을 거쳐 핸들러를 실행한 bindTower라는 핸들러의 사이클은 끝이다.

on emit
io랑 socket
웹소켓은 그게 전부다.

점수가 object Object로 나온다. 뭐가 잘못된걸까 🤔


-> 이거 Score.js를 따로 두고 거기서 this.score로 불러오려고 하니 안 된 것이다. (this.score = 0으로 정의는 되어 있었다)
game.js에 하드코딩 했더니 해결돼서 일단 그렇게 두었다.

안돼 하느님 제발 (무교임)

안돼 저장도 커밋도 안했단 말이야 ㅇ래ㅑㅇ너ㅑㅐㅓㅐㅑㄱ허개ㅑ핵ㄷㅎ

profile
갑자기 왜 춤춰?

0개의 댓글