ACORN0415 / NumberGame

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Number Counting Game

숭실대학교 고급프로그래밍 팀프로젝트(4인)

개발 목표

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

사용 기술

*TCP/IP통신을 이용하여 패킷으로 데이터 송수신 *구조체를 이용하여 데이터 형식 구성

한계점

  1. 다른 사람과의 게임일 때 데이터 형식을 정해 주지 않아서 데이터의 형식을 정하는 데 애를 먹었다. class에서 struct로 변경한 이유
  2. 게임을 무조건 이기는 코드를 짜야하는데 조건이 명확하게 나와있지 않았다.

About


Languages

Language:C++ 100.0%