hibye1217 / Terratrias

10개 All Green 딴 사람이 나왔습니다.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Terratrias

![Logo](/Docs/게임프로젝트 로고(선린대학교).png "Logo")

중요한 거

팀 정보

팀명 : 선린대학교

팀원 및 역할

  • 20611 : 핵심 기능 (클래스)
  • 20616 : 기획, 레벨 디자인
  • 20618 : UI
  • 20619 : 핵심 기능 (실제 게임 구현)

클래스 디자인

class Manager{ // 게임에 필요한 것들. Scene (Stage) 가 대신할 수도 있음.
    vector< vector<Cell> > map;      // 2차원 맵
    int height, width;               // 맵의 높이, 너비
    int moveCount, limitCount;       // 움직인 횟수, 최소 이동 횟수
    int keyCnt;						 // 맵에 있는 총 Key 개수
    int lastDir;					 // 마지막 행동의 방향 (없으면 -1)
    bool moved;						 // 마지막 행동이 user의 위치를 변화시켰는가?
    User user;                       // 유저

    bool isValidPoint(int x, int y); // 맵의 범위를 넘지 않는지 확인
    void init(string FileName);      // 맵 초기화
}
class Cell{ //
    Item* pItem;             // 칸에 저장된 아이템
    Topography* pTopography; // 칸의 지형

    bool canGo();            // 유저가 이동할 수 있는 칸인지 확인
}
class Item{ // 아이템
    int type;		   // 아이템 종류
    void useItem();    // 아이템 사용
    bool canUseItem(); // 아이템을 사용할 수 있는지 확인
}
class Topography{
    int type;	  		// 지형 종류
    bool canGo(); 		// 유저가 이동할 수 있는 칸인지 확인
	void onArrived();	// 이 지형에 도착했을 때의 상호작용
}
class User{
    int x, y;         // 유저의 위치
    Item* pInventory; // 유저가 들고 있는 아이템

    void useItem();     // 아이템 사용
    void gainItem();    // 아이템 줍기
    void putItem();     // 아이템 놓기
    void move(int dir); // 이동
}

플레이 로직

게임을 시작하면 플레이할 맵을 고른다.
X번째 맵을 플레이하려면, X-1번째 맵까지 플레이한 적이 있어야 한다.

점수는 맵별로 정해져 있으며, 해당 맵을 시작할 때 특정 수로 주어진다.

  • move : 해당 방향의 칸에 갈 수 있다면, 이동한다. 점수가 감소한다.
  • get : 유저가 아이템을 들고 있지 않다면, 현재 칸의 아이템을 줍는다.
  • put : 현재 칸이 비어있다면, 유저가 아이템을 현재 칸에 놓는다.
  • use : 유저가 아이템을 사용할 수 있다면, 사용한다. 이 때 사용한 아이템은 사라진다.
    • key : 현재 칸의 지형이 Hole 이고, 들고 있는 Key와 Hole의 ID가 동일하다면 사용할 수 있다. 사용 시 Hole은 Space가 되며, KeyCount 가 1 감소한다.
    • jump : 이동할 방향의 지형이 User | Wall | Space 형태라면 사용할 수 있다. 사용 시 유저가 Wall을 넘어 Space에 도착한다. 1회 이동한 것으로 간주한다.

해당 맵을 클리어할 때 남은 점수가 전체 점수에 더해진다.
점수가 늘어날 수도 있지만, 줄어들 수도 있다.
그 뒤, 현재 맵 다시하기 / 다음 맵 하기 / 메뉴로 돌아가기 중 하나를 선택할 수 있다.

모든 맵을 플레이한 후, 전체 점수에 따라 엔딩이 나뉜다.

  • 전체 점수가 0 이상이면 실험 성공 (Happy Ending) 이다.
  • 전체 점수가 0 미만이면 실험 실패 (Bad Ending) 이다.

게임 안내

User는 2차원 맵 (크기는 최대 20 x 20 정도) 에서 상하좌우로 이동하고,
아이템을 줍고, 쓰고, 놓으면서 모든 Key를 대응되는 각각의 Hole에 넣어야 한다.
모든 Key가 대응되는 Hole에 놓이면 게임이 끝난다.

각 칸에는 최대 1개의 아이템을 놓을 수 있고, Space / Wall / Hole 등의 지형이 있다. 아이템은 1회용이며, 최대 1개까지 들고 있을 수 있다.
아이템이 있는 칸에 올라가서 주울 수 있다.
맵마다 처음에 주어지는 점수가 있는데, 이 점수는 이동할 때마다 감소하다가 게임이 끝날 때 얻게 된다.
얻게 되는 총 점수에 따라 이후 플레이가 나뉠 수도 있다.

업데이트 : 최대 크기를 30x30 에서 20x20 으로 수정했다.

아이템, 지형 설명

아이템을 줍거나, 놓거나, 사용할 때는 이동 횟수로 치지 않는다.
예외적으로, Jump나 Boost의 사용은 이동 횟수 1회로 친다. (이동을 하는 아이템이므로)

  • 아이템 (Item)
    • None : 아이템이 없는 경우다.
    • Key : 고유 ID가 있다. 같은 ID를 가진 Hole에 옮겨야 한다.
    • Jump : 벽 하나를 뛰어넘을 수 있다.
    • Boost : 원하는 방향으로 5칸을 이동할 수 있다. 만약 도중에 벽 또는 Glue를 만난다면 멈춘다.
    • Bomb : 유저를 중심으로 3x3 안에 있는 칸에 대하여 지형=Space, Item=None 으로 변경한다. (Key나 Hole 같은 게 없어질 수도 있음)
  • 지형 (Topography)
    • Space : 빈 칸이다.
    • Wall : 벽이다. User가 있을 수 없다.
    • Hole : 구멍이다. 고유 ID가 있으며, Key가 맞춰진 경우 Space로 변한다.
    • Ice : 미끄러지는 칸이다. 이 칸에 도착했을 때, 얼음이 아닌 칸을 만날 때까지 계속 그 방향으로 움직인다. 1회 이동으로 간주한다.
    • Glue : User가 올 수는 있지만, 이동 횟수가 1 추가 감소한다.

아마 안 중요한 거? (스토리 등등)

개요

테라트리아스는 일반인들을 위한 간단한 퍼즐과
더 복잡한 퍼즐을 풀고 싶어하는 이들을 위한 상급 퍼즐이 있습니다.

이 게임은 최소 횟수로 각 단계를 통과하는 것이 목표입니다.
시간은 상관 없습니다.

게임은 캐릭터와 열쇠, 열쇠구멍, 그리고 특수능력을 지닌 아이템이 있습니다.
이러한 아이템, 지형지물을 활용하여 최소 횟수로 통과하도록 노력하면 됩니다.

싱글플레이어 게임입니다.

추가된 장비들과 능력, 지형지물, 더 어려워진 난이도의
테라트리아스 : Ex 도 있습니다.

프로젝트 선정 이유

장르는 퍼즐로 선정했다.
팀원들이 좋아하는 장르이면서, 콘솔에서 실행하기도 좋기 때문이다.
콘솔에서 실행되므로 디자인에 신경을 쓸 필요가 없다는 점도 좋았다.

업데이트 : 콘솔에서 하지 않기로 했다.

시나리오

일반인의 기억 / 응용 능력에 관심이 있는 실험 관리자가,
실험자들을 고용해 자신이 만든 퍼즐로 사람들을 시험하고 있습니다.
실험자는 제 1단계부터 제 18단계까지 지형지물과 여러 도구들로 이루어진 퍼즐을 통과할 것입니다.

실험 관리자는 실험자의 모든 움직임에 의미를 부여할 정도로 기대하고 있습니다.

실험 관리자의 예상보다 못 미치는 결과를 내놓아도 상관 없지만,
관리자의 실망이 실험자들에게 번질 수도 있겠죠.

만약 실험 관리자가 만족했다면, 더 확실한 데이터를 얻기 위해 추가 실험을 진행할 것입니다.

프로젝트 개발 과정 및 향후 계획

  1. 아이템과 지형을 기획한다.
    • 필수적인 아이템, 지형을 우선하여 기획한다.
    • 나중에 아이템, 지형이 추가될 수도 있다.
  2. 주요 함수의 로직을 디자인한다.
    • 클래스의 메소드를 어떻게 구현할지, 어떻게 사용할 지 결정한다.
  3. 실제 기능을 구현한다.
    • 유저의 움직임, 아이템 사용 등 플레이에 필요한 최소한의 기능을 먼저 구현한다.
    • 그 뒤 아이템과 지형을 구현한다.
  4. 레벨을 디자인하고 UI를 구현한다.
    • 맵 데이터를 저장하는 파일을 만들어서 거기에 맵 정보를 저장한다.
    • UI를 구현하고 미리 구현한 인게임과 합친다.
  5. 게임을 테스트해본다.
    • 시작부터 끝까지 확인해본다.
  6. 향후 계획
    • 아이템과 지형을 더 추가한다.
    • 맵을 자동으로 생성하고, 생성한 맵의 클리어 가능 여부 및 필요한 최소 이동 횟수를 찾는 기능을 만든다.
    • 위 기능을 이용하여 무한 모드나 타임어택 모드 등을 만든다.

About

10개 All Green 딴 사람이 나왔습니다.


Languages

Language:C++ 100.0%