예제 #1
0
파일: combat.c 프로젝트: Darklightez/Rogue
void combat(int yLoc, int xLoc, Player * chris, Enemy * enemy[20])
{
    //declare variables
    int eneNum, init;
    //allocate memory
    eneNum=0;
    for(eneNum = 0; eneNum < 20 && enemy[eneNum]->real==1;eneNum++)
    {
        if(enemy[eneNum]->xPos == xLoc && enemy[eneNum]->yPos == yLoc)
        {
            break;
        }
    }
    //if no enemy is found (should never happen) default to last
    if(eneNum == 20)
    {
        eneNum = 19;
    }

    //initalize variables
    init = rand() % 10 +1;

    //case 1: you hit enemy: deal damage
    if(init>enemy[eneNum]->spd)
    {
        enemy[eneNum]->health -= chris->att;
        moveText();
        mvprintw(56, 10, "You attack for %d damage!", chris->att);
    }

    //case 2: Enemy hits you: health or attack is lowered
    else
    {
        if(enemy[eneNum]->type == 'A')
        {
            chris->att -= enemy[eneNum]->att;
            moveText();
            mvprintw(56, 10, "You were hit and lost %d attack!", enemy[eneNum]->att);
        }
        else
        {
            chris->health -= enemy[eneNum]->att;
            moveText();
            mvprintw(56, 10, "You were hit and lost %d health!", enemy[eneNum]->att);
        }
    }

}
예제 #2
0
파일: combat.c 프로젝트: Darklightez/Rogue
void enemyObjChk(Enemy * enemy[20], int eneNum, int yChange, int xChange, Player * chris)
{
    //declare variable
    char newLoc;

    //target location
    newLoc = mvinch(enemy[eneNum]->yPos+yChange, enemy[eneNum]->xPos+xChange);

    //kill event
    if(enemy[eneNum]->health<1 && enemy[eneNum]->type!='.')
    {
        moveText();
        mvprintw(56, 10, "You killed a %s!", getWord(enemy[eneNum]->type));
        enemy[eneNum]->type = '.';
    }

    //case 1: clear: move there
    if(newLoc == '.')
    {
        mvaddch(enemy[eneNum]->yPos, enemy[eneNum]->xPos, '.');
        mvaddch(enemy[eneNum]->yPos + yChange, enemy[eneNum]->xPos +xChange, enemy[eneNum]->type);
        enemy[eneNum]->xPos += xChange;
        enemy[eneNum]->yPos += yChange;
    }

    //case 2: hero: attack
    else if(newLoc == '@')
    {
        combat(enemy[eneNum]->yPos, enemy[eneNum]->xPos, chris, enemy);
    }
    //otherwise creature will not be able to move
}//end of enemyObjChk
예제 #3
0
void AnnotationRenderer::mouseMoveEvent(const MouseEvent& event)
{
	Point zoomedMouse = getParentView()->viewport().toView(event.pos());
	Point delta = zoomedMouse - m_previousMousePos;
	m_previousMousePos = zoomedMouse;
	if(delta.isNull())
		return;

	if (m_movingAction == MOVING_TEXT)
		moveText(delta);
	else if (m_movingAction == MOVING_POINT)
		moveEnd(delta);
}
예제 #4
0
void AnnotationRenderer::mouseReleaseEvent(const MouseEvent& event)
{
	Point zoomedMouse = getParentView()->viewport().toView(event.pos());
	Point deltaStart = m_startMousePos - m_previousMousePos;
	Point delta = zoomedMouse - m_startMousePos;

	if (m_movingAction == MOVING_TEXT)
	{
		moveText(deltaStart);
		getParentView()->document()->getUndoStack().push(std::make_shared<MoveObjectCommand>(m_annotation, delta));
	}
	else if (m_movingAction == MOVING_POINT)
	{
		moveEnd(deltaStart);
		getParentView()->document()->getUndoStack().push(std::make_shared<MoveAnnotationEndCommand>(m_annotation, delta));
	}
		
	m_movingAction = MOVING_NONE;
}
예제 #5
0
파일: combat.c 프로젝트: Darklightez/Rogue
void moveEnemies(Enemy * enemy[20], Player * chris)
{
    //declare variables
    int i;
    int randMove;

    //cycles through list of enemies
    i=0;
    while(i<20 && enemy[i]->real==1)
    {
        //kill enemy event
        if(enemy[i]->health<1 && enemy[i]->type != '.')
        {
            moveText();
            mvprintw(56, 10, "You killed a %s!", getWord(enemy[i]->type));
            mvaddch(enemy[i]->yPos, enemy[i]->xPos, '.');
            enemy[i]->type = '.';
        }

        //Bat movement cycle: random
        if(enemy[i]->type == 'B')
        {
            randMove = rand() % 2 + 1;
            if(randMove == 1)
            {
                randMove = rand() % 2 +1;
                if(randMove == 1)
                {
                    enemyObjChk(enemy, i, 0, 1, chris);
                }
                else
                {
                    enemyObjChk(enemy, i, 0, -1, chris);
                }
            }
            else
            {
                randMove = rand() %2 + 1;
                if(randMove == 1)
                {
                    enemyObjChk(enemy, i, 1, 0, chris);
                }
                else
                {
                    enemyObjChk(enemy, i, -1, 0, chris);
                }
            }
        }

        //snake movement cycle: side to side
        else if(enemy[i]->type == 'S')
        {
                switch(enemy[i]->cycle)
                {
                    case 1:
                        enemyObjChk(enemy, i, 0, 1, chris);
                        break;
                    case 2:
                        enemyObjChk(enemy, i, 0, 1, chris);
                        break;
                    case 3:
                        enemyObjChk(enemy, i, 0, -1, chris);
                        break;
                    case 4:
                        enemyObjChk(enemy, i, 0, -1, chris);
                        break;
                }

                enemy[i]->cycle++;
                if(enemy[i]->cycle == 5)
                {
                    enemy[i]->cycle = 1;
                }


        }

        //zombie movement cycle: up and down
        else if(enemy[i]->type == 'Z')
        {
            if(enemy[i]->cycle == 1)
            {
                enemyObjChk(enemy, i, 1, 0, chris);
            }
            else
            {
                enemyObjChk(enemy, i, -1, 0, chris);
            }
            enemy[i]->cycle++;
            if(enemy[i]->cycle==3)
            {
                enemy[i]->cycle=1;
            }
        }

        //troll movement patter: circular
        else if(enemy[i]->type == 'T')
        {
                switch(enemy[i]->cycle)
                {
                    case 1:
                        enemyObjChk(enemy, i, 1, 0, chris);
                        break;
                    case 2:
                        enemyObjChk(enemy, i, 0, 1, chris);
                        break;
                    case 3:
                        enemyObjChk(enemy, i, -1, 0, chris);
                        break;
                    case 4:
                        enemyObjChk(enemy, i, 0, -1, chris);
                        break;
                }

                enemy[i]->cycle++;
                if(enemy[i]->cycle == 5)
                {
                    enemy[i]->cycle = 1;
                }

        }
        i++;
    }//end of movement loop
}//end of moveEnemies