sash2104 / carcassonne

An AI for carcassonne
0 stars 0 forks source link

undoのバグ #14

Open mikarru opened 6 years ago

mikarru commented 6 years ago
mikarru commented 6 years ago

原因は不明。現在調査中。

mikarru commented 6 years ago

undoに失敗したタイルは40ターン目のタイル(左リップ)。 動画でいうとこの場面

undoに失敗した原因は、undo内の色々な処理の順番が、タイルを置くときに行った処理の正確な逆になっていなかったから。

詳細: 40ターン目に配置したタイル(K)の下側にあるFieldRegionをf0、上側にあるFieldRegionをf1、タイルKのインデックスが0のFieldSegment(小さい方の草原)をs0、タイルKのインデックスが1のFieldSegmentをs1とする。 タイルを配置するときは

  1. f0.addSegment(s0)
  2. f1.addSegment(s1)
  3. f1.mergeRegion(f0)

という順番で処理されるけど、undoするときはs0のaddSegmentを最初にundoしようとしていて

Region* r = s0->getRegion(); // = f1
r->undoAddSegment(s0); // 上手く行かない

というように、上手く行かなかった。