Вход

Просмотр полной версии : Видимость тайлов строки, столбца


Alexey25
16.07.2016, 17:02
Помогите решить одну проблему. Я создаю поле как показано на рисунке.
32251
Делаю видимость поля с помощью alpha 20 %. При щелчке на любом тайле поля если этот тайл в массиве равен единицы. То видимость становится 100 %. Единица превращается в двойку. Как сделать так, чтобы по горизонтале если все тайлы определенной строки (там где раньше была единица стала двойка в массиве) alpha равны 100 %. То все тайлы этой строки автоматически становились alpha 100 %. Пример:
32252
То же самон и со столбцами если все тайлы столбца где в массиве двойка, alpha равны 100 %. То все тайлы столбца становились alpha 100 %.
32253
Функция test_full у меня уже есть где бы происходили проверки на заполненность тайлов. Но как её написать не знаю. Внизу представлен весь код.


var level = [[0,1,0,0,0,1,0],
[0,1,0,0,1,1,1],
[0,1,0,0,1,1,1],
[1,1,1,0,1,1,1],
[1,1,1,1,1,1,1],
[1,1,1,1,1,1,1],
[1,1,1,1,1,1,1],
[1,1,1,0,1,1,1],
[0,1,1,0,1,1,1],
[0,0,0,0,1,1,1],
[0,0,0,0,1,1,1],
[0,0,0,0,1,1,1],
[0,0,0,0,0,1,0]];

function pole()
{
for (var i= 0; i < level.length; ++i)
{
for (var j = 0; j < level[i].length; ++j)
{
_root.attachMovie("tile","t"+i+"_"+j,_root.getNextHighestDepth());
_root["t"+i+"_"+j]._alpha = 20;
_root["t"+i+"_"+j].idi = i;
_root["t"+i+"_"+j].idj = j;
_root["t"+i+"_"+j].onPress = onP;
_root["t"+i+"_"+j]._x = 200+20*i;
_root["t"+i+"_"+j]._y = 200+20*j;
}
}
}

function onP()
{
if(level[this.idi][this.idj] == 1)
{
level[this.idi][this.idj] = 2;
this._alpha = 100;
}

test_full(this.idi,this.idj);

}

function test_full(idi, idj)
{

}
pole();

dark256
17.07.2016, 01:36
Амммм........
Я бы так выразился....
Насколько бессвязна речь и постановка задачи, настолько сложно этот сумбур алгоритмизировать.
Сведите свои высказывания в 2-3 фразы с минимумом слов и получится алгоритм ;)

Некий хинт:


var aTile = _root.attachMovie("tile","t"+i+"_"+j,_root.getNextHighestDepth());
aTile._alpha = 20;
aTile.idi = i;
aTile.idj = j;
aTile.onPress = onP;
aTile._x = 200+20*i;
aTile._y = 200+20*j;

Alexey25
17.07.2016, 09:50
Я решил посмотреть в интернете похожие примеры, чтобы лучше объяснить, что я хочу и нашел пример японских кроссвордов вот он http://static.nonograms.ru/i/tutorial_04.png. Как видно из рисунка в первой строке есть один квадрат который надо закрасить если в этой строке больше нет квадратов, которые надо закрасить в черный цвет, то все соседние квадраты ставятся крестики. У меня тоже самое в массиве есть единицы. При щелчке единицы становятся двойками. И нужно сделать проверку в строке. Если в строке одни двойки то вся строка должна стать alpha 100 %. Весь код предоставлен в первом посте.

dark256
17.07.2016, 10:59
Не понял, в чем у вас таки проблема :)
Подсчитать кол-во двоек в столбце или строке и сравнить это кол-во с длинной столбца-строки? :)


function test_full( _i, _j ){

var testRow = 0
for (var j = 0; j < level[_i].length; j++ ) if ( level[_i][j] == 2 ) testRow++
if ( testRow == level[_i].length ){
for (var j = 0; j < level[_i].length; j++){ _root[ "t"+_i+"_"+j ]._alpha = 100 }
}

var testCol = 0
for (var i = 0; i < level.length; i++) if ( level[i][_j] == 2 ) testCol++
if ( testCol == level.length ){
for (var i = 0; i < level.length; i++){ _root[ "t"+i+"_"+_j ]._alpha = 100 }
}
}

Alexey25
17.07.2016, 15:31
Более менее разобрался. Теперь нужно посчитать сколько в каждой строчке единичек и записать этот результат в массив например в массиве level видно, что там 7 строк в каждой строке присутствуют единицы и в итоге должно быть записано 7 элементов в массив. var countCol = [5,9,6,3,11,12,11]; примерно так. Подскажите пожалуйста как это сделать?

dark256
20.07.2016, 10:04
Собственно точно так же.
Сравниваете не с 2 а с 1 и newArray[i][j] = сколько насчитано единичек