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; } }
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; } }
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; }
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); }
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); }
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; } }
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; }
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; }
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; }