diff --git a/Backgammon/Backgammon.cpp b/Backgammon/Backgammon.cpp
index e76d14d..671b823 100644
--- a/Backgammon/Backgammon.cpp
+++ b/Backgammon/Backgammon.cpp
@@ -87,18 +87,19 @@ void throw_dice()
 bool turn_is_possible(vecint dices, bool head_chip)
 {
 	int count = 0; // считаем, что оба хода возможны
-	for (int i = 0; i < 2; i++) // проверяем возможность хода с очками на обоих кубиках
+	for (int i = 0; i < dices.size(); i++) // проверяем возможность хода с очками на кубиках
 	{
 		int ok_positions = 24; // позиция "плохая", если на ней нет фишек или с неё нельзя сходить, изначально считаем, что все "хорошие"
 		for (int j = 0; j < 24 - dices[i]; j++)
-			if ( (val[i].chip == p[player - 1] && val[i + dices[i]].chip == p[(player % 2)])  ||  val[i].chip.empty()  ||  (j==0 && head_chip))
+			if ( (val[j].chip == p[player - 1] && val[j + dices[i]].chip == p[(player % 2)])  ||  val[j].chip.empty()  ||  (j==0 && head_chip && player==1)
+				|| (j==12 && head_chip && player==2) || val[j].chip!=p[player-1])
 				ok_positions--; /* если на текущей позиции - ваша фишка, а на итоговой - фишка соперника, или текущая позиция пустая,
-								 или если это голова и с нее уже сняли фишку, то метим позицию как плохую*/
+								 или если это голова и с нее уже сняли фишку, или же на этой позиции чужая фишка, то метим позицию как плохую)))))*/
 								// (player-1) - текущий игрок, ( (player %2)+1 ) - противник!
 		if (ok_positions == 0) 
 			count++; // ход с этими очками невозможен
 	}
-	if (count==2)
+	if ( count==dices.size() )
 		return false;
 	return true;		
 }
@@ -113,8 +114,6 @@ void turn()
 	dices.push_back(dice1);
 	dices.push_back(dice2);
 	cout << "Ходит игрок " << player << endl;
-	if (turn_is_possible(dices, head_chip))
-	{
 		if (dice1 == dice2) // дубль
 		{
 			cout << "Вам выпал дубль!!!" << endl << endl;
@@ -123,59 +122,67 @@ void turn()
 		}
 		while (!dices.empty())
 		{
-			cout << "Введите номер ячейки, откуда переставлять:     ";
-			cin >> pos;
-			while ((val[pos].chip != p[player - 1]) || (head_chip && pos==12 && player==2) || (head_chip && pos == 0 && player == 1))
-				// если ход чужой фишкой или попытка снять еще одну с головы
+			if (turn_is_possible(dices, head_chip))
 			{
-				if ((pos == 0 && player==1) || (pos == 12 && player ==2))
-					cout << "С головы фишку снимать больше нельзя. Введите другую позицию" << endl;
-				else
-					cout << "Здесь чужая фишка или пустая ячейка. Введите позицию заново." << endl;
+				cout << "Введите номер ячейки, откуда переставлять:     ";
 				cin >> pos;
-			}
-			if ((pos == 0 && player==1) || (pos==12 && player==2)) // сняли фишку с головы, больше снимать нельзя
-				head_chip = true;
-			cout << "Количество очков:    ";
-			cin >> points;
-			while (val[(pos + points)%24].chip == p[player % 2])
-			{
-				cout << "Ход невозможен, здесь чужая фишка. Введите количество очков заново или любую другую цифру, чтобы изменить ход." << endl;
+				while ((val[pos].chip != p[player - 1]) || (head_chip && pos == 12 && player == 2) || (head_chip && pos == 0 && player == 1))
+					// если ход чужой фишкой или попытка снять еще одну с головы
+				{
+					if ((pos == 0 && player == 1) || (pos == 12 && player == 2))
+						cout << "С головы фишку снимать больше нельзя. Введите другую позицию" << endl;
+					else
+						cout << "Здесь чужая фишка или пустая ячейка. Введите позицию заново." << endl;
+					cin >> pos;
+				}
+				if ((pos == 0 && player == 1) || (pos == 12 && player == 2)) // сняли фишку с головы, больше снимать нельзя
+					head_chip = true;
+				cout << "Количество очков:    ";
 				cin >> points;
-			}
-			for (int i = 0; i < dices.size(); i++)
-				if (points == dices[i])
+				while (val[(pos + points) % 24].chip == p[player % 2])
 				{
-					dices.erase(dices.begin() + i); // удаляем кубик из массива кубиков
-					flag = true;
-					break;
+					cout << "Ход невозможен, здесь чужая фишка. Введите количество очков заново или любую другую цифру, чтобы изменить ход." << endl;
+					cin >> points;
 				}
+				for (int i = 0; i < dices.size(); i++)
+					if (points == dices[i])
+					{
+						dices.erase(dices.begin() + i); // удаляем кубик из массива кубиков
+						flag = true;
+						break;
+					}
 
-			if (flag) // flag - признак верности хода, меняем расположение фишки
-			{
-				val[(pos + points) % 24].chip = val[pos].chip;
-				val[pos].amount--;
-				if (val[pos].amount == 0)
-					val[pos].chip.erase(); // удаляем фишку, если ячейка стала пустой
-				val[(pos + points) % 24].amount++;
+				if (flag) // flag - признак верности хода, меняем расположение фишки
+				{
+					if ((player == 1 && (pos + points) <= 23) || (player == 2 && (pos + points) >= 6)) //условие того, что фишка не выйдет из дома
+					{
+						val[(pos + points) % 24].chip = val[pos].chip;
+						val[pos].amount--;
+						if (val[pos].amount == 0)
+							val[pos].chip.erase(); // удаляем фишку, если ячейка стала пустой
+						val[(pos + points) % 24].amount++;
 
-				system("cls");
-				show_field();
+						system("cls");
+						show_field();
 
-				if (!dices.empty())
-					cout << "У вас остались следующие ходы:   " << endl;
-				for (int i = 0; i < dices.size(); i++)
-					cout << dices[i] << " ";
-				cout << endl;
-				flag = false;
+						if (!dices.empty())
+							cout << "У вас остались следующие ходы:   " << endl;
+						for (int i = 0; i < dices.size(); i++)
+							cout << dices[i] << " ";
+						cout << endl;
+						flag = false;
+					}
+				}
+				else
+					cout << "Ходить из дома нельзя." << endl;
+			}else
+			{
+				cout << "Вы не можете ходить, ход переходит сопернику";
+				Sleep(1000);
+				break;
 			}
 		}
-	}
-	else
-	{
-		cout << "Вы не можете ходить, ход переходит сопернику";
-		Sleep(1000);
-	}
+	head_chip = false;
 	player = (player % 2) + 1; //переход хода другому игроку
 }