Код:
Проблема с каким-то из "LoockPole"
В итоге,когда выигрывает ПК, мои шаги не блокируются и я могу ставить дальше пока не выиграю или не станет ничья. HELP PLS.
}
void LoockPole()
{
//блокируем все поле чтобы игрок не мог на него нажать
foreach (PictureBox P in GamePole) P.Enabled = false;
}
void UnloockPole()
{
int Indexx = 0;
//Разблокируем поля но только те которые не заполнены
foreach (PictureBox P in GamePole)
{
// если поле равно 0 значит есть смысл его открывать
if (GamePoleMap[Indexx++] == 0) P.Enabled = true;
}
}
//проверяем есть ли ходы
bool CanStap()
{
//перебираем все значения игрового поля
foreach (int s in GamePoleMap)
//если нашли 0 значит есть куда ходить
if (s == 0) return true;
//проверяем не выиграл ли игрок
if (Win(Player))
{
label3.Text = "Вы выиграли";
LoockPole();
//прячем панель игры
panel4.Visible = true;
//если не нашли то ходить больше нельзя
return false;
}
//проверяем не выиграл ли игрок
if (Win(Computer))
{
panel4.Visible = true;
label3.Text = "Вы проиграли";
//прячем панель игры
LoockPole();
panel3.Visible = false;
return false;
}
//если ходить больше нельзя и никто не выиграл значит пишем что ничья
label3.Text = "Ничья";
//прячем панель игры
panel4.Visible = true;
LoockPole();
return false;
}
bool Win(int WHO)
{
//список вариантов выигрышных комбинаций
int[,] WinVariant =
{ { //1 вариант
1,1,1, //Х Х Х
0,0,0, //_ _ _
0,0,0 //_ _ _
}, { //2 вариант
0,0,0, //_ _ _
1,1,1, //Х Х Х
0,0,0 //_ _ _
}, { //3 вариант
0,0,0, //_ _ _
0,0,0, //_ _ _
1,1,1 //Х Х Х
}, { //4 вариант
1,0,0, //Х _ _
1,0,0, //Х _ _
1,0,0 //Х _ _
}, { //5 вариант
0,1,0, //_ Х _
0,1,0, //_ Х _
0,1,0 //_ Х _
}, { //6 вариант
0,0,1, //_ _ Х
0,0,1, //_ _ Х
0,0,1 //_ _ Х
}, { //7 вариант
1,0,0, //Х _ _
0,1,0, //_ Х _
0,0,1 //_ _ Х
}, { //8 вариант
0,0,1, //_ _ Х
0,1,0, //_ Х _
1,0,0 //Х _ _
}
};
//получаем поле
int[] TestMap = new int[GamePoleMap.Length];
//просчитываем поле
for (int I = 0; I < GamePoleMap.Length; I++)
//если номер в ячейке нам подходит записываем в карту 1
if (GamePoleMap[I] == WHO) TestMap[I] = 1;
//выбираем вариант для сравнения
for (int Variant_Index = 0; Variant_Index < WinVariant.GetLength(0); Variant_Index++)
{
//счетчик для подсчета соотвествий
int WinState = 0;
for (int TestIndex = 0; TestIndex < TestMap.Length; TestIndex++)
{
//если параметр равен 1 то проверяем его иначе 0 тоже = 0
if (WinVariant[Variant_Index, TestIndex] == 1)
{
//если в параметр в варианте выигрыша совпал с вариантом на карте считаем это в параметре WinState
if (WinVariant[Variant_Index, TestIndex] == TestMap[TestIndex]) WinState++;
}
//если найдены 3 совпадения значит это и есть выигрышная комбинация
if (WinState == 3) return true;
}
}
return false;
}
void PC_Step()
{
//обновление функции генерации случайных чисел
Random Rand = new Random();
GENER:
if (CanStap())
{
//получаем число от 0 до 8
int IndexStep = Rand.Next(0, 8);
//проверяем на пустоту ячейки и ставим туда символ ПК
if (GamePoleMap[IndexStep] == 0)
{
//вставляем нужную картинку
GamePole[IndexStep].Image = Image.FromFile(ImgName[Computer]);
//записываем в поле игры ход ПК
GamePoleMap[IndexStep] = Computer;
}
else goto GENER;
if (!Win(Computer))
{
panel4.Visible = true;
label3.Text = "Вы проиграли";
LoockPole();
}
}
}
private void Picture_Click(object sender, EventArgs e)
{
if (CanStap())
{
PictureBox ClickImage = sender as PictureBox;
string[] ParsName = ClickImage.Name.Split('_');
int IndexSelectImage = Convert.ToInt32(ParsName[1]);
GamePole[IndexSelectImage].Image = Image.FromFile(ImgName[Player]);
GamePoleMap[IndexSelectImage] = Player;
if(!Win(Player))
{
//блокируем поле чтобы игрок не смог ходить
LoockPole();
//шаг ПК
PC_Step();
//пробуем разблокировать поле
UnloockPole();
}
else
{
panel4.Visible = true;
label3.Text = "Вы выиграли";
LoockPole();
}
}
}
}