А теперь к делу. Есть программа для игры в крестики нолики. Есть алгоритм сравнения строчек на соотвествие символа 'X' и установки символа 'O' так чтоб не получалось три в ряд/диагональ. Сам он выглядит так:
Код:
if(s1[2]==s1[1]||s2[0]==s3[0]||s3[2]==s2[1])
if(k1==false) {s1[0]='O'; k1=true; return false;}
if(s2[1]==s3[1])
if(k2==false) {s1[1]='O'; k2=true; return false;}
if(s1[0]==s1[1]||s2[2]==s3[2]||s3[0]==s2[1])
if(k3==false) {s1[2]='O'; k3=true; return false;}
if(s2[1]==s2[2])
if(k4==false) {s2[0]='O'; k4=true; return false;}
if(s2[0]==s2[1])
if(k6==false) {s2[2]='O'; k6=true; return false;}
if(s3[2]==s3[1]||s1[2]==s2[1]||s1[0]==s2[0])
if(k7==false) {s3[0]='O'; k7=true; return false;}
if(s1[1]==s2[1])
if(k8==false) {s3[1]='O'; k8=true; return false;}
if(s1[2]==s2[2]||s3[0]==s3[1]||s1[0]==s2[1])
if(k9==false) {s3[2]='O'; k9=true; return false;}
В чем собственно проблема. После выбора таких клеток: 1, 2, 4, 5, 9, он почему-то не ставит символ 'O' в клетку 8, а ставит почему-то в 1. Вот лог игры:
Код:
X|2|3
-----
4|5|6
-----
7|8|9
X|2|3
-----
X|5|6
-----
O|8|9
X|2|3
-----
X|X|O
-----
O|8|9
O|2|3
-----
X|X|O
-----
O|8|X
Вопрос: Почему он не ставит в клетку 8? Я уже этот алгоритм кучу раз прочитал, пару раз переписал, но эффект тот-же.
Вообщем я решил проблему добавим проверку "свободности клеток", но если кому не лень, то я бы все-таки хотел бы узнать почему она(программа) так работала.
Вообщем я додумался. Как раз без проверки клеток, он и делал что первое по списку. Как говориться: "Если хочешь что-то спрятать, положи это на самое видное место".