[오늘의 코딩테스트]
[프로그래머스/JS] 숫자 짝꿍
[문제][풀이 코드]function solution(X, Y) { var answer = ''; X = X.split(""); Y = Y.split(""); for(let i = 9; i >= 0; i--){ const num = X.filter((x) => x == i); const num2 = Y.filter((y) => y == i); if(num.length !=0 && num = num2){ answer += String(n
ezez99.tistory.com
프로그래머스 Level 1의 문제치곤 어려웠던 문제였다!
[오늘 한일]
▶ 게임 서버 공부
- 멀티 플레이 게임에서의 서버의 역할을 배웠다.
- 클라이언트 입력 감지
- 플레이어가 우측 화살표를 누릅니다.
- 클라이언트는 키보드 이벤트를 감지하고, 이 정보를 서버에 전송합니다.
- 서버에서 입력 처리
- 서버는 클라이언트로부터 입력 데이터를 받습니다.
- 서버는 입력을 검증하고, 규칙에 맞게 캐릭터를 이동시킵니다.
- 새로운 캐릭터 위치를 계산한 후, 모든 클라이언트에 이 정보를 전송합니다.
- 클라이언트에서 상태 업데이트
- 각 클라이언트는 서버로부터 받은 캐릭터의 새로운 위치 정보를 바탕으로 화면을 업데이트합니다.
여기서 서버는 1ms의 속도로 클라이언트로부터 정보를 받아서 상태를 변경하게 되면 1명이 5초만 서버를 사용해도 5000개의 정보를 옮겨야하는데 1명이아니라 100명을 감당하게 되면 서버의 과부하가 생길 수 있다. 우리는 이것을 막기 위해서 방법을 생각해 볼 수 있다.
- 클라이언트는 서버에 적당한(1ms와 같은 비현실적인 요청 주기 X) 요청 주기로 이동 패킷을 보내자!
- 서버는 이동 패킷을 자주 받지 못하더라도 클라이언트가 자연스럽게 이동을 할 수 있게 도와주자!
이제 이 속도를 1ms가 아닌 100ms 즉 1초에 10번을 서버에서 상태 동기화 시켜 준다라고 가정하면 부담감은 많이 준다 하지만 이렇게 하면 멀티플레이 게임에서 캐릭터가 움직일 때 뚝뚝 끊겨보이고 애니메이션이 잘 연출 안될 수 있다. 이것을 해결하기 위해서 사용하는 것이 선형 보간 이다.
- 선형 보간
위의 사진과 같이 현재 플레이어가 있었던 위치가 a(2, 1)이고 100ms 동안 최종 목적지가 b(7,4)라고 한다면 우리는 중간에 c 좌표와 여러 a, b 사이의 좌표를 구해주어야 캐릭터가 자연스럽게 움직이는 것을 구현할 수 있다.이때 사용하는 수식이 선형보간인데 선형보간의 수식은 다음과 같다.
y = y1 + (y2 - y1) / (x2 - x1) ⋅ (x - x1)
위의 수식으로 서버에서 이동키를 눌렀을 때 예상 위치 좌표를 알려준다면 클라이언트는 선형보간을 통해 중간의 경로들을 채워서 이동시킨다.
- 외삽법
외삽법(extrapolation)이란 기술로 이러한 네트워크 지연 상황에서도 이동 연출을 할 수 있습니다. 외삽법은 현재 상태와 이전 상태를 바탕으로 미래의 상태를 예측하는 기법입니다.
y = y2 + (y2 - y1) / (x2 - x1) ⋅ (x - x2)
외삽법이란 결국 현재의 정보를 바탕으로 기울기를 구해 해당 기울기의 기반한 위치를 구하는 것입니다. 어디까지나 예상 범위내의 결과를 가정하기 때문에 부스트를 쓴다거나 이러한 특수한 상황은 계산되지 않습니다.
그래서, 이러한 외삽법 테크닉을 클라이언트에 적용하게 되면 네트워크 지연이라는 이슈가 발생해도 이동 연출을 할 수 있는 방법은 확보가 됩니다. 이후에 네트워크 지연이 해결되면 클라이언트는 서버로부터 최신 위치 데이터를 다시 받고요. 이 때부터는 다시 위에서 얘기한 선형 보간 테크닉을 사용하여 이동 연출을 하면 됩니다.
[하루 요약]
하루동안 많이 한게 없어보여도 머릿속으로 서버의 이해와 tcp의 관계정리등 할게 너무 많은 시간인것 같다...
'코딩 > TIL' 카테고리의 다른 글
[TIL] js server 유니티 연동 (1) | 2024.07.03 |
---|---|
[TIL] TCP 서버의 이해(핸들러의 역할) (0) | 2024.06.27 |
[TIL] Socket.io 의 on 과 emit의 이해 (0) | 2024.06.26 |
[TIL] 모의 면접 대비 공부 (0) | 2024.06.25 |
[TIL] 디펜스 게임 제작 마무리 (0) | 2024.06.21 |