텍스트 기반 테트리스 게임
- esc: 게임 종료
- p: 게임 중단/재개
- ←: 왼쪽 이동
- ↓: 아래 이동
- →: 오른쪽 이동
- ↑: 블럭 90도 회전
텍스트 기반 테트리스 게임
프로젝트 패키지를 좀 더 세련되고 관리하기 용이한 구조로 리팩토링.
시간이 소요되긴 하지만 오히려 이후 공수를 줄이기 위해서 필요함.
• 게임을 실행하면 처음으로 나오는 메뉴를 구현함.
• 메뉴 화면의 상단에는 게임의 이름이 표시되어야 함.
• 그 아래로 게임을 시작할 수 있는 메뉴와 설정 메뉴, 스코어보드, 게임 종료 메뉴(프로그램 종료)를 표시.
• 각 메뉴를 선택하면 해당하는 기능을 수행.
• 키보드를 이용하여 메뉴 사이를 이동할 수 있어야 함.
• 엔터(리턴) 키를 눌러 메뉴를 선택.
• 다른 키를 사용하는 경우는 화면에 사용가능한 키를 표시.
• 메뉴가 차후 추가될 수 있도록 설계되어야 함.
상대방에게 넘어간 블럭은 상대방 보드의 아래쪽으로 넘어간 형태 그대로 추가됩니다.
직접 쌓은 블럭과 구분하기 위해 추가된 블럭은 회색으로 처리합니다.
색상은 자유롭게 결정해도 무방합니다.
기본 게임과 마찬가지로 플레이어 중 어느 한 쪽이 더 이상 블럭을 쌓을 수 없게 되면 게임이 종료됩니다.
대전 모드에서는 한 플레이어가 더 이상 블럭을 쌓지 못하는 상태가 되면, 다른 플레이어가 승자가 됩니다.
상대 플레이어에게 넘길 수 있는 최대 줄 수는 10줄입니다.
여러 번의 공격으로 추가되는 줄은 현재 넘어간 줄의 아래쪽으로 추가됩니다.
추가될 줄이 표시되는 부분에 이미 10줄이 차 있는 경우, 줄을 삭제해도 상대방에게 넘어가지 않고 무시됩니다.
현재 10줄이 다 차있지 않더라도 넘어온 줄의 수를 더하여 10줄이 넘게 된다면, 제일 아래쪽 부분을 잘라내고 추가합니다
인게임을 들어갔을때 키 입력이 전혀 되지 않는 문제를 해결해야 한다.
10개의 줄이 삭제되면, 다음에 생성될 블럭을 보여주는 부분에 새롭게 나타나는 블럭은 반드시 아이템이 거나 아이템을 포함해야 합니다.
아이템은 구분이 쉽도록 특징적인 모양을 하거나 기본 블럭과 다른 문자를 사용해 표현합니다.
각각의 아이템은 반드시 다른 문자를 사용해야 합니다.
UI 적용할 때 블럭마다 색을 다르게 보이기 위해 board
를 int[][]
가 아닌 UnitBlock[][]
의 식으로 만들어 표현하도록 변경해야함
대전 모드 대응을 위해 다음과 같은 GUI가 구현되어야 함.
개발 하면서 필요한 부분 추가될 수 있음.
게임의 역대 점수 순위를 보여주는 스코어 보드를 구현.
• 각 순위별로 이름 및 점수 등의 정보를 점수가 높은 순으로 정렬하여 보여줌.
• 전체 기록된 순위는 적어도 상위 10개 이상을 포함.
• 설정에서 초기화하기 전에는 프로그램을 종료하더라도 스코어 보드 기록이 유지되어야 함.
• 그 외의 사항은 자유롭게 설계 및 구현.
+게임 종료시의 스코어 보드에는 현재점수 강조 혹은 애니메이션
-시간제한모드 : 일반모드와 동일하되 시간 제한이 있음
• 참조 코드에 제시된 7가지 모양의 블럭을 구현.
• https://github.com/Jindae/SeoulTech-SE-Tetris-Ref
• 다음에 나타날 블럭은 동일한 확률로 무작위로 결정됨.
• 각각의 블럭은 모두 다른 색상을 가져야 함.
• 유사한 모양이나 좌우가 바뀐 블럭들은 구분이 용이하도록 대비되는 색상이나 무늬를 지녀야 함
기초적인 테스트 코드 작성 요령을 익히기 위한 작업
둘이 동시에 눌렀을 때 먼저 누른 사람이 키 두 번 입력되는 버그
설정과 같은 메뉴 들어갔다가 나오면 메뉴 이동 키가 안먹는 문제가 있음
Swing에서 현재 사용하고 있는 CardSwitcher방식은 갈아끼울 수 있는 Pane들을 게임 실행시 모두 인스턴스화 하여 갈아끼우는 방식인데, 이로 인한 생명주기 관리 어려움과 키 포커스 문제로 추정되는 사이드 이펙트를 겪고 있으므로 대체 방법을 개발.
기본적으로 블럭이 1칸 떨어질 때마다 한 단위의 점수(100점)를 획득.
자동/수동 조작에 무관하게 획득함.
블럭이 떨어지는 속도가 초기 속도보다 빨라진 경우 추가적인 점수를 획득.
라인을 지울 때마다 추가 점수 (500, 1500, 3000, 5000, 10000)
Win32의 경우 Launch4j를 이용하여 jar파일을 exe 형태로 패키징 및 배포
Mac의 경우 pkgbuild를 이용하여 app 형태로 패키징 및 배포
• 텍스트 기반 보드 만들어야 함. (가로 10, 세로 20)
• 보드에 현재 블럭이 생성되면, 이 블럭은 아무 조작이 없어도 1초에 1칸씩 밑으로 떨어져야 함.
• 일정 수 이상의 블럭이 생성되거나, 줄이 삭제되면 떨어지는 속도가 증가해야 함.
• 현재 블럭을 키보드 입력에 따라 다음과 같이 조작 가능해야 함.
• 좌, 우, 아래로 한 칸씩 이동시킬 수 있어야 함. (←, ↓, →)
• 시계방향으로 90도씩 회전시킬 수 있어야 함.
• 한 번에 끝까지 밑으로 떨어뜨릴 수 있어야 함. (Space)
• 반복된 키 입력이 무시되지 않고 블럭이 즉시, 정확하게 반응해야 함.
• 게임 도중 게임을 잠시 중단/재개할 수 있는 키가 존재해야 함. (P, ESC)
• 게임 진행/중지 상태에서 게임을 종료할 수 있는 방법이 존재해야 함 (alt-f4 등 OS를 이용한 방법 제외)
테트리스 화면이 깨져서 나오는 문제
• 기본적인 화면 구성은 다음을 포함.
• 블럭이 쌓이는 보드(board), 다음 블럭을 확인할 수 있는 부분, 점수를 확인할 수 있는 부분.
• 보드는 블럭의 한 칸을 기준으로 하였을 때 20개의 줄과 10개의 칸을 가져야 함.
• 다음 블럭 부분은 각 블럭이 보드에 생성될 때마다 다음에 생성될 블럭들을 표시.
• 점수 부분은 실시간으로 바뀌는 점수를 표시
속도가 너무 빨라져요
-아이템모드 : 일반모드와 동일하되 아이템이 등장
-시간제한모드 : 일반모드와 동일하되 시간 제한이 있음
Java Swing과 관련된 부분들 리팩토링 진행
• 설정 화면에서는 다음과 같은 기능을 제공해야 함.
• 테트리스 게임 화면의 크기를 조절 - 최소 3가지 이상 미리 정의된 크기.
• 게임 조작을 위해 사용될 키를 설정.
• 스코어 보드의 기록을 초기화.
• 색맹 모드 켜고 끄기.
• 모든 설정으로 기본 설정으로 되돌리기.
• 바뀐 설정은 저장되었다가 다음 게임 실행시 동일한 설정을 불러와 사용할 수 있어야 함.
• 그 밖의 필요한 설정을 추가하는 것도 가능.
Java의 Preferences API를 활용하여 개발할 예정임.
일정 수 이상의 블럭이 생성되거나, 줄이 삭제되면 떨어지는 속도가 증가해야 함.
게임 도중 게임을 잠시 중단/재개할 수 있는 키가 존재해야 함. (P, ESC)
게임 진행/중지 상태에서 게임을 종료할 수 있는 방법이 존재해야 함 (alt-f4 등 OS를 이용한 방법 제외)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.