[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-games-devel
Subject:    Re: Fixes for KPat Forty & Eight patience game
From:       Ian Wadham <iandw.au () gmail ! com>
Date:       2020-07-25 2:25:12
Message-ID: BCD8CB22-9796-411C-925F-D3C24A690041 () gmail ! com
[Download RAW message or body]


> On 25 Jul 2020, at 8:00 am, Albert Astals Cid <aacid@kde.org> wrote:
> 
> El dijous, 23 de juliol de 2020, a les 6:22:19 CEST, Ian Wadham va escriure:
> > 
> > > On 23 Jul 2020, at 9:59 am, Albert Astals Cid <aacid@kde.org> wrote:
> > > 
> > > El dimarts, 21 de juliol de 2020, a les 0:47:31 CEST, Ian Wadham va escriure:
> > > > 
> > > > > On 21 Jul 2020, at 7:48 am, Albert Astals Cid <aacid@kde.org> wrote:
> > > > > 
> > > > > El dilluns, 20 de juliol de 2020, a les 9:05:26 CEST, Ian Wadham va escriure:
> > > > > > Hi Albert,
> > > > > > 
> > > > > > > On 18 Jul 2020, at 5:38 am, Albert Astals Cid <aacid@kde.org> wrote:
> > > > > > > 
> > > > > > > El divendres, 17 de juliol de 2020, a les 8:35:23 CEST, Ian Wadham va escriure:
> > > > > > > > 
> > > > > > > > > On 17 Jul 2020, at 6:38 am, Albert Astals Cid <aacid@kde.org> wrote:
> > > > > > > > > 
> > > > > > > > > El divendres, 10 de juliol de 2020, a les 7:38:40 CEST, Ian Wadham va \
> > > > > > > > > escriure:
> > > > > > > > > > Hi guys,
> > > > > > > > > > 
> > > > > > > > > > Good news. In brief, I have found two or three causes of the 10 bugs listed \
> > > > > > > > > > in https://bugs.kde.org/buglist.cgi?quicksearch=kpat%20forty%20eight.
> > > > > > > > > > 
> > > > > > > > > > However, I am going to need help from an expert with a knowledge of the \
> > > > > > > > > > KPat code to work out the most appropriate patches. 
> > > > > > <snip>
> > > > > > > > > > I will also need help to get patches committed, when they are ready, \
> > > > > > > > > > because I do not have access to or knowledge of the newer KDE Community \
> > > > > > > > > > repositories and procedures. 
> > > > > > > > > 
> > > > > > > > > Unfortunately I don't think we have many KPat experts around anymore, Shlomi \
> > > > > > > > > and Fabian are the two that did changes to somewhat core parts lately.
> > > > > > > > 
> > > > > > > > I was hoping Parker Coates might be able to advise us. I did see a post on \
> > > > > > > > kde-games-devel from him not long ago. 
> > > > > > > > > My suggestion would be for you to put the patch as a Merge Request in \
> > > > > > > > > invent.kde.org
> > > > > > > > 
> > > > > > > > I have looked at that online, but I am really not up to it, Albert. The last \
> > > > > > > > review tool I had anything to do with was ReviewBoard and I have not committed \
> > > > > > > > or checked out anything for about five years. I have been keeping an eye on \
> > > > > > > > things using "anongit" and sometimes offering suggestions or a "diff -u" style \
> > > > > > > > patch (not a "git diff" style one). But as of now I cannot even figure out how \
> > > > > > > > to get a read-only git clone of KPat from invent.kde.org.
> > > > > > > 
> > > > > > > git clone https://invent.kde.org/games/kpat.git
> > > > > > 
> > > > > > Thanks, Albert, I was able to get a local git clone, as above.
> > > > > > 
> > > > > > As you may have seen, I have sorted out the Forty & Eight bugs on bugs.kde.org and \
> > > > > > eliminated some duplicates. I have also finalised my changes to KPat and am doing \
> > > > > > final testing on my Apple OSX KDE 4 version of KPat. One patch is tested and ready \
> > > > > > to present, but I am not able to test it on the KF5 version of KPat. 
> > > > > > I have the change on a branch in my local clone, but have not committed it, nor \
> > > > > > written a commit message there. 
> > > > > > Attached is a patch in "git diff" format to show you what I mean. It fixes the \
> > > > > > illegal move bug in kpat/patsolve/fortyeightsolver.cpp. 
> > > > > > I have taken the liberty of adding some comments to explain what is going on in the \
> > > > > > code and make it less cryptic. Also I have re-written the conditional code for \
> > > > > > multi-card moves, to use multi-character identifiers and make it more readable. I \
> > > > > > could have fixed the whole thing with one line and no comments, but that is not how \
> > > > > > I like to work… :-) 
> > > > > > So how would you like to proceed from here?
> > > > > > 
> > > > > > <snip>
> > > > > > > > > and that way we all can have a look at it and maybe try to understand it \
> > > > > > > > > together.
> > > > > > > > 
> > > > > > > > Indeed. I look forward to that.
> > > > > > 
> > > > > > <snip>
> > > > > > > > I think the best I can do, over the next week or so, is first to tidy up the \
> > > > > > > > bug reports in: 
> > > > > > > > https://bugs.kde.org/buglist.cgi?quicksearch=kpat%20forty%20eight,
> > > > > > > > 
> > > > > > > > flagging duplicate reports, collating test cases, etc. Then I can add my \
> > > > > > > > patches as attachments to whichever are the "main" reports (with appropriate \
> > > > > > > > comments). Then maybe links to that work in Bugzilla could help kick off any \
> > > > > > > > discussion on a merge request.
> > > > > > 
> > > > > > Close to finishing that.
> > > > > > 
> > > > > > > > What do you think, Albert?
> > > > > > > 
> > > > > > > I guess that could work, not optimal, but better than nothing :)
> > > > > > 
> > > > > > So how would you like to proceed from here, using the attached fix for \
> > > > > > https://bugs.kde.org/show_bug.cgi?id=302140 as a trial?
> > > > > 
> > > > > The patch seems reasonable (from the i've no idea what you're really talking about) \
> > > > > scenario :D 
> > > > > Do you have a numbered hand in which to reproduce the issue?
> > > > 
> > > > Certainly. The best examples were submitted by Duncan Kinnear in comments \
> > > > https://bugs.kde.org/show_bug.cgi?id=290647#c7 through \
> > > > https://bugs.kde.org/show_bug.cgi?id=290647#c10. Comments 7 and 9 provide attached KPat \
> > > > save-files from which you can load a game and observe the bug. Comments 8 and 10 have \
> > > > attached screenshots of the same game-states with the invalid move highlighted by \
> > > > "Hint" action… but you cannot actually play a move where two cards are of the same \
> > > > suit and not in ascending sequence. Demo, Hint and solver play it happily and claim \
> > > > that the game is winnable. That's the issue. 
> > > > The saved game at https://bugs.kde.org/show_bug.cgi?id=290647#c9 is the better of the \
> > > > two examples. The invalid move is used by the solver to claim that the game is \
> > > > winnable. The 5 of Clubs is under the King of Clubs but the Demo plays both cards onto \
> > > > the 6 of Clubs. For that to be valid, the two cards to move would have to be 4 and 5 of \
> > > > Clubs. This example is particularly good because when the bug is fixed, the game \
> > > > becomes unwinnable, as seems to be the case however I try to win it. 
> > > > There are other attached save-files in https://bugs.kde.org/show_bug.cgi?id=302140, \
> > > > which is the "main" report for this bug, but they are rather old and I have had no \
> > > > success at using them so far.
> > > 
> > > Hmm, question to try to understand the code a bit better.
> > > 
> > > When you say "starting with the top two cards"  you mean 8/K or J/10 in \
> > > https://i.imgur.com/5paxqtH.png ? i guess you mean J/10 as in "cards in the top of the \
> > > pile" and not as in "cards closer to the top part of the screen", right?
> > 
> > Heh, heh… Understanding the code is 95% of the battle. It took me 3 or 4 weeks to \
> > understand patsolve/fortyeightsolver.cpp, before I could fix the bugs. That included a LOT \
> > of confusion about what is a "top" card. 
> > In the internals of KPat generally (the "model" part?), the code depends on objects called \
> > KCard grouped in stack objects (in the Comp Sci sense) called KCardPile, or "pile" for \
> > short. The "top" card is often referred to and it is always the top of a pile or end of \
> > list or end of array, e.g. there are functions with names like topCard(). 
> > When piles are displayed in a game (the "view" part?), they are often spread downward and \
> > face-up, as in your illustration. So then the "top" card in the internal "model" is \
> > actually the "bottom" card in the "view". In your illustration the "top" card, in KPat's \
> > solver semantics, is indeed the 10 of Clubs and the Jack is the next card. 
> > I find it helps, when reading KPat solver code to think of the "top" card in a face-up pile \
> > as being the one whose face is fully visible, regardless of how the pile is displayed. \
> > Often this is also the first moveable card in the pile. 
> > Just to add to the difficulty, several lower-level KPat solvers (including \
> > patsolve/fortyeightsolver.cpp) pack cards and piles into an array called W (for workspace) \
> > with one byte per card (see definition in patsolve/patsolve.h). The array Wp provides an \
> > index into the "top" card of each pile and the array Wlen tells how many cards are in the \
> > pile (counting backwards from the "top" card :-) ). 
> > Hope this helps. Good luck and cheers,
> > Ian W.
> > 
> > P.S. As a path to understanding I used lots of "fprintf( stderr" lines and the procedure \
> > "FortyEightSolver::print_layout()". To keep the output manageable, I used \
> > "Settings->Remember State On Exit" and put conditions "max_positions == 1" on the printing. \
> > The max depth to which the solver will go is set by that parameter and it is set to 1 to \
> > get a Hint. So, to analyse a single position, I could just press Hint and get about a page \
> > of printout. When I had examined it and maybe changed some print statements, I could just \
> > start KPat to get back to the same game number and move number. Very nice.
> 
> Ok, thanks for the explanation.
> 
> I've commited the code (with some minor stylistic changes)

Thank you very much for all your help on this, Albert, and for seeing it through to a \
conclusion… :-)

All the best,
Ian W.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic