Алгоритм проверки выйгрыша в крестиках-ноликах

grek72

что-то не получается красивый сабж написать.
подскажите, как это сделать, если игровое поле - не динамический двумерный массив 15х15.

Vladislav177Rus

Пройтись по строкам, затем по столбцам, затем по диагоналям в поисках 5 подряд стоящих одинаковых символов?

vall

ну заводишь 15*15*4 - длина линии начинающейся в этой клетке по четрём направлениям - влево вверх влево-вверх вправо-вверх.
а ну а дальше один проход и тривиальный подсчёт.
для простоты конечно стоит сделать 16*16 — добавить пустых клеток с вух сторон.
можно сделать 16*16*4*2 ещё отдельно для крестиров ноликов подсчитать, тогда пересчёт будет совсем тривиальным без заглядывания на соседние клетки поля

grek72

ну да ...
только слишком много if-ов и for-ов получается, если не хочешь ArrayIndexOutOfBounds exception получить(язык - java).

Vladislav177Rus

Откуда там вообще ArrayIndexOutOfBounds? В качестве границ цикла указать границы самого поля
Проход по строке, например
cx = 1; cs = a[i][0]
for(int j = 1; j < 15; j++){
if(a[i][j] == cs){
cx++;
} else{
cs = a[i][j]; cx = 1;
}
if(cx == 5) return "YES!";
}

grek72

мда, затупил я.
большое спасибо!

durka82

Еще можно хранить вместе/вместо сами х-элементные элементы.
Тогда проверка очевидна - как только появится 5-элементный набор.
Наверное это даже работать будет быстрее, только вот программить такое сложнее.
Оставить комментарий
Имя или ник:
Комментарий: