Korean Institute of Information Technology

Home

The Journal of Korean Institute of Information Technology - Vol. 19 , No. 6

[ Article ]
The Journal of Korean Institute of Information Technology - Vol. 19, No. 6, pp. 73-79
Abbreviation: Journal of KIIT
ISSN: 1598-8619 (Print) 2093-7571 (Online)
Print publication date 30 Jun 2021
Received 26 May 2021 Revised 21 Jun 2021 Accepted 24 Jun 2021
DOI: https://doi.org/10.14801/jkiit.2021.19.6.73

소켓 통신 기반의 빙고 게임을 위한 승패 판별 알고리즘
한철수*
*청주대학교 융합전자공학부 전자공학전공

Win-Loss Determination Algorithm for a Bingo Game based on Socket Communication
Cheolsu Han*
Correspondence to : Cheolsu Han Division of Converged Electronic Engineering, Cheongju University, 298 Daeseongro, Cheongwon-gu, Cheongju, Chungbuk, 28503, Rep. of Korea Tel.: +82-43-229-8446, Email: cheolsuhan@cju.ac.kr


초록

자신의 수에 의해 승리를 결정 지을 수 있는 게임과 달리, 빙고 게임은 자신뿐만 아니라 상대방의 수에 의해서도 승패가 결정 지어질 수 있다. 따라서 빙고 게임의 승패 판별에는 이러한 특성이 고려돼야만 한다. 본 논문에서는 소켓 통신 기반의 턴제 빙고 게임에 적합한 승패 판별 알고리즘을 제안한다. 이 방법에서 두 사용자의 프로그램은 각각 서버와 클라이언트로서 동작한다. 서버와 클라이언트는 사용자들의 조작에 따라 메시지와 부가 정보를 송수신하여 상대방에게 자신의 상태를 알리도록 설계된다. 제안 방법의 검증을 위해 서버와 클라이언트 프로그램을 각각 설계하였고, 승패 또는 무승부가 되어 버리는 다양한 조건에서 알고리즘의 동작을 확인하였다. 제안 알고리즘은 턴제 빙고 게임뿐만 아니라 비슷한 부류의 게임이나 통신 시스템 등에 응용될 수 있다.

Abstract

In certain games, players can win through their own actions. However, win or loss in Bingo games is determined not only by one’s own actions but also by those of the opponents. This characteristic should be considered in the win-loss determination for Bingo games. In this paper, we propose a win-loss determination algorithm suitable for turn-based Bingo games, based on Socket communication. Two players are associated to programs acting as a server and client, respectively. The server and client are designed to exchange messages including the information of the players’ actions in order to report the game’s status. To evaluate the proposed method, we implemented the server and client programs and verified the proposal for win, loss and draw conditions. The proposed algorithm is applicable not only to turn-based Bingo games, but also to similar types of games and communication systems.


Keywords: win-loss determination, turn-based bingo game, socket communication, ethernet communication

Ⅰ. 서 론

소켓(Socket) 통신은 네트워크를 통해서 데이터를 송수신하기 위해 널리 이용되고 있는 대표적인 통신 방법 중 하나이다[1][2]. 소켓 통신에 필요한 네트워크 소켓은 통신의 양 끝단을 나타내며 IP 주소와 포트 번호를 갖는다. 윈도우를 포함한 대부분의 주요 운영체제들은 네트워크 소켓을 구성하기 위한 표준화된 인터페이스를 제공하고 있기 때문에[3], 매우 편리하게 소켓 통신을 이용할 수 있다. 소켓 통신은 네트워크를 통해 실시간으로 정보를 교환할 필요가 있는 온라인 채팅[4][5], 게임[6]-[8], 화상 회의[9][10] 등에 널리 이용되고 있다.

한편, 빙고 게임은 세계적으로 널리 알려진 놀이 중 하나이다. 가로, 세로 5개씩 25개의 칸으로 구성된 표 안에 숫자나 단어 등을 적어 놓고, 서로 적혀진 값을 불러가면서 가로, 세로, 대각의 직선을 누가 먼저 만드는지 겨루는 놀이이다. 나라나 지역마다 표의 가로와 세로를 구성하는 줄의 수나 규칙 등이 서로 다른 여러 가지 유형이 존재한다. 빙고 게임은 어린이들의 놀이뿐만 아니라 복권이나 사은품 추첨을 위한 용도로도 널리 사용되고 있다.

빙고 게임과 관련된 최근 연구는 추첨을 위한 기존 오프라인 방식의 빙고 게임을 온라인화하기 위한 연구와 빙고 게임을 활용한 연구로 크게 분류할 수 있다. 복권이나 사은품 추첨을 위해 실시되고 있는 오프라인 방식의 빙고 게임을 온라인 방식으로 전환하기 위해서는 많은 사용자의 동시 접속을 효과적으로 처리해야만 한다. 따라서 데이터의 암호화 및 데이터의 전송 실패에 대한 처리 방법 등이 연구되고 있다[8][11]. 또한, 빙고 게임은 규칙이 비교적 간단하고 친숙한 놀이이기 때문에, 이를 활용한 교육용 프로그램을 개발하기 위한 연구가 활발히 진행되고 있다[7][12][13].

소켓 통신을 이용한 온라인 빙고 게임은 기본적으로 사용자의 능동적인 행동에 맞추어 실시간으로 전송 데이터를 구성하고 전송한다[7][8]. 예를 들어, 사용자가 채팅 메시지를 입력하는 경우나 자신의 차례에 숫자를 선택하는 경우에는 현재 어떤 상황인지를 알리는 플래그(Flag) 신호와 그 상황에 맞는 부가 정보를 합해 전송 데이터를 구성하고 전송한다.

한편, 온라인 빙고 게임의 승패 판별은 데이터의 다소 복잡한 송수신 절차가 요구된다. 예를 들어, 자신의 차례에 숫자를 선택하여 빙고가 달성되었다고 하더라도 그 즉시 자신의 승리로 끝나지 않는다. 자신이 선택한 숫자에 의해 상대방도 빙고를 달성할 수 있기 때문이다. 따라서 올바른 승패 판별을 위해서는 자신의 숫자 선택에 의해 상대방이 승리할 수도 있다는 점을 고려하여 데이터의 송수신 절차를 계획해야 한다. 그러나 선행 연구에서는 이러한 특성이 고려되지 못했고, 따라서 자신의 숫자 선택에 의해 발생하는 무승부를 정확히 판별해내지 못했다[7][8]. 무승부의 판별은 두 명의 사용자가 겨루는 게임에서 특히 중요하다.

본 논문에서는 두 명의 사용자가 겨루는 상황에서 온라인 빙고 게임의 승패를 정확히 판별할 수 있는 새로운 승패 판별 알고리즘을 제안한다. 이를 위해 사용자의 숫자 선택으로부터 유발될 수 있는 여러 가지 상황들을 종합적으로 분석하였다. 평가 결과, 제안 방법을 이용하면 총 5개의 플래그 신호를 사용하여 빙고 게임의 승패를 정확히 판별할 수 있음을 확인하였다.


Ⅱ. 소켓 통신 기반의 빙고 게임을 위한 승패 판별 알고리즘

본 논문에서는 소켓 통신 기반의 빙고 게임에 적합한 승패 판별 알고리즘을 제안한다. 이를 위해 승패 판별과 관련이 있다고 생각되는 여러 상황을 분석하고, 상황별 전송 데이터의 구성 방법 및 송수신 절차를 계획하였다.

TCP(Transmission Control Protocol) 프로토콜을 이용한 간략화된 소켓 통신의 흐름도를 그림 1에 나타낸다[2][3]. 소켓 통신을 하기 위해서는 우선 서버(Server)와 클라이언트(Client) 장치에서 모두 소켓을 생성(Create)해야 한다. 이때, 서버의 소켓을 생성할 때는 반드시 포트 번호가 필요하다. 소켓이 생성되면 서버는 클라이언트의 연결 요청을 받을 준비를 한다(Listen). 서버가 연결 대기를 시작하면, 클라이언트에서는 서버의 IP 주소와 포트 번호를 이용해 서버에 접속을 시도한다(Connect).


Fig. 1. 
Socket communication flow

클라이언트가 접속을 시도하면 연결 대기 중이던 서버는 클라이언트의 접속을 받아들인다(Accept). 이때, 서버는 앞으로 클라이언트와 데이터를 주고받을 새로운 소켓인 Servant가 필요하다. 접속이 성공하면 Client와 Servant 소켓은 이제 서로 데이터를 보내거나(Send), 받을 수 있게 된다(Receive).

본 연구에서 빙고 게임의 승패 판별과 관련이 있다고 판단한 상황은 총 4가지이다. 이 상황들은 모두 한 사용자가 자신의 차례에 숫자를 선택함으로써 시작되는 것이 공통점이다. 본 논문에서 제안하는 상황별 승패 판별 알고리즘을 그림 2그림 3에 나타낸다. 그림에서 User1과 User2는 그림 1에서 설명한 접속이 성공한 상태의 Servant와 Client 소켓을 나타낸다. 그림 2는 사용자가 숫자를 선택하고 빙고를 달성했을 때에 필요한 승패 판별 알고리즘을 나타내고, 그림 3은 사용자가 숫자를 선택하고 빙고를 달성하지 못한 채 상대방에게 차례를 넘겼을 때에 필요한 승패 판별 알고리즘을 나타낸다.


Fig. 2. 
Win-loss determination algorithm when one user selects a number and achieves bingo


Fig. 3. 
Win-loss determination algorithm when one user selects a number and does not achieve bingo

그림 2의 (a)(b)의 시작 시점에서 한 사용자는 숫자를 선택하고 빙고를 달성하였다(Bingo!). 그러나 자신이 선택한 숫자를 이용해 상대방도 동시에 빙고를 달성할 수도 있기 때문에, 그 즉시 자신의 승리로 끝나지 않는다. 따라서 올바른 승패 판별을 위해 상황별 전송 데이터의 구성과 송수신 절차를 계획해야 한다. 그림 2의 (a)는 한 사용자가 숫자를 선택하고 빙고를 달성했을 때, 상대방은 빙고를 달성하지 못한 경우의 주요 데이터와 송수신 절차를 나타내고 있고, (b)는 상대방도 빙고를 달성한 경우의 주요 데이터와 송수신 절차를 나타내고 있다.

그림 2의 (a)(b)의 시작 시점에서 한 사용자는 자신의 차례에 숫자를 선택하고 빙고를 달성하였다(Bingo!). 이 경우, 자신이 빙고를 달성했음을 알리기 위한 플래그 신호 FINAL과 이번 차례에 선택한 숫자 정보를 전송 데이터로써 상대방에게 송신하고, 상대방의 응답을 기다린다. FINAL 신호를 수신한 상대방은 함께 수신한 숫자 정보를 이용해 상대방 자신의 빙고 달성 여부를 우선 확인한다. 그림 (a)와 같이 상대방 자신은 빙고를 달성하지 못한 경우라면 패배를 알리기 위한 플래그 신호 YIELD를 전송 데이터로써 송신하고 상대방은 패배로 판정한다(Loss). 최종적으로 상대방으로부터 YIELD 신호를 수신한 사용자는 승리로 판정한다(Victory). 한편, 그림 (b)와 같이 상대방 자신도 빙고를 달성한 경우라면 무승부를 알리기 위한 플래그 신호 TIE를 전송 데이터로써 송신하고 상대방은 무승부로 판정한다(Draw). 최종적으로 상대방으로부터 TIE 신호를 수신한 사용자는 무승부로 판정한다(Draw).

한편, 그림 3의 (a)(b)의 시작 시점에서 한 사용자는 숫자를 선택하고 빙고를 달성하지 못하였다(Selected). 이때에도 사용자가 선택한 숫자를 이용해 상대방이 먼저 빙고를 달성할 수도 있다. 따라서 이 경우에 대해서도 올바른 승패 판별을 위해 상황별 전송 데이터의 구성과 송수신 절차를 계획해야 한다. 그림 3의 (a)는 사용자가 숫자를 선택하고 빙고를 달성하지 못했을 때, 상대방도 빙고를 달성하지 못한 경우의 주요 데이터와 송수신 절차를 나타내고 있고, (b)는 상대방은 빙고를 달성한 경우의 주요 데이터와 송수신 절차를 나타내고 있다.

그림 3의 (a)(b)의 시작 시점에서 한 사용자는 자신의 차례에 숫자를 선택하고 빙고를 달성하지 못하였다(Selected). 이 경우, 자신이 숫자를 선택했고 상대방에게 차례를 넘긴다는 것을 알리기 위한 플래그 신호 CALL과 이번 차례에 선택한 숫자 정보를 전송 데이터로써 상대방에게 송신하고, 차례를 상대방에게 넘긴 후 상대방의 응답을 기다린다. CALL 신호를 수신한 상대방은 함께 수신한 숫자 정보를 이용해 상대방 자신의 빙고 달성 여부를 우선 확인한다. 그림 (a)는 상대방 자신도 빙고를 달성하지 못한 경우로서, 이 경우에는 최종 승패를 판정할 필요가 없기 때문에 승패 판정을 위한 응답 메시지를 보내지 않고 상대방 자신의 새로운 차례를 시작한다(My turn). 한편, 그림 (b)와 같이 상대방 자신은 빙고를 달성한 경우라면 승리를 알리기 위한 플래그 신호 BINGO를 전송 데이터로써 송신하고 상대방은 승리로 판정한다(Victory). 최종적으로 상대방으로부터 BINGO 신호를 수신한 사용자는 패배로 판정한다(Loss).

앞서 설명한 것과 같이 제안 알고리즘의 전송 데이터의 구성은 상황에 따라 플래그 신호만으로 이루어지거나, 플래그 신호와 사용자가 선택한 숫자 정보로 이루어진다. 제안 알고리즘의 플래그 신호는 총 5가지로서, BINGO, CALL, FINAL, TIE, YIELD가 있다(그림 2, 그림 3 참조). 이 중, CALL과 FINAL은 플래그 신호뿐만 아니라 사용자가 선택한 숫자 정보도 포함해서 전송 데이터를 구성해야 하고, 나머지 3가지 플래그 신호는 단독으로 전송 데이터를 구성한다.


Ⅲ. 시스템 구현 및 동작 수행 평가
3.1 시스템 구현

본 연구에서는 TCP 소켓 통신 기반의 빙고 게임을 구현하고 제안 알고리즘을 탑재시켰다. 윈도우 PC 환경에서 마이크로소프트 비주얼 스튜디오 2019를 통합 개발 환경으로 이용하였고, C++ 언어를 이용해 빙고 게임 시스템을 구현하였다. TCP 소켓 통신의 구현에는 윈도우 환경에서의 TCP 소켓 통신을 지원하는 CSocket 클래스를 이용하였다[2][3]. 두 명의 사용자가 원격으로 빙고 게임을 진행할 수 있도록 서버와 클라이언트 시스템을 각각 개발하였다. 그림 1에서 설명한 것과 같이 서버 시스템은 소켓을 초기화하고 클라이언트 시스템의 접속을 기다리며, 클라이언트 시스템이 접속했을 때 빙고 게임을 시작하도록 하였다.

본 연구에서 구현한 빙고 게임 시스템의 GUI(Graphical User Interface) 구성을 그림 4에 나타낸다. 기본적인 GUI 구성은 선행 연구의 구성과 유사하다[8]. 그림 4에서 위쪽이 서버 시스템을, 아래쪽이 클라이언트 시스템을 각각 나타낸다. 각 시스템의 왼편에 빙고 게임 진행 시 사용자가 선택하는 숫자 패널이 배치되어 있고, 오른쪽에 게임 진행 상태를 알리는 부분과 채팅 대화상자, 버튼 등을 배치하였다.


Fig. 4. 
Layout of the GUI

3.2 동작 수행 평가 및 고찰

선행 연구에서는 소켓 통신 기반 빙고 게임의 승패를 판별하기 위해 먼저 빙고를 달성한 쪽에서 승리를 선언하는 방식을 이용하였다[7][8]. 이러한 방식에서는 두 사용자가 동시에 빙고를 달성했을 때 무승부로 판정하는 것이 불가능하다. 대신 자신의 차례에 빙고를 달성한 쪽에서 먼저 승리를 선언하고 차례를 넘기면, 상대방도 빙고인지 확인하고 빙고를 달성하였다면 뒤이어 승리를 선언하여 결국 모두 승리를 주장하거나[8], 자신의 차례에 빙고를 달성한 쪽에 승리의 우선권을 부여하였다[7].

반면 본 논문에서 제안하는 승패 판별 알고리즘은 두 명의 사용자가 겨루는 상황에서 동시에 빙고가 달성되었을 때에도 무승부를 정확하게 판정할 수 있다. 제안 방법에서는 한 사용자의 숫자 선택으로 상대방이 승리할 수도 있다는 점을 고려하여, 상황별 전송 데이터의 구성 방법 및 송수신 절차를 계획하였기 때문이다. 제안 알고리즘에 의해 얻어진 승패 판별 결과를 그림 5, 6, 7에 나타낸다.

그림 5는 위쪽의 서버 측에서 숫자를 선택하고 서버 측에서는 빙고를 달성하지 못했지만, 서버 측이 선택한 숫자에 의해 아래쪽의 클라이언트 측에서 빙고를 달성하여 최종적으로 클라이언트 측의 승리로 끝난 상황을 나타내고 있다. 빙고가 된 라인의 수를 쉽게 확인할 수 있도록 검은색 타원을 빙고가 된 라인 위에 표기하였다. 그림 5그림 3의 (b)에 해당하는 전송 데이터의 송수신이 이루어진 결과이다.


Fig. 5. 
Win-loss determination when the client wins

한편, 그림 6은 위쪽의 서버 측에서 숫자를 선택하고 서버 측에서는 빙고를 달성하였지만, 서버 측이 선택한 숫자에 의해 아래쪽의 클라이언트 측에서는 빙고를 달성하지 못하여 최종적으로 서버 측의 승리로 끝난 상황을 나타내고 있다. 그림 6그림 2의 (a)에 해당하는 전송 데이터의 송수신이 이루어진 결과이다.


Fig. 6. 
Win-loss determination when the server wins

그림 7은 아래쪽의 클라이언트 측에서 숫자를 선택하여 클라이언트 측에서 빙고를 달성하였고, 또한, 클라이언트 측이 선택한 숫자에 의해 서버 측도 빙고를 달성하여 최종적으로 무승부로 판정된 상황을 나타내고 있다. 그림 7그림 2의 (b)에 해당하는 전송 데이터의 송수신이 이루어진 결과이다.


Fig. 7. 
Win-loss determination in case of a draw

이상의 결과로부터 최종 승패 판별과 관련이 있는 그림 2의 (a)(b), 그림 3의 (b)의 상황에 대응하여 제안 알고리즘이 올바르게 동작하고 있음을 알 수 있다.

그림 5그림 6의 결과는 한쪽이 승리한 상황이기 때문에, 이 상황에 대해서는 선행 연구의 승패 판별 알고리즘에 의해서도 동일한 결과를 얻을 수 있을 것이다. 그러나 선행 연구의 방법은 무승부를 판정하지 못하는 반면, 제안 알고리즘은 그림 7의 결과와 같이 무승부도 정확히 판별해 낼 수 있다는 것이 선행 연구와의 큰 차이점이다.

제안 알고리즘은 두 명의 사용자가 겨루는 상황에서 적은 수의 플래그 신호를 이용해 무승부까지도 판정할 수 있도록 승패 판정을 최적화시켰다. 그러나 3인 이상의 사용자가 겨루는 빙고 게임에는 제안 알고리즘을 적용할 수 없다. 두 명이 겨루는 빙고 게임은 승패 판정으로 게임이 종료되지만, 3인 이상이 겨루는 빙고 게임은 일부 또는 전체의 빙고 달성 순위를 겨루는 것이 일반적이기 때문이다. 따라서 3인 이상이 겨루는 빙고 게임의 승패 판별을 위해서는 빙고를 달성했는지와 함께 달성 순위를 관리하는 등의 처리 방법의 검토가 필요하다.


Ⅳ. 결 론

빙고 게임의 승패 판별에는 자신이 선택한 숫자에 의해 상대방도 빙고를 달성할 수 있음을 고려해야만 한다. 그러나 선행 연구에서는 이러한 특성이 고려되지 못했고 두 명의 사용자가 겨루는 상황에서 무승부를 정확히 판별해내지 못했다. 본 연구에서는 승패 판별과 관련이 있다고 생각되는 여러 상황을 분석함으로써, 상황별 전송 데이터의 구성 방법 및 송수신 절차를 포함한 새로운 승패 판별 알고리즘을 검토하였다.

본 논문에서 제안한 승패 판별 알고리즘은 총 5개의 적은 수의 플래그 신호를 이용하여 상황에 맞는 전송 데이터를 구성하고, 간단한 절차에 맞추어 데이터를 송수신한다. 이를 통해 두 명의 사용자가 겨루는 상황에서 사용자의 승패뿐만 아니라 선행 연구에서는 판별할 수 없었던 무승부까지도 정확히 판별할 수 있다. 제안 알고리즘은 턴제 빙고 게임뿐만 아니라 비슷한 부류의 게임이나 통신 시스템 등에 응용될 수 있다. 현재 구현된 전체 시스템은 네트워크 문제로 인한 접속 해제 등을 고려하지 않은 채 게임 진행 및 승패 판별 알고리즘이 고안되었다. 따라서 일시적인 네트워크 장애로 인해 접속이 해제될 경우, 이전 진행 상태를 복구하지 못하고 처음부터 다시 시작해야만 한다. 따라서 향후 연구에서는 네트워크 장애에 대한 대처 방법을 검토할 필요가 있다.


References
1. D. Kang and H. Park, "A design and implementation of transmit/receive model to speed up the transmission of large string-data sets in TCP/IP socket communication", KIICE, Vol. 17, No. 4, pp. 885-892, Apr. 2013.
2. K. Kang, "MFC Window Programming", Hanbit Academy, Jun. 2017.
3. CSocket Class, https://docs.microsoft.com/en-us/cpp/mfc/reference/csocket-class/ [Accessed: Jun. 21, 2021]
4. S. Jung, H. Kim, and S. Lee, "App for communication among family members using Smartphone location services", Proceedings of KSCIC, Vol. 21, No. 2, pp. 241-244, Jul. 2013.
5. K. Yoon and W. Jeong, "Development of chatting program using social issue keyword information", Proceedings of KSCIC, Vol. 28, No. 2, pp. 307-310, Jul. 2020.
6. S. Kim, "Educational Game for Arithmetic Operations Using Web Socket", Proceedings of KCS, pp. 453-454, Nov. 2014.
7. S. Kim, "Design and Implementation of Socket-based Multi-player Game Service for Elementary Mathematics Learning", Journal of SRS, Vol. 6, No. 2, pp. 175-184, Apr. 2016.
8. Y. Hwang, "Visual C++/MFC", Comspace, Aug. 2019.
9. H. Kang, S. Kim, H. Yoon, H. Oh, Y. Moon, and S. Park, "A Desktop Video Conferencing System for Collaborative Learning", Proceedings of KIISE, Vol. 23, No. 2A, pp. 667-670, Oct. 1996.
10. G. Park, H. Cho, S. Kang, and K. Chung, "Design and Implementation of Computer - based Military Conferencing System", Proceedings of KIISE, Vol. 22, No. 2A, pp. 661-664, Oct. 1995.
11. S. J. Aboud and M. A. AL-Fayoumi, "An Efficient Internet Bingo Scheme", IJARCSSE, Vol. 4, No. 1, pp. 456-460, Jan. 2014.
12. V. Singh, B. K. Behera, and P. K. Panigrahi, "Design of Quantum Circuits to Play Bingo Game in a Quantum Computer", Feb. 2019.
13. N. N. L. N. Ibrahim, A. Asmawi, S. A. Kadir, and R. M. Teo, "Putra BINGO : From Pen and Paper to Digital", 2019 IEEE Conference on Graphics and Media (GAME), Pulau Pinang, Malaysia, pp. 22-25, Nov. 2019.

저자소개
한 철 수 (Cheolsu Han)

2006년 2월 : 청주대학교 전자공학과(공학사)

2008년 2월 : 청주대학교 대학원 전자공학과(공학석사)

2013년 9월 : 일본 도호쿠대학 대학원 정보과학연구과(공학박사)

2013년 9월 ~ 2015년 8월 : 청주대학교, 한국교통대학교 시간강사

2015년 9월 ~ 현재 : 청주대학교 융합전자공학부 전자공학전공 교육전담 조교수

관심분야 : 신호처리, 알고리즘, 프로그래밍