Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильно объеденить эти два цикла?
 
 автор: pavluxa09   (23.06.2012 в 11:23)   письмо автору
 
 

Здравствуйте, уважаемые форумчане. Уже третий час пытаюсь объеденить эти два цикла, но что то голова вообще не варит. Помогите пожалуйста.

                 for( $iY = 0; $iY < $aGame['boardSize']; $iY++ ) {
            $aCounters = array( 0, 0, 0 );
            for( $iX = 0; $iX < $aGame['boardSize']; $iX++ )
                $aCounters[$aGame['board'][$iY][$iX]]++;
            if( $aCounters[1] >= $aGame['boardLength'] ) {
                $iWinner = 1;
                break;
            }
            else if( $aCounters[2] >= $aGame['boardLength'] ) {
                $iWinner = 2;
                break;
            }
        }
        for( $iX = 0; $iX < $aGame['boardSize']; $iX++ ) {
            $aCounters = array( 0, 0, 0 );
            for( $iY = 0; $iY < $aGame['boardSize']; $iY++ )
                $aCounters[$aGame['board'][$iY][$iX]]++;
            if( $aCounters[1] >= $aGame['boardLength'] ) {
                $iWinner = 1;
                break;
            }
            else if( $aCounters[2] >= $aGame['boardLength'] ) {
                $iWinner = 2;
                break;
            }
        }
               $aCounters = array( 0, 0, 0 );
        for( $i = 0; $i < $aGame['boardSize']; $i++ )
            $aCounters[$aGame['board'][$i][$i]]++;
        if( $aCounters[1] >= $aGame['boardLength'] )
            $iWinner = 1;
        else if( $aCounters[2] >= $aGame['boardLength'] )
            $iWinner = 2;
            
        $aCounters = array( 0, 0, 0 );
        for( $i = 0; $i < $aGame['boardSize']; $i++ )
            $aCounters[$aGame['board'][$aGame['boardSize'] - 1 - $i][$i]]++;
        if( $aCounters[1] >= $aGame['boardLength'] )
            $iWinner = 1;
        else if( $aCounters[2] >= $aGame['boardLength'] )
            $iWinner = 2;

  Ответить  
 
 автор: cheops   (23.06.2012 в 11:46)   письмо автору
 
   для: pavluxa09   (23.06.2012 в 11:23)
 

Эти два, это какие? Вот этот
for( $iY = 0; $iY < $aGame['boardSize']; $iY++ ) 
и этот
for( $iX = 0; $iX < $aGame['boardSize']; $iX++ ) {
Они по разным координатам идут?

  Ответить  
 
 автор: pavluxa09   (23.06.2012 в 15:50)   письмо автору
 
   для: cheops   (23.06.2012 в 11:46)
 

Получается не два а четыре, это логика определения победителя в игре Крестики нолики.

  Ответить  
 
 автор: cheops   (24.06.2012 в 07:04)   письмо автору
 
   для: pavluxa09   (23.06.2012 в 15:50)
 

И вы хотите свернуть матричные вычисления в один цикл? Можно конечно, но вам придется умножать размерность X на Y и вводить индекс вида I = RowX * Num + RowY... в общем, программа изрядно усложниться, хотя вероятно вы сможете увеличить скорость её работы (цель именно в этом?).

  Ответить  
 
 автор: pavluxa09   (24.06.2012 в 10:45)   письмо автору
 
   для: cheops   (24.06.2012 в 07:04)
 

Да, именно в этом

  Ответить  
 
 автор: cheops   (25.06.2012 в 07:30)   письмо автору
 
   для: pavluxa09   (24.06.2012 в 10:45)
 

Это проверка горизонтальных и вертикальных рядов? Тут в любом случае будет два набора циклов, я бы вообще все так и оставил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования