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
}
Example #2
0
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();
}
Example #3
0
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;
}