Крестики-нолики (Алгоритм проверки)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

Крестики-нолики

Сообщение BratSinot »

Доброе утро, день, вечер, ночь. Для начала поздравлю все с наступающим новым годом.
А теперь к делу. Есть программа для игры в крестики нолики. Есть алгоритм сравнения строчек на соотвествие символа '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? Я уже этот алгоритм кучу раз прочитал, пару раз переписал, но эффект тот-же.

Вообщем я решил проблему добавим проверку "свободности клеток", но если кому не лень, то я бы все-таки хотел бы узнать почему она(программа) так работала.

Вообщем я додумался. Как раз без проверки клеток, он и делал что первое по списку. Как говориться: "Если хочешь что-то спрятать, положи это на самое видное место".
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали: