ItemManager에서 관리하는 각 Item에 대한 구현이다.

Item.h

코드

#ifndef _Item_H
#define _Item_H
#include "IDraw.h"
#include"ICollidable.h"

class Item : public IDraw , public ICollidable
{
public:
    Item(int tmpPosX=0,int tmpPosY=0,bool tmpIsPoison=false);
    void SetItem(int tmpPosX,int tmpPosY, bool tmpIsPoison);
    void SetState(bool tmpIsUsing);
    pair<int,int> getPos();
    void Draw();
    void whenCollided(Snake* player);
    bool GetState();
    

private:
    bool isPoison;
    bool isUsing;
    int posX;
    int posY;
    int lifeTime;
};

#endif

간략한 설명

멤버변수로는
독 여부에 대한 bool형 변수 isPoison,
현재 사용 여부에 대한 bool형 변수 isUsing,
위치 정보에 대한 posX,posY,
수명 주기에 대한 변수 lifeTime을 넣었다.

수명주기는 아이템이 일정 시간 뒤엔 사라지고
다른 위치에서 나타나면 재밌을 것 같아서 넣었다.

Item.cpp

코드

#include "../Include/Item.h"
#include <ncurses.h>


Item::Item(int tmpPosX, int tmpPosY, bool tmpIsPoison){
    lifeTime=10;
    posX=tmpPosX;
    posY=tmpPosY;
    isPoison=tmpIsPoison;
    isUsing=false;
}

void Item::SetItem(int tmpPosX, int tmpPosY, bool tmpIsPoison){
    lifeTime=15;
    posX=tmpPosX;
    posY=tmpPosY;
    isPoison=tmpIsPoison;
    isUsing=true;
}

void Item::SetState(bool tmpIsUsing){
    isUsing=tmpIsUsing;
}
pair<int,int> Item::getPos(){
    return make_pair(posX,posY);
}

bool Item::GetState(){
    return isUsing;
}

void Item::whenCollided(Snake* player){
    isUsing=false;
    if(isPoison) player->Shrink();
    else
    player->Extend();
}

void Item::Draw()
{
    if(!lifeTime) {
        isUsing=false;
    }
    if(!isUsing) return;
    lifeTime--;
    if(isPoison){
        mvprintw(posX,posY,"P");
    }
    else
        mvprintw(posX,posY,"@");
}

간략한 설명

  • 생성자에선 인자값으로 받은 변수들로 미리 아이템을 생성한 후,
    사용하지 않는 상태로 설정한다.

  • SetItem은 인자값으로 받은 변수들로 아이템을 맵에 생성하는 함수로,
    사용중인 상태로 설정한다.

  • SetState함수는 아이템의 사용 여부를 변경하는 함수다.

  • getPos함수는 현재 아이템의 위치를 pair형으로 반환하는 함수다.

  • GetState함수는 아이템의 사용여부를 반환하는 함수다.

  • whenCollided함수는 ICollidable인터페이스의 가상함수이다.
    플레이어와 닿았을 때, 독이라면 snake클래스의 Shrink()함수를 호출하고,
    아이템이라면 snake클래스의 Extend()함수를 호출한다.

  • Draw()함수는 IDraw인터페이스의 가상함수이다.
    수명이 다 되었다면 사용중을 false로 변경해준다.
    사용중이 아니라면 바로 return을 해준다.
    Draw()함수는 SnakeGame함수에서 매 게임주기당 실행되므로,
    Draw()함수가 호출되면 lifeTime을 1씩 깎는다.
    그 후, 독이라면 아이템 위치에 'P'를 그리고,
    아이템이라면 '@'를 그린다.

profile
코딩 창고!

0개의 댓글