[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