- 임의의 주어진 수를 먼저 제출하는 회로가 승리
- 게임은 후수가 임의로 7개 이내의 목표값(31이상 100미만)을 전달하면 선수가 그중 임의의 개수를 선택하여 후수에게 전달하면서 시작한다. 목표값은 한 번의 통신(패킷)으로 전달하며 통신의 시작은 101, 끝은 –1로 알리고 101과 –1사이에 데이터가 포함된다. 수신측은 101과 –1사이의 데이터를 스스 로 파악한다.
- 게임 시작후 선수는 1-5 사이의 값을 정하여 전달. 데이터 전달의 시작은 102, 끝은 –1로 한다.
- 후수는 선수의 값에 1-5 사이의 값을 더하여 전달. 이후 더한 값에 1, 0, -1을 더한 값 중에 하나를 결정하여 전달. 예를 들어 후수가 3을 받고 7을 전달하면 +4가 되었으므로 선수는 7에 3,4,5중 하나를 더하여 전달할 수 있다. 단 더하려는 값이 5보다 크면 5를 1보다 작으면 1을 더하여 전달한다. 규칙에 따라 전달하려는 값이 99를 초과하는 경우에는 99를 전달한다.
- 이 과정을 반복하여 목표값을 넘어가는 값(목표값 포함)을 먼저 전달하면 1점 획득. 전달하는 값이 2 개 이상의 목표값을 포함하면 그 개수만큼 점수 획득.
- 마지막 목표값을 초과하면 게임이 종료되고 더 많은 점수를 획득한 player가 승리. 게임 종료시 이 긴 player는 103, -1을 전송하고 진 player는 104, -1을 전송하여 종료를 확인한다.
- 지고 있는 경우 단 한번, 상대방 값을 무시하고 1-5 사이의 값을 임의로 더하여 전달할 수 있다.
- 경기 진행 과정에서 본인과 상대방이 전달하는 값과 유효성 여부를 player를 구분하여 화면에 계속 출력한다. 이때 상대방이 룰을 지키지 않으면 실격하고 상대방의 룰 준수 여부를 확인하여 이를 출력한 다. 상대방의 부정행위를 확인하지 못하면 게임은 그대로 진행한다. 두 player의 출력 점수가 다른 경우 심판이 확인하며 점수 계산이 틀린 player는 실격. 두 player 모두 틀리면 둘 다 실격.
- 경기 진행은 2번 진행하며 2번째는 선후를 바꾸어 시작한다. 1:1이 되었을 경우 총점으로 승부를 결 정한다. 총점도 동일한 경우 무승부가 되며 재경기를 진행한다. 무승부일 경우 105, -1을 전송한다.
- 값의 전달은 0.5 – 1초 사이에 이루어져야 한다.
- TCP/IP Socket을 통해 서로 통신한다. 이 때 서버와 클라이언트를 모두 구성하며 프로그램 시작후 설정할 수 있도록 한다.
- 통신을 소켓을 통해 전달하는 값은 정수값을 자리수 별로 ASCII code로 변환하여 전송한다. 즉 101 24 –1인 경우 ‘1’,‘0’,‘1’,‘2’,‘4’,‘-’,‘1’의 character로 전송하며 수신단에서는 첫 3개의 문자를 정수 로 변환하여 header를 구성하고 이후 2개의 문자로 2자리 정수를 구성하며 읽은 정수 값이 –1이면 전 송의 종료로 인식한다. cf) 이미 프로젝트 코드를 완성한 경우 현재의 출력 포맷을 위와 같이 변환하는 함수를 추가하면 기존 의 코드를 변경하지 않아도 됨.
*TCP/IP통신을 이용하여 패킷으로 데이터 송수신 *구조체를 이용하여 데이터 형식 구성
- 다른 사람과의 게임일 때 데이터 형식을 정해 주지 않아서 데이터의 형식을 정하는 데 애를 먹었다. class에서 struct로 변경한 이유
- 게임을 무조건 이기는 코드를 짜야하는데 조건이 명확하게 나와있지 않았다.