게임룰

턴제 게임을 예시로 들겠습니다.

게임의 프로세스를 도식화하고 , 과정을 정리해둡니다.

이것은 코딩과 상관없는 단계입니다.



포커 게임중 홀뎀이 위와 같은 프로세스를 가지게 됩니다. 이것을 멀티플레이어가 되는 게임을 만들기위해서 
각 언어에 맞는 구조체를 주고 받기위해 패킷화하여, 약속된 방식으로 주고받게 되지만! 모든 플래폼에 대응하기에 약간의 제약 사항이 있습니다.

그래서!! 웹이던 어플이던 모바일앱이던 어느곳에서나 해석이 가능한 순수 문자열을 통해 홀뎀이라는 네트워크 메시지를 구현해 보겠습니다.

통신을 위한 엔드포인트는 웹서비스이던,TCP이던 편한 방법을 사용하면 되며! 서버를 작성하는 구체적인 방법은 논외이니 제외하겠습니다.

로긴처리

일단, 클라이언트가 서버로 접속을 성공하면.., 서버는 “hello” 라는 문자열을 보내 줍니다. 
그러면 클라이언트는 서버와 통신할 준비가 된것이며!! 로긴을 시도할수 있을것입니다.

sendPacket("loginres$myID$myPW"); 
이렇게 한줄의 문자열로 로긴요청을 합니다. 각 필드는 특수문자로 구분하며! 제일 앞에 문자는 어떠한것을 요청/응답을 받았냐? 에 해당하는 약속된 메시지 입니다.

이 구분문자는 대부분의 언어에 있는 문자열 함수중 
split 함수를 사용하며 분리해낼수가 있습니다.


그리고 로그인이 정상적으로 되었다면!! 서버로 부터 “loginreq$1”, 실패했다면 “loginreq$0” 을 받게 될것이며 
로그인이 정상적으로 되었다면!! 테이블에 앉을수 있는 메시지를 보낼수가 있습니다.


게임입장

sendPacket("Sit$"); 
이렇게요!!!!

그러면 서버는 모든 클라이언트에게.., 특정유져가 테이블에 착석을 했다라고 알려주겠죠!! 
”Sitting$1$John$500”    ==> John이라는 유져가 1번째 테이블에, 500달러를 가지고 착석을 했다는 의미

이러한 프로세스로 한명의 유져가 더 착석을 합니다.


게임진행

”Sitting$2$Smith$300”  
스미스가 300돈을 가지고 2번 자리에 착석을 했네요!!! 게임의 위한 최소 플레이 2명이 충족했기때문에 이제 게임이 시작하게 됩니다.

"StageStart" 
서버로 부터 새로운 스테이지가 시작됨을 받게됩니다.  서버는 역으로 모든 클라이언트에게 보내게 되겠죠

“Dealer$1” 
딜러는 1번째 자리인 존이군요!!! 딜러마크를 이동해줍니다.

”SmallBlind$1$5” 
1번째 자리인 존이 먼저 SB에 해당하는 5달러의 판돈을 냅니다.

”BigBlind$2$10” 
2번째 자리인 스미스가 BB에 해당하는 10$를 내게 됩니다.

그리고 클라이언트는 자신이 무슨 카드(포켓카드 2장)을 받았는지 서버가 각 개별로 보내줍니다. 
다른 사람것을 보내주면 안되겠죠!! 
“Pocket$0$4$1”     //자신의 첫번째 카드가 스페이드 4임   (pos/카드숫자/카드모양) 
“Pocket$1$5$2”     //자신의 두번째 카드가 다이아 5임

그리고 각 유져는 순서대로 벳팅을 하게 되겠죠!!!

”Call$”  “Fold$”  “Raise$400$”  상황에 따라 3가지 상황을 서버에게 보내줍니다.

그리고 서버는 다시 클라이언트에게 상대가 어떠한 행동을 했는지 보내 줍니다. 
”Call$1”     존이 콜을 했네요 
”Call$2”     스미스도 콜을 했습니다.

여기까지가 홀뎀에서 프리플롭이며!!! 이제 커뮤니티 카드인 바닥카드 3장이 깔리게 됩니다.

”Community$0$3$1” 
”Community$1$4$1” 
”Community$2$5$1” 
스페이드 3,4,5 세장의 카드가 깔리고 다시 순서대로 베팅단계가 됩니다.


승패처리

”Fold$1”   존이 패가 안좋아서 폴드를 외칩니다.

누군가 한명이 폴드를 하게되면  한핸드가 끝나게 되고 승패를 알려주게 되죠!!!

”Win$2$300”  존이 300달러를 땄네요!!


게임진행되는 조건이 성립되는동안

계속 반복하여!! 게임을 진행합니다.!! 


채팅수준으로 멀티플레이어 게임을 구현할수가 있습니다.

구현체는 없으나~ 대부분의 턴제게임 프로토타잎은

위와같은 패킷설계(문자열)로 게임 진행이 가능합니다.







  • No labels