short Mastermind::CleanList(Color* _tabColorRef, short* _tabVerdicts) { Color couleurVerdict; Iterator<ArrayI<Color>> iter; for (int i = 0; i < 4; i++) { iter.SetCurrent(list->Begin()); switch(_tabVerdicts[i]) { case 1: //Bonne couleur, bonne place //Si la séquence de couleurs traitée n'a pas la couleur à la bonne place, il faut la retirer de la liste. while (iter.GetCurrent() != NULL) { couleurVerdict = _tabColorRef[i]; if (couleurVerdict!=(iter.GetCurrentElement()->GetElement(i))) { list->Erase(iter); } iter.Next(); } case 2: //Bonne couleur, mauvaise place //Si la séquence de couleurs traitée n'a pas la couleur à un autre emplacement que celui de la couleur de référence, //il faut la retirer de la liste. while (iter.GetCurrent() != NULL) { couleurVerdict = _tabColorRef[i]; if (couleurVerdict==(iter.GetCurrentElement()->GetElement(i))) { list->Erase(iter); } iter.Next(); } case 3: //Mauvaise couleur //Si la séquence de couleurs traitée a la couleur, il faut la retirer de la liste. while (iter.GetCurrent() != NULL) { couleurVerdict = _tabColorRef[i]; for (int j = 0; j < 4; j++) { if (couleurVerdict==(iter.GetCurrentElement()->GetElement(j))) { list->Erase(iter); } } iter.Next(); } }; } return 1; //Pour Compiler }
ArrayI<Color>* Mastermind::GetElement() const { //Utiliser la classe RandomNumber pour ne pas offrir toujours le premier élément de la liste (les parties seraient toutes pareilles avec la même séquence cachée) RandomNumber index; Iterator<ArrayI<Color>> iter; iter.SetCurrent(list->Begin()); for(int i=1; i<index.GetNumber(GetNbElements()); i++) { iter.Next(); } return iter.GetCurrentElement(); }
short Mastermind::CleanList(Color* _tabColorRef, short* _tabVerdicts) //return le nb d'element deleter { Iterator<ArrayI<Color>> iter; iter.SetCurrent(list->Begin()); bool toDelete; bool deleted; bool toBeDeleted; short deletedElements = 0; while(iter.GetCurrent() != NULL) { deleted = false; for(int j = 0; j<4; j++) { switch(_tabVerdicts[j]) { case 1: //Bonne couleur, bonne place //Si la séquence de couleurs traitée n'a pas la couleur à la bonne place, il faut la retirer de la liste if(iter.GetCurrentElement()->GetElement(j) != _tabColorRef[j]) { list->Erase(iter); deleted = true; deletedElements ++; } break; case 2: //Bonne couleur, mauvaise place //Si la séquence de couleurs traitée n'a pas la couleur à un autre emplacement que celui de la couleur de référence, //il faut la retirer de la liste. toDelete = true; toBeDeleted = false; for(int k=0; k<4; k++) { if(iter.GetCurrentElement()->GetElement(k) == _tabColorRef[j] && k != j && !toBeDeleted) { toDelete = false; } else if(iter.GetCurrentElement()->GetElement(k) == _tabColorRef[j] && k == j) { toDelete = true; toBeDeleted = true; } } if(toDelete) { list->Erase(iter); deleted = true; deletedElements ++; } break; case 3: //Mauvaise couleur //Si la séquence de couleurs traitée a la couleur, il faut la retirer de la liste. toDelete = false; for(int k=0; k<4; k++) { if(iter.GetCurrentElement()->GetElement(k) == _tabColorRef[j]) { toDelete = true; } } if(toDelete) { list->Erase(iter); deleted = true; deletedElements ++; } break; } } if(!deleted) { iter.Next(); } } return deletedElements; }