Open mikarru opened 6 years ago
原因は不明。現在調査中。
undoに失敗したタイルは40ターン目のタイル(左リップ)。 動画でいうとこの場面。
undoに失敗した原因は、undo内の色々な処理の順番が、タイルを置くときに行った処理の正確な逆になっていなかったから。
詳細: 40ターン目に配置したタイル(K)の下側にあるFieldRegionをf0、上側にあるFieldRegionをf1、タイルKのインデックスが0のFieldSegment(小さい方の草原)をs0、タイルKのインデックスが1のFieldSegmentをs1とする。 タイルを配置するときは
という順番で処理されるけど、undoするときはs0のaddSegmentを最初にundoしようとしていて
Region* r = s0->getRegion(); // = f1
r->undoAddSegment(s0); // 上手く行かない
というように、上手く行かなかった。
make && ./carcassonne
を実行すると再現できるifdef DEBUG
const GameContext* context = board.getGameContext(); int red_point = context->getTotalPoint(MeepleColor::RED);