summaryrefslogtreecommitdiff
path: root/quackleio
diff options
context:
space:
mode:
Diffstat (limited to 'quackleio')
-rw-r--r--quackleio/gcgio.cpp11
-rw-r--r--quackleio/util.cpp7
2 files changed, 15 insertions, 3 deletions
diff --git a/quackleio/gcgio.cpp b/quackleio/gcgio.cpp
index 483678b..b60d57c 100644
--- a/quackleio/gcgio.cpp
+++ b/quackleio/gcgio.cpp
@@ -143,6 +143,7 @@ Quackle::Game *GCGIO::read(QTextStream &stream, int flags)
gameStarted = true;
}
+ UVString currentPlayer = Util::qstringToString(strings.front().mid(1, strings.front().size() - 2));
strings.pop_front();
if (strings.isEmpty())
@@ -158,10 +159,11 @@ Quackle::Game *GCGIO::read(QTextStream &stream, int flags)
if (rackString.startsWith("(") && rackString.endsWith(")"))
{
// end the game
- if (ret->hasPositions())
+ if (ret->hasPositions() && !ret->currentPosition().gameOver())
ret->commitCandidate(canMaintainCrosses);
else
ret->addPosition();
+ ret->currentPosition().setTileBonus(currentPlayer, Util::encode(rackString.mid(1, rackString.size() - 2)), strings.front().toInt());
continue;
}
@@ -359,11 +361,14 @@ void GCGIO::write(const Quackle::Game &game, QTextStream &stream)
outputScoreAddition = 0;
}
- stream << ">" << Util::uvStringToQString((*it).currentPlayer().abbreviatedName()) << ": " << Util::letterStringToQString((*it).currentPlayer().rack().alphaTiles()) << " " << Util::uvStringToQString(move.toString()) << " +" << outputScore << " " << outputScore + (*it).currentPlayer().score() << endl;
+ QString rackString = Util::letterStringToQString((*it).currentPlayer().rack().alphaTiles());
+ if (move.action == Quackle::Move::UnusedTilesBonusError)
+ rackString = QString();
+ stream << ">" << Util::uvStringToQString((*it).currentPlayer().abbreviatedName()) << ": " << rackString << " " << Util::uvStringToQString(move.toString()) << " +" << outputScore << " " << outputScore + (*it).currentPlayer().score() << endl;
if (move.isChallengedPhoney())
{
- stream << ">" << Util::uvStringToQString((*it).currentPlayer().abbreviatedName()) << ": " << Util::letterStringToQString((*it).currentPlayer().rack().alphaTiles()) << " -- -" << outputScore << " " << move.effectiveScore() + (*it).currentPlayer().score() << endl;
+ stream << ">" << Util::uvStringToQString((*it).currentPlayer().abbreviatedName()) << ": " << rackString << " -- -" << outputScore << " " << move.effectiveScore() + (*it).currentPlayer().score() << endl;
}
if (outputScoreAddition != 0)
diff --git a/quackleio/util.cpp b/quackleio/util.cpp
index 901c65e..774dcad 100644
--- a/quackleio/util.cpp
+++ b/quackleio/util.cpp
@@ -59,8 +59,11 @@ QString Util::moveToDetailedString(const Quackle::Move &move)
ret = QObject::tr("Exch. %1").arg(move.tiles().length());
break;
+ case Quackle::Move::UnusedTilesBonusError:
case Quackle::Move::UnusedTilesBonus:
ret = QObject::tr("2*(%1)").arg(letterStringToQString(Util::alphagram(move.usedTiles())));
+ if (move.action == Quackle::Move::UnusedTilesBonusError)
+ ret += " [Endgame Error]";
break;
case Quackle::Move::TimePenalty:
@@ -72,6 +75,7 @@ QString Util::moveToDetailedString(const Quackle::Move &move)
break;
case Quackle::Move::Place:
+ case Quackle::Move::PlaceError:
ret = uvStringToQString(move.positionString()) + " ";
ret += prettyTiles;
@@ -81,6 +85,9 @@ QString Util::moveToDetailedString(const Quackle::Move &move)
if (move.isChallengedPhoney())
ret = QObject::tr("%1 [Challenged Off]").arg(ret);
+ if (move.action == Quackle::Move::PlaceError)
+ ret += " [Endgame Misdraw]";
+
break;
}