![]() |
Acting on a Line of components - Printable Version +- Ludii Forum (https://ludii.games/forums) +-- Forum: Questions (https://ludii.games/forums/forumdisplay.php?fid=13) +--- Forum: About the Ludii Grammar (https://ludii.games/forums/forumdisplay.php?fid=15) +--- Thread: Acting on a Line of components (/showthread.php?tid=106) |
Acting on a Line of components - ccxvii - 08-04-2020 I'm trying to implement Yinsh. I can't quite figure out how to act on the detected line of components. I can detect a line anywhere on the board with some difficulty: (if (is Line 5 throughAny:(sites Occupied by:P1) what:(id "Disc1")) The throughAny argument has to be there, or it will only detect lines going through the (last To) location by my experimentation (again, a lack of source code to the core Ludii ludemes, and the rather bare bones documentation means a lot of trial and error in figuring these things out, and this seems to be uncharted territory so the existing game files aren't much help). Puzzlingly enough, throughAny:(sites All) doesn't work! Now for the trickier bit -- I have to remove the pieces that form the line. Is there any way to get a list of the sites that form the line for passing to (remove)? I've tried this to no effect (thinking I could filter out all sites that have a line of 5 going through them). (remove (forEach (sites Occupied by:P1) if:(is Line 5 through:(site) what:(id "Disc1")))) P.S. Can you make "Disable Smilies" the default for the forum, given how often Ludii code is quoted here. RE: Acting on a Line of components - MatthewStephenson - 08-04-2020 Thanks for the suggestion! "Disable Smiles" should now be selected by default. RE: Acting on a Line of components - cambolbro - 08-04-2020 Hi, Your suggested approach makes sense: (remove (forEach (sites Occupied by:P1) if:(is Line 5 through:(site) what:(id "Disc1")))) but maybe phrased differently, e.g. (forEach Site (sites Occupied by:Mover) if:(is Line 5 through:(site)) (remove (site))) assuming that the removals are done at the end of the turn. If not, then the (forEach Site ...) could set a pending value for the relevant sites and a subsequent move could be made to empty all pending sites. Or maybe a formulation of (forEach Piece ...)? Eric who wrote that code is back next week, he may be able to advise further. Regards, Cameron |