[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/backgammon
From:       Dmitry Vladimirovich Chernov <diman4ik.chernov () gmail ! com>
Date:       2011-07-01 8:40:30
Message-ID: 20110701084031.0385CAC7E9 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1238999 by dmitryvchernov:

now you can watch other player's games on FIBS

 M  +75 -6     backgammonscene.cpp  
 M  +73 -1     games/backgammon/fibs/backgammon_fibs.cpp  
 M  +3 -0      games/backgammon/fibs/backgammon_fibs.h  
 M  +0 -7      games/backgammon/fibs/clip.cpp  
 M  +5 -1      games/backgammon/fibs/fibs_widget.cpp  
 M  +1 -0      games/backgammon/fibs/fibs_widget.h  
 M  +0 -1      historywidget.h  
 M  +2 -0      mainwindow.cpp  


--- trunk/playground/games/backgammon/backgammonscene.cpp #1238998:1238999
@@ -415,8 +415,8 @@
         cellTo++;
         const int n = token.toInt();
         
-        kDebug() << "cellTo = " << cellTo << " n = " << n;
-        kDebug() << "Board::numberOfCheckersAt(cellTo) = " << \
Board::numberOfCheckersAt(cellTo); +        //kDebug() << "cellTo = " << cellTo << " \
n = " << n; +        //kDebug() << "Board::numberOfCheckersAt(cellTo) = " << \
Board::numberOfCheckersAt(cellTo);  
         if( Board::numberOfCheckersAt(cellTo) == 0 )
         {
@@ -437,8 +437,8 @@
         }
         else
         {
-            kDebug() << "Board::cellColor(cellTo) " << Board::cellColor(cellTo);
-            kDebug() << "Board::cellColor(cellTo)*n " << Board::cellColor(cellTo)*n;
+            //kDebug() << "Board::cellColor(cellTo) " << Board::cellColor(cellTo);
+            //kDebug() << "Board::cellColor(cellTo)*n " << \
Board::cellColor(cellTo)*n;  
             if( Board::cellColor(cellTo)*n < 0 )
             {
@@ -510,10 +510,79 @@
         }
     }
     
-    kDebug() << froms_white.size();
+    QVector< QPair<int, int> > moves;
     
+    int iter = 0;
+    
+    while( ( froms_white.size() > 0  ) || ( froms_red.size() > 0 ) )
+    {
+        if( iter++ == 100 )
+        {
+            kDebug() << "toooo long";
+            break;
+        }
+        
     for( int i = 0; i < froms_white.size(); ++i )
     {
+            int length = 50;
+            int to_index = -1;
+            int from = froms_white[i];
+            int to = 0;
+            
+            for( int k = 0; k < tos_white.size(); ++k )
+            {
+                if( qAbs( tos_white[k] - from ) < length )
+                {
+                    length = qAbs( tos_white[k] - from );
+                    to_index = k;
+                    to = tos_white[ to_index ];
+                }
+            }
+            
+            if( froms_red.indexOf( to ) == -1 )
+            {
+                froms_white.remove(i);
+                tos_white.remove( to_index );
+                moves.push_back( { from, to } );
+            }
+        }
+        
+        for( int i = 0; i < froms_red.size(); ++i )
+        {
+            int length = 50;
+            int to_index = -1;
+            int from = froms_red[i];
+            int to = 0;
+            
+            for( int k = 0; k < tos_red.size(); ++k )
+            {
+                if( qAbs( tos_red[k] - from ) < length )
+                {
+                    length = qAbs( tos_red[k] - from );
+                    to_index = k;
+                    to = tos_red[ to_index ];
+                }
+            }
+            
+            if( froms_white.indexOf( to ) == -1 )
+            {
+                froms_red.remove(i);
+                tos_red.remove( to_index );
+                moves.push_back( { from, to } );
+            }
+        }
+    }
+
+    for( int i = 0; i < moves.size(); ++i )
+    {
+        kDebug() << moves[i].first << " : " << moves[i].second;
+        moveChecker( moves[i].first, moves[i].second );
+    }
+    
+    /*kDebug() << froms_white.size();
+    
+    for( int i = 0; i < froms_white.size(); ++i )
+    {
         kDebug() << froms_white[i] << " " << tos_white[i];
         moveChecker( froms_white[i], Board::home( Checker::White ) );
     }
@@ -536,8 +605,8 @@
     for( int i = 0; i < tos_red.size(); ++i )
     {
         moveChecker( Board::home( Checker::Black ), tos_red[i] );
+    }*/
     }
-}
 
 void BackgammonScene::collectCheckers()
 {
--- trunk/playground/games/backgammon/games/backgammon/fibs/backgammon_fibs.cpp \
#1238998:1238999 @@ -88,6 +88,7 @@
                     getMyOwnInfo(line);
                     
                     emit( serverString( "set boardstyle 3" ) );
+                    emit( playerNames( "  ", getYou().name() ) );
                     continue;
                 }
                 break;
@@ -191,6 +192,10 @@
             case Clip::patternInGameYouInvitedReload:
                 {
                     kDebug() << "you are now playing";
+                    
+                    if( m_watchMode )
+                        m_watchMode = false;
+                    
                     line.replace( "** ", "" );
                     
                     kDebug() << line;
@@ -299,19 +304,31 @@
                     Rolls got_roll = getRolls( line );
                     setDice( got_roll );
 
+                    if( !m_watchMode )
+                    {
                     emit( gameEvent( getOpponent().name() + i18n( " rolls" ) + 
                           QString::number( got_roll.first ) + ":" + QString::number( \
got_roll.second ) ) );  
                     resetDice();
                 }
+                    else
+                    {
+                        gameEvent( getFirstWord( line ) + i18n( " rolls" ) + 
+                            QString::number( got_roll.first ) + ":" + \
QString::number( got_roll.second ) ); +                    }
+                }
                 break;
             case Clip::patternOpponentFirst:
+                if( !m_watchMode )
                 emit( engineMessage( i18n("Opponent makes first move") ) );
                 break;
             case Clip::patternOpponentMove:
                 {
                     kDebug() << "opponent move";
+                    if( !m_watchMode )
                     getOpponentMove( line );
+                    else
+                        getWatchMove(line);
                 }
                 break;
             case Clip::patternOpponentDoubles:
@@ -327,12 +344,28 @@
                 emit( serverInfo(line) );
                 break;
             case Clip::patternYouWin:
+                if( !m_watchMode )
+                {
                 emit( serverInfo(line) );
                 emit( engineMessage( i18n("You won the game") ) );
+                }
+                else
+                {
+                    emit( serverInfo(line) );
+                    emit( engineMessage(line) );
+                }
                 break;
             case Clip::patternYouLost:
+                if( !m_watchMode )
+                {
                 emit( serverInfo(line) );
                 emit( engineMessage( i18n("You lost the game") ) );
+                }
+                else
+                {
+                    emit( serverInfo(line) );
+                    emit( engineMessage(line) );                    
+                }
                 break;
             case Clip::patternMatchLength:
                 break;
@@ -351,7 +384,12 @@
                 emit( serverInfo(line) );
                 break;
             case Clip::patternStartWatch:
+                {
                 emit( serverInfo(line) );
+                    m_watchMode = true;
+                    emit( serverString( "board" ) );
+                    emit( clearHistory() );
+                }
                 break;
             case Clip::patternStopWatch:
                 emit( serverInfo(line) );
@@ -366,6 +404,7 @@
                 }
                 break;
             case Clip::patternYouCantMove:
+                if( !m_watchMode )
                 emit( engineMessage( i18n( "You can't move" ) ) );
                 break;
             case Clip::patternResign:
@@ -675,6 +714,30 @@
     switchToState( Roll );
 }
 
+void BackgammonFibs::getWatchMove( const QString& line )
+{
+    QString name = getFirstWord(line);
+    
+    int name_end = line.indexOf( " " );
+    
+    int moves_beg = name_end + 7;
+    
+    QStringList moves = line.mid( moves_beg ).split( " " );
+    
+    QVector<Move> moves_parsed;
+    
+    for( int i = 0; i < moves.length(); ++i )
+    {
+        Move move = getMoveFromStr( moves[i] );
+        
+        if( move.src != move.dst )      // TODO: Smthin like move legal?
+        {
+            moves_parsed.append( move );
+            gameEvent( name + i18n( " moves " ) + moves[i] );
+        }
+    }    
+}
+
 Move BackgammonFibs::getMoveFromStr( const QString& line_part )
 {
     int dash_ind = line_part.indexOf("-");
@@ -765,7 +828,7 @@
     
     Q_UNUSED(board);
     
-    if( !m_yourTurn )
+    if( !m_yourTurn || m_watchMode )
         return;
     
     IPlayer& player = getYou();
@@ -1065,6 +1128,8 @@
     
     showField();
     
+    if( !m_watchMode )
+    {
     if( m_yourTurn && ( getFirstDie() == -1 ) )
     {
         if( your_roll.first != 0 )
@@ -1078,7 +1143,9 @@
             switchToState( Roll );
         }
     }
+    }
     
+    emit( playerNames( player2Name, player1Name ) );    
     emit( playerScores( opponent_score, player_score ) );
     
     Q_UNUSED( match_length );
@@ -1325,6 +1392,11 @@
     emit( serverString( QString( "blind " ) + name ) );
 }
 
+void BackgammonFibs::watch( const QString& name )
+{
+    emit( serverString( QString( "watch " ) + name ) );
+}
+
 void BackgammonFibs::join()
 {
     emit( serverString( "join" ) );
--- trunk/playground/games/backgammon/games/backgammon/fibs/backgammon_fibs.h \
#1238998:1238999 @@ -113,6 +113,7 @@
     void invite( const QString& name, int length );
     void join( QString name );
     void blind( const QString& name );
+    void watch( const QString& name );
     
     void say( const QString& say );
     void kibitz( const QString& kibitz );
@@ -212,6 +213,7 @@
     void getWhoInfo( const QString& line );
     void getInvite( const QString& line );
     void getOpponentMove( const QString& line );
+    void getWatchMove( const QString& line );
     Move getMoveFromStr( const QString& line_part );
     void getRoll( const QString& line );
     Rolls getRolls( const QString& line );
@@ -220,6 +222,7 @@
     void readBoardStyle3( const QString& line );
     
     bool m_yourTurn;
+    bool m_watchMode;
     
     IPlayer& getYou() const
     {   return *m_players[0];    }
--- trunk/playground/games/backgammon/games/backgammon/fibs/clip.cpp #1238998:1238999
@@ -49,7 +49,6 @@
     str_patternYouShouts        = QRegExp( pattern.sprintf( "^%d ", CLIP_YOU_SHOUT ) \
                );
     str_patternYouWhispers      = QRegExp( pattern.sprintf( "^%d ", CLIP_YOU_WHISPER \
                ) );
     str_patternYouKibitzes      = QRegExp( pattern.sprintf( "^%d ", CLIP_YOU_KIBITZ \
                ) );
-    //str_patternUnknown          = QRegExp( pattern.sprintf( "^%s ", "**" ) );
     str_patternLogins           = QRegExp( pattern.sprintf( "^%d ", CLIP_LOGIN ) );
     str_patternLogouts          = QRegExp( pattern.sprintf( "^%d ", CLIP_LOGOUT ) ); \
  str_patternInviteConfirm    = QRegExp( "You invited" );
@@ -61,17 +60,11 @@
     str_patternMatchBegin4      = QRegExp( "^\\*\\* You are now playing an unlimited \
match with " );  str_patternYourTurn         = QRegExp( "^It's your turn" );
     str_patternPleaseMove       = QRegExp( "^Please move" );
-    //m_patternBoard            = QRegExp( "^board:" );
-    /*m_patternGamesBeg1        = QRegExp("start a [0-9]+ point match");
-    m_patternGamesBeg2        = QRegExp("start an unlimited match");*/
     str_patternGameBegin        = QRegExp( "^Starting a new game with " );
     
-    //m_patternGamesRes1        = QRegExp( "are resuming their [0-9]+-point match" \
                );
-    //m_patternGamesRes2        = QRegExp( "are resuming their unlimited match" );
     str_patternBoardBegin       = QRegExp( "^   +" );
     str_patternBoardEnd         = QRegExp( "^   BAR" );
     str_patternBoard            = QRegExp( "^board" );
-    //m_patternRoll             = 
     
     str_patternInviteResume     = QRegExp( " wants to resume a saved match with you" \
                );
     str_patternInvitePlay       = QRegExp( " wants to play a [0-9]+ point match with \
                you" );
--- trunk/playground/games/backgammon/games/backgammon/fibs/fibs_widget.cpp \
#1238998:1238999 @@ -351,6 +351,7 @@
     menu.addAction( "tell" );
     menu.addAction( "message" );
     menu.addAction( "blind" );
+    menu.addAction( "watch" );
     
     connect( &menu, SIGNAL( triggered( QAction* ) ), SLOT( fibsPlayerListMenu( \
QAction* ) ) );  
@@ -392,10 +393,13 @@
     }   
     else if( action->text().compare( "blind" ) == 0 )
     {
-        kDebug() << "blind " << name;
         emit( blind( name ) );
     }
+    else if( action->text().compare( "watch" ) == 0 )
+    {
+        emit( watch(name) );
 }
+}
 
 void FibsWidget::chat( int, const QString& string )
 {
--- trunk/playground/games/backgammon/games/backgammon/fibs/fibs_widget.h \
#1238998:1238999 @@ -116,6 +116,7 @@
     void whisper( const QString& txt );
     
     void blind( const QString& name );
+    void watch( const QString& name );
     
 private:
     Ui::Dialog m_ui;    
--- trunk/playground/games/backgammon/historywidget.h #1238998:1238999
@@ -56,7 +56,6 @@
     QListWidget *m_historyView;
     QLabel* m_shit;
     QWidget* m_widget;
-    //QWidget* m_playerInfoWidget;
     QBoxLayout* m_layout;
 };
 
--- trunk/playground/games/backgammon/mainwindow.cpp #1238998:1238999
@@ -77,6 +77,7 @@
     // tell the KXmlGuiWindow that this is indeed the main widget
     QTabWidget* tw = new QTabWidget(this);
     setCentralWidget(tw);
+    //setCentralWidget(mainWid);
     
     tw->addTab( mainWid, "Game" );
     m_fibsWidget = new FibsWidget(this);
@@ -295,6 +296,7 @@
     connect( m_fibsWidget, SIGNAL( kibitz( const QString& ) ), ret, SLOT( kibitz( \
                const QString& ) ) );
     connect( m_fibsWidget, SIGNAL( whisper( const QString& ) ), ret, SLOT( whisper( \
                const QString& ) ) );
     connect( m_fibsWidget, SIGNAL( blind( const QString& ) ), ret, SLOT( blind( \
const QString& ) ) ); +    connect( m_fibsWidget, SIGNAL( watch( const QString& ) ), \
ret, SLOT( watch( const QString& ) ) );  
     connect( ret, SIGNAL( serverInfo( QString ) ), m_fibsWidget, SLOT( info( QString \
) ) );  


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic