Ejemplo n.º 1
0
bool Control::opntFind8()
{
    int n=myThree.size();
    vector<int>::iterator iter=myThree.end()-1;
    if (*iter==12&&!findBomb())
        return false;
    else if (*iter==12&&findBomb())
        return true;

    findThree();

    std::cout<<"p";

    if (opntPos.size()>=3*n)
    {
        opntPos.assign(opntPos.begin(),opntPos.begin()+3*n);
        return true;
    }
    else if(findBomb())
    {
        opntThree.clear();
        return true;
    }
    else
    {
        opntPos.clear();
        opntThree.clear();
        return false;
    }
}
Ejemplo n.º 2
0
bool Control::opntFind10()
{
    int i,cnt=0,n=myThree.size();
    vector<int> tmp(opntC.begin(),opntC.end()-1);
    vector<int>::iterator iter=myThree.end()-1,iter2;
    if (*iter==12&&!findBomb())
        return false;
    else if (*iter==12&&findBomb())
        return true;

    findThree();
    iter2=opntThree.end()-1;

    if (opntPos.size()>=3*n)
    {
        for (i=0;i<opntPos.size();i++)
            tmp[opntPos[i]]=0;
        for (i=0,cnt=0;i<tmp.size()-1&&cnt<myThree.size();i++)
            if (tmp[i]&&(tmp[i]>*iter2||tmp[i]<opntThree[0])&&tmp[i]==tmp[i+1])
            {
                opntPos.insert(opntPos.begin()+2*cnt+3*(cnt+1),i);
                cnt++;
                opntPos.insert(opntPos.begin()+4*cnt,i+1);
                i++;
            }

        if (cnt==n)
            return true;
        else if(findBomb())
        {
            opntThree.clear();
            return true;
        }
        else
        {
            opntPos.clear();
            opntThree.clear();
            return false;
        }
    }
    else if(findBomb())
    {
        opntThree.clear();
        return true;
    }
    else
    {
        opntPos.clear();
        opntThree.clear();
        return false;
    }
}
Ejemplo n.º 3
0
bool Control::opntFind5()
{
    opntThree.clear();
    int i,j;
    bool found=false;
    for (i=0;i<opntC.size()-2;i++)
        if (opntFind3(i)&&opntThree[0]>myThree[0])
        {
            found=true;
            break;
        }

    if (found)
    {
        for (j=0;j<opntC.size()-1;j++)
            if (opntC[j]!=0&&opntC[j]!=opntThree[0]&&opntC[j]==opntC[j+1])
            {
                opntPos.push_back(j);
                opntPos.push_back(j+1);
                break;
            }
    }

    if (found)
        return true;
    else if (findBomb())
        return true;
    else
        return false;
}
Ejemplo n.º 4
0
bool	Map::pushBomb(Character &pusher, unsigned int destX, unsigned int destY)
{
  unsigned int pushX = pusher.getX();
  unsigned int pushY = pusher.getY();
  unsigned int bombX;
  unsigned int bombY;
  int		index;

  if (!pusher.getKickBomb())
    return (false);
  printMap();
  if ((index = findBomb(destX, destY)) == -1)
    return (false);
  bombX = _bomb[index]->getX();
  bombY = _bomb[index]->getY();
  if (bombX == pushX)
    {
      if ((bombY > pushY) && (canMove(bombX, bombY, 1)))
	return (_bomb[index]->startMoving(1)); // UP
      else if ((bombY < pushY) && (canMove(bombX, bombY, 2)))
	return (_bomb[index]->startMoving(2)); // DOWN
      else
	return (false); //ERROR;
    }
  else if (bombY == pushY)
    {
      if ((bombX > pushX) && (canMove(bombX, bombY, 3)))
	return (_bomb[index]->startMoving(3)); // RIGHT
      else if ((bombX < pushX) && (canMove(bombX, bombY, 4)))
	return (_bomb[index]->startMoving(4)); // LEFT
      else
	return (false); //ERROR;
    }
  return (false);
}
Ejemplo n.º 5
0
int		Map::explodeCell(unsigned int index, int y, int x)
{
  int		tmp = 0;

  if (_map[y][x] == Tile::WALL)
    return (1);
  _bomb[index]->clearCell(x, y);
  _bomb[index]->addFire(x, y);
  if (_map[y][x] == Tile::BOMB)
    {
      if ((tmp = findBomb(x, y)) == -1)
	std::cout << "ERROR" << std::endl;
      _bomb[tmp]->getOwner()->setNbBomb((_bomb[tmp]->getOwner())->getNbBomb() + 1);
      _bomb[tmp]->startExplosion();
      explodeBomb(tmp);
      return (0);
    }
  if (_map[y][x] == Tile::BLOCK)
    {
      _map[y][x] = Tile::EXPLOSION_POWERUP;
      return (1);
    }
  _map[y][x] = Tile::EXPLOSION;
  return (0);
}
Ejemplo n.º 6
0
bool Control::opntFind7()
{
    int i,j,k,n=myOut.size();
    vector<int>::iterator iter=myOut.end()-1;
    if (*iter==12&&!findBomb())
        return false;
    else if (*iter==12&&findBomb())
        return true;

    for (i=0;i<opntC.size()-1;i++)
    {
        if (opntC[i]>myOut[0]&&opntC[i]==opntC[i+1])
        {
            j=i;
            opntPos.push_back(j);
            opntPos.push_back(j+1);
            for (k=j+1;k<opntC.size()-1;k++)
                if (opntC[j]==opntC[k]-1&&opntC[k]==opntC[k+1]&&opntC[k]<13)
                {
                    opntPos.push_back(k);
                    opntPos.push_back(k+1);
                    j=k+1;
                }

            if (opntPos.size()>=n)
                break;
            else
                opntPos.clear();
        }
    }

    if (opntPos.size()>=n)
    {
        opntPos.assign(opntPos.begin(),opntPos.begin()+n);
        return true;
    }
    else if(findBomb())
        return true;
    else{
        opntPos.clear();
        return false;
    }
}
Ejemplo n.º 7
0
bool Control::opntFind1()
{
    int i;
    for (i=0;i<opntC.size();i++)
        if (opntC[i]>myOut[0])
        {
            opntPos.push_back(i);
            return true;
        }

    if (findBomb())
        return true;

    return false;
}
Ejemplo n.º 8
0
bool Control::opntFind2(int n)
{
    int i;
    for (i=n;i<opntC.size()-1;i++)
        if (opntC[i]>myOut[0]&&opntC[i+1]==opntC[i])
        {
            opntPos.push_back(i);
            opntPos.push_back(i+1);
            return true;
        }

    if (findBomb())
        return true;

    return false;
}
Ejemplo n.º 9
0
bool Control::opntOut(vector<int> opntC,vector<int> &opntPos)
{
    this->opntC.clear();
    this->opntC.assign(opntC.begin(),opntC.end());
    this->opntPos.clear();

    int i,cnt;
    for (i=0,cnt=0;i<opntC.size();i++)
        if (opntC[i]!=0)
            cnt++;

    if (cnt<myOut.size()&&!findBomb())
    {
        first=true;
        return false;
    }
    else if (cnt<myOut.size()&&findBomb())
    {
        first=false;
        opntPos.assign(this->opntPos.begin(),this->opntPos.end());
        return true;
    }

    this->opntPos.clear();
    bool found=false;

    switch(type)
    {
    case SINGLE:
        found=opntFind1();
        break;
    case PAIR:
        found=opntFind2(0);
        break;
    case TRIPLE:
        found=opntFind3(0);
        break;
    case TRIPLE_WITH_ONE:
        found=opntFind4();
        break;
    case TRIPLE_WITH_TWO:
        found=opntFind5();
        break;
    case SEQUENCE_QUENCE:
        found=opntFind6();
        break;
    case SEQUENCE_QUENCE_OF_PAIRS:
        found=opntFind7();
        break;
    case SEQUENCE_QUENCE_OF_TRIPLETS:
        found=opntFind8();
        break;
    case SEQUENCE_QUENCE_OF_TRIPLETS_WITH_ONE:
        found=opntFind9();
        break;
    case SEQUENCE_QUENCE_OF_TRIPLETS_WITH_TWO:
        found=opntFind10();
        break;
    case BOMB:
        found=opntFind11();
        break;
    case ROCKET:
        found=false;
        break;
    }

    if (found)
    {
        first=false;
        opntPos.assign(this->opntPos.begin(),this->opntPos.end());
    }
    else
        first=true;
    return found;
}