본문 바로가기
Projects/Tetris

[Tetris] 기획서

by Kloong 2022. 4. 15.

개요

1:1 대전이 가능한 온라인 테트리스 게임. 일반적인 테트리스 게임처럼 떨어지는 테트로미노를 이동 및 회전 시켜서 적절한 곳에 내려놓는 방식으로 진행된다. 놓인 테트로미노들이 완벽한 (비어있는 칸이 없는) 한 줄을 이루면 해당 줄이 소거되며 점수를 얻는다. 만약 플레이어가 한 번에 여러 줄을 소거하거나, 연속되게 줄을 소거하면 점수를 추가로 얻을 수 있다. 쌓인 테트로미노들에 의해 새로운 테트리미노를 놓을 수 없게 되면 게임 오버가 된다. 상대 플레이어가 게임오버 될 때까지 버티면 승리한다.

요구사항

1. 테트리스 게임 핵심 기능

테트리스 게임 기본 규칙

  1. 10 * 20 칸의 테트리스 보드가 있어야 한다.
  2. 테트리스에서 사용하는 7가지 테트로미노가 한 번에 하나씩, 랜덤하게 테트리스 보드 최상단 가운데에서 나타나야 한다.
  3. 다음에 나타날 테트로미노가 선택되는 규칙은 다음과 같다. 7 종류의 테트로미노가 한 세트일 때, 한 세트의 테트로미노의 순서를 랜덤으로 섞어서, 섞여진 순서대로 테트로미노가 나타난다. 한 세트의 테트로미노가 다 나왔으면, 같은 방식으로 순서가 섞인 테트로미노 세트를 내보낸다.
  4. 나타난 테트로미노는 사용자의 조작이 없이도 일정 속도로 보드 아래쪽으로 내려온다.
  5. 놓여진 테트로미노가 한 줄을 다 채우면 해당 줄은 사라지고, 플레이어는 점수를 얻는다.
  6. 게임이 진행될 수록, 테트로미노가 하강하는 속도가 점점 빨라진다.
  7. 테트로미노가 나타나는 공간에 이미 테트로미노가 존재할 경우 게임 오버가 된다.
  8. 두 플레이어 모두 게임 오버가 되었을 때, 최종 점수가 더 높은 플레이어가 승리한다.

플레이어 조작 방식

플레이어는 한 번에 하나의 테트로미노를 조작할 수 있다. 플레이어는 다음과 같은 방식으로 테트로미노를 조작할 수 있다.

  1. 좌우 방향키를 이용해서 하강하는 테트로미노를 좌우로 움직인다.
  2. 아래 방향키를 이용해서 테트로미노의 하강 속도를 빠르게 한다.
  3. 스페이스바를 이용해서 테트로미노를 보드 최하단이나, 놓여져 있는 다른 테트로미노와 접촉하는 부분으로 한 번에 하강시킨다.
  4. 위 방향키를 이용해서 테트로미노를 시계 방향으로 회전시킨다. 혹은 Z 키로 반시계 방향, x 키로 시계 방향 회전시킨다.
  5. 자세한 회전 규칙은 다음 링크의 내용을 따른다. (https://harddrop.com/wiki/SRS)

테트리스 점수 획득 규칙

놓여진 테트로미노가 한 줄을 다 채우면 해당 줄은 사라지고, 플레이어는 점수를 얻는다.

  1. 플레이어가 최소로 얻을 수 있는 점수 단위는 100점이다.
  2. 플레이어가 한 줄만 소거했을 경우 100점을 얻는다.
  3. 플레이어가 한 번에 두 줄, 세 줄, 네 줄을 소거했을 경우 각각 300, 600, 1000점을 얻는다.
  4. 플레이어가 연속으로 소거를 했을 경우, 콤보 시스템에 의해 점수를 추가로 더 얻을 수 있다.

콤보 시스템

  1. 플레이어가 연속으로 소거를 했을 경우, 콤보가 1씩 증가한다. 두 번 연속 소거할 경우 1 콤보이다.
  2. 콤보 시스템에 의해 점수를 추가로 더 얻을 수 있다.
  3. 각 라인 클리어당 콤보에 의한 추가 점수는 (현재 콤보 * 100) 점이다.

게임 화면

플레이어에게 보여지는 화면은 다음과 같다.

  1. 자신의 테트리스 보드
  2. 현재 점수
  3. 다음에 올 테트로미노
  4. 현재 콤보
  5. 상대방의 테트리스 보드 (상대방이 현재 조작중인 테트로미노는 보이지 않는다)
  6. 상대방의 점수
  7. 상대방의 현재 콤보

2. 온라인 관련 기능

  1. AWS를 통해 간단한 서버를 구축한다.
  2. 서버에 두 플레이어가 접속하고, 준비를 마치면 게임이 시작된다.
  3. 서버는 두 플레이어의 테트리스 보드, 점수, 콤보를 전달받는다.
  4. 플레이어는 특정 이벤트 (테트로미노를 내려놓았을 경우 등)가 발동할 때마다 서버에 위 정보를 전달한다.
  5. 서버는 해당 정보를 상대 플레이어에게 다시 전달하고, 플레이어는 그 정보를 바탕으로 화면을 갱신한다.

댓글