Giter VIP home page Giter VIP logo

tetris's Introduction

tetris

텍스트 기반 테트리스 게임

조작 키

  • esc: 게임 종료
  • p: 게임 중단/재개
  • ←: 왼쪽 이동
  • ↓: 아래 이동
  • →: 오른쪽 이동
  • ↑: 블럭 90도 회전

tetris's People

Contributors

wlsh44 avatar wise1ight avatar kimda99 avatar istest001 avatar seong0929 avatar

Stargazers

JM Lim avatar

Watchers

 avatar

Forkers

seong0929

tetris's Issues

[Refactor] 프로젝트 패키지 구조

프로젝트 패키지를 좀 더 세련되고 관리하기 용이한 구조로 리팩토링.
시간이 소요되긴 하지만 오히려 이후 공수를 줄이기 위해서 필요함.

[UI] 시작 메뉴

• 게임을 실행하면 처음으로 나오는 메뉴를 구현함.

• 메뉴 화면의 상단에는 게임의 이름이 표시되어야 함.

• 그 아래로 게임을 시작할 수 있는 메뉴와 설정 메뉴, 스코어보드, 게임 종료 메뉴(프로그램 종료)를 표시.

• 각 메뉴를 선택하면 해당하는 기능을 수행.

• 키보드를 이용하여 메뉴 사이를 이동할 수 있어야 함.

• 엔터(리턴) 키를 눌러 메뉴를 선택.

• 다른 키를 사용하는 경우는 화면에 사용가능한 키를 표시.

• 메뉴가 차후 추가될 수 있도록 설계되어야 함.

[Logic] 일반 대전 모드

상대방에게 넘어간 블럭은 상대방 보드의 아래쪽으로 넘어간 형태 그대로 추가됩니다.

  • 직접 쌓은 블럭과 구분하기 위해 추가된 블럭은 회색으로 처리합니다.

  • 색상은 자유롭게 결정해도 무방합니다.

  • 기본 게임과 마찬가지로 플레이어 중 어느 한 쪽이 더 이상 블럭을 쌓을 수 없게 되면 게임이 종료됩니다.

  • 대전 모드에서는 한 플레이어가 더 이상 블럭을 쌓지 못하는 상태가 되면, 다른 플레이어가 승자가 됩니다.

  • 상대 플레이어에게 넘길 수 있는 최대 줄 수는 10줄입니다.

  • 여러 번의 공격으로 추가되는 줄은 현재 넘어간 줄의 아래쪽으로 추가됩니다.

  • 추가될 줄이 표시되는 부분에 이미 10줄이 차 있는 경우, 줄을 삭제해도 상대방에게 넘어가지 않고 무시됩니다.

  • 현재 10줄이 다 차있지 않더라도 넘어온 줄의 수를 더하여 10줄이 넘게 된다면, 제일 아래쪽 부분을 잘라내고 추가합니다

[UI] 아이템 블럭

  • 10개의 줄이 삭제되면, 다음에 생성될 블럭을 보여주는 부분에 새롭게 나타나는 블럭은 반드시 아이템이 거나 아이템을 포함해야 합니다.

  • 아이템은 구분이 쉽도록 특징적인 모양을 하거나 기본 블럭과 다른 문자를 사용해 표현합니다.

  • 각각의 아이템은 반드시 다른 문자를 사용해야 합니다.

[UI] 대전 모드 대응 GUI 구현

대전 모드 대응을 위해 다음과 같은 GUI가 구현되어야 함.

  • 대전 모드 선택 메뉴
  • 대전 모드 게임 화면

개발 하면서 필요한 부분 추가될 수 있음.

[UI] 스코어 보드

게임의 역대 점수 순위를 보여주는 스코어 보드를 구현.

• 각 순위별로 이름 및 점수 등의 정보를 점수가 높은 순으로 정렬하여 보여줌.

• 전체 기록된 순위는 적어도 상위 10개 이상을 포함.

• 설정에서 초기화하기 전에는 프로그램을 종료하더라도 스코어 보드 기록이 유지되어야 함.

• 그 외의 사항은 자유롭게 설계 및 구현.

+게임 종료시의 스코어 보드에는 현재점수 강조 혹은 애니메이션

[Logic] 블럭

• 참조 코드에 제시된 7가지 모양의 블럭을 구현.

https://github.com/Jindae/SeoulTech-SE-Tetris-Ref

• 다음에 나타날 블럭은 동일한 확률로 무작위로 결정됨.

• 각각의 블럭은 모두 다른 색상을 가져야 함.

유사한 모양이나 좌우가 바뀐 블럭들은 구분이 용이하도록 대비되는 색상이나 무늬를 지녀야 함

[UI] 화면 전환 매커니즘 변경

Swing에서 현재 사용하고 있는 CardSwitcher방식은 갈아끼울 수 있는 Pane들을 게임 실행시 모두 인스턴스화 하여 갈아끼우는 방식인데, 이로 인한 생명주기 관리 어려움과 키 포커스 문제로 추정되는 사이드 이펙트를 겪고 있으므로 대체 방법을 개발.

[Logic] 점수 계산

  • 기본적으로 블럭이 1칸 떨어질 때마다 한 단위의 점수(100점)를 획득.

  • 자동/수동 조작에 무관하게 획득함.

  • 블럭이 떨어지는 속도가 초기 속도보다 빨라진 경우 추가적인 점수를 획득.

  • 라인을 지울 때마다 추가 점수 (500, 1500, 3000, 5000, 10000)

[Fix] 버그 수정

  • 라인 삭제시 위 블럭 내려 앉아야 함
  • 블럭 바닥에 닿았을 때 움직이면 공중에 떠있는 버그

[Deploy] Win32 패키징

Win32의 경우 Launch4j를 이용하여 jar파일을 exe 형태로 패키징 및 배포
Mac의 경우 pkgbuild를 이용하여 app 형태로 패키징 및 배포

[UI] 애니메이션

  • 인게임에서 삭제되는 줄을 잘 구분할 수 있도록 삭제되는 애니메이션 추가
    e.g) 삭제되는 줄이 하얀색으로 한 번 반짝이고 삭제 등

[Logic] 아이템

  • 아이템 모드에서는 10개의 줄을 삭제할 때마다 아이템이 등장합니다.
  • 무게 추 블럭
  • 라인 삭제 블럭
  • 3x3 삭제 블럭
  • 전체 삭제 블럭
  • 특정 색깔에 따른 점수 주는 블럭

[Logic] 게임 보드 및 조작

• 텍스트 기반 보드 만들어야 함. (가로 10, 세로 20)

• 보드에 현재 블럭이 생성되면, 이 블럭은 아무 조작이 없어도 1초에 1칸씩 밑으로 떨어져야 함.

• 일정 수 이상의 블럭이 생성되거나, 줄이 삭제되면 떨어지는 속도가 증가해야 함.

• 현재 블럭을 키보드 입력에 따라 다음과 같이 조작 가능해야 함.

• 좌, 우, 아래로 한 칸씩 이동시킬 수 있어야 함. (←, ↓, →)

• 시계방향으로 90도씩 회전시킬 수 있어야 함.

• 한 번에 끝까지 밑으로 떨어뜨릴 수 있어야 함. (Space)

• 반복된 키 입력이 무시되지 않고 블럭이 즉시, 정확하게 반응해야 함.

• 게임 도중 게임을 잠시 중단/재개할 수 있는 키가 존재해야 함. (P, ESC)

• 게임 진행/중지 상태에서 게임을 종료할 수 있는 방법이 존재해야 함 (alt-f4 등 OS를 이용한 방법 제외)

[UI] 테트리스 화면 구성

• 기본적인 화면 구성은 다음을 포함.

• 블럭이 쌓이는 보드(board), 다음 블럭을 확인할 수 있는 부분, 점수를 확인할 수 있는 부분.

• 보드는 블럭의 한 칸을 기준으로 하였을 때 20개의 줄과 10개의 칸을 가져야 함.

• 다음 블럭 부분은 각 블럭이 보드에 생성될 때마다 다음에 생성될 블럭들을 표시.

• 점수 부분은 실시간으로 바뀌는 점수를 표시

[Logic] 아이템 대전 모드

-아이템모드 : 일반모드와 동일하되 아이템이 등장
-시간제한모드 : 일반모드와 동일하되 시간 제한이 있음

[UI] 설정 화면

• 설정 화면에서는 다음과 같은 기능을 제공해야 함.

• 테트리스 게임 화면의 크기를 조절 - 최소 3가지 이상 미리 정의된 크기.

• 게임 조작을 위해 사용될 키를 설정.

• 스코어 보드의 기록을 초기화.

• 색맹 모드 켜고 끄기.

• 모든 설정으로 기본 설정으로 되돌리기.

• 바뀐 설정은 저장되었다가 다음 게임 실행시 동일한 설정을 불러와 사용할 수 있어야 함.

• 그 밖의 필요한 설정을 추가하는 것도 가능.

Java의 Preferences API를 활용하여 개발할 예정임.

[Logic] 게임 로직 추가 구현

  • 일정 수 이상의 블럭이 생성되거나, 줄이 삭제되면 떨어지는 속도가 증가해야 함.

  • 게임 도중 게임을 잠시 중단/재개할 수 있는 키가 존재해야 함. (P, ESC)

  • 게임 진행/중지 상태에서 게임을 종료할 수 있는 방법이 존재해야 함 (alt-f4 등 OS를 이용한 방법 제외)

[Logic] 난이도 설정

  • 기존의 일반 게임 모드에 난이도 설정을 추가
  • 설정에서 easy, normal, hard의 3가지 난이도 선택
  • easy 난이도에서는 I형 블럭(OOOO)이 20% 더 자주 등장, hard 난이도에서는 I형 블럭이 20% 덜 등장
  • 줄 삭제에 따라 증가하는 블럭이 떨어지는 속도 또한 easy에서는 20% 덜 증가, hard에서는 더 증가
  • 난이도에 따른 추가 규칙이나 점수 부여 등은 자유롭게 결정
  • 스코어 보드에서는 어떤 난이도에서 점수를 얻은 것인지 구분하여 확인할 수 있어야 함.

[Logic] 스코어보드 구현

  • 점수, 시간, 이름의 스코어 보드 형식 생성
  • csv로 저장
  • 스코어 보드 불러오기
  • 점수, 이름 높은 순으로 정렬

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.