|
|
|
| Здравствуйте, уважаемые пользователи. Облазил весь гугл но не смог найти готового ответа на мой вопрос. У меня имеется двумерный массив (игровое поле), у которого длина и выноса одинаковые, но при этом они динамические (могут иметь размер от 3 до n) клеток. Стоит условие, если размер поля > 4, то нужно собрать 4 одинаковых значка подрядидущих, иначе 3. В массиве храняться значения 0 1 и 2, соответственно 1 - крестик 2 - нолик.
Помогите пожалуйста как определить подряд идущие элементы в массиве и решить задачу. | |
|
|
|
|
|
|
|
для: pavluxa09
(23.06.2012 в 18:42)
| | у которого длина и выноса одинаковые
===================================
это что? | |
|
|
|
|
|
|
|
для: elenaki
(23.06.2012 в 19:03)
| | количество строк равно количеству столбцов | |
|
|
|
|
|
|
|
для: pavluxa09
(23.06.2012 в 19:28)
| | если б было "длина и высота", не было б вопроса. а на каком языке "длина и выноса"?
на белорусском? | |
|
|
|
|
|
|
|
для: pavluxa09
(23.06.2012 в 18:42)
| | Обходите каждую крестик/нолик и проверяйте его окружение по горизонтали, вертикали и диагонали. Игровую матрицу можно рассматривать как координатную сетку, координаты диагональных, вертикальных и горизонтальных элементов легко вычислить. | |
|
|
|
|
|
|
|
для: cheops
(24.06.2012 в 07:08)
| | Это было бы удобно, если бы у меня количество подрядидущих элементов для выигрыша было фиксированное, а оно переменное | |
|
|
|
|
|
|
|
для: pavluxa09
(24.06.2012 в 10:48)
| | На момент обхода вам же известно необходимое количество подряд идущих элементов? Просто оформите проверку в виде функции, которая принимает в качестве параметра это количество, тогда проверка будет сводится к предварительному вычислению количества элементов и к вызову проверочной функции с передачей параметра. | |
|
|
|
|
|
|
|
для: cheops
(25.06.2012 в 07:43)
| | У меня имеется двумерный массив, который состоит из 0 1 2, где 0 - пустая ячейка , 1 - крестик, 2 - нолик. Я уже сделал что бы оно проверяло вертиаль и горизонталь вот таким вот образом :
$aGame['board'] - двумерный массив пропущенный через json_encode
$sWinCombination = implode( ',', array_fill( 0, $aGame['boardLength'], $aGame['whoseAction'] ) );
if( strpos( $aGame['board'], $sWinCombination ) !== false )
$iWinner = $aGame['whoseAction'];
else {
$aGame['board'] = json_decode( $aGame['board'] );
array_unshift( $aGame['board'], null );
$aGame['board'] = call_user_func_array( "array_map", $aGame['board'] );
$aGame['board'] = json_encode( $aGame['board'] );
if( strpos( $aGame['board'], $sWinCombination ) !== false )
$iWinner = $aGame['whoseAction'];
# По диалоганали
else if( strpos( $aGame['board'], '0' ) === false )
$iWinner = 0;
}
|
Не как не могу сообразить по диагоналям (
Может есть у кого-то готовый пример где поле не фиксиованное в размерах и тоже основано на двумерном массиве? | |
|
|
|
|
|
|
|
для: pavluxa09
(25.06.2012 в 19:52)
| | UP | |
|
|
|
|
|
|
|
для: pavluxa09
(29.06.2012 в 11:45)
| |
function determineWinner( array & $aArray, $iDigitsCount ) {
# Получение размера матрицы :
$iSize = count( $aArray );
# Проверка значений аргументов :
if( $iSize < $iDigitsCount )
return -2;
for( $i = 0; $i < $iSize; $i++ )
if( count( $aArray[0] ) != $iSize )
return -3;
$iResult = -1;
/* Поиск победителя по горизонтали */
$sArray = json_encode( $aArray );
if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
/* Поиск победителя по вертикали */
if( $iResult == -1 ) {
$aTmpArray = array();
foreach( $aArray as $i => $js )
foreach( $js as $j => $value )
$aTmpArray[$j][$i] = $value;
$sArray = json_encode( $aTmpArray );
if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
}
/* Поиск победителя по диагонали */
if( $iResult == -1 ) {
$aBasicDiagonals = array();
for( $i = 0; $i < $iSize * 2 - 1; $i++ ) {
$aBasicDiagonal = array();
if( $i < $iSize )
for( $j = 0; $j < $i + 1; $j++ )
$aBasicDiagonal[] = $aArray[$i - $j][$j];
else
for( $j = 0; $j < $iSize * 2 - $i - 1; $j++ )
$aBasicDiagonal[] = $aArray[$i - $j - ($i - $iSize + 1)][$i - $iSize + $j + 1];
$aBasicDiagonals[] = $aBasicDiagonal;
}
$aBasicDiagonals = json_encode( $aBasicDiagonals );
if( strpos( $aBasicDiagonals, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $aBasicDiagonals, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
}
/* Поиск победителя по побочной диагонали */
if( $iResult == -1 ) {
for( $i = 0; $i < $iSize; $i++ )
for( $j = 0; $j < $iSize; $j++ )
$aTmpArray[$iSize - $j - 1][$i] = $aArray[$i][$j];
$aIncidentalDiagonals = array();
for( $i = 0; $i < $iSize * 2 - 1; $i++ ) {
$aIncidentalDiagonal = array();
if( $i < $iSize )
for( $j = 0; $j < $i + 1; $j++ )
$aIncidentalDiagonal[] = $aTmpArray[$i - $j][$j];
else
for( $j = 0; $j < $iSize * 2 - $i - 1; $j++ )
$aIncidentalDiagonal[] = $aTmpArray[$i - $j - ($i - $iSize + 1)][$i - $iSize + $j + 1];
$aIncidentalDiagonals[] = $aIncidentalDiagonal;
}
$aIncidentalDiagonals = json_encode( $aIncidentalDiagonals );
if( strpos( $aIncidentalDiagonals, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $aIncidentalDiagonals, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
}
/* Может это ничья? */
if( $iResult == -1 ) {
$bHaveZeros = false;
for( $i = 0; $i < $iSize; $i++ ) {
for( $j = 0; $j < $iSize; $j++ ) {
if( $aArray[$i][$j] == 0 ) {
$bHaveZeros = true;
break;
}
}
}
if( $bHaveZeros == false )
$iResult = 0;
}
return $iResult;
}
|
| |
|
|
|