Michael, I appreciate you help help a lot, I think I have enough information to get started, I will let you know if I get stuck. For now though, thank you very much! - Martin
On Mon, Dec 30, 2013 at 11:37 PM, Michael Petch <[email protected]>wrote: > On 2013-12-30 13:28, Martin Micklinghoff wrote: > > Hi Michael, > > > > Thanks a lot for you help! I've followed the steps, got the latest > > version from cvs, and built from source. Also have ipython installed, > > and the ">" command takes me to an ipython shell. I'm curious where I > > can take it from here, as in 'where can I find a list of modules and > > methods', and 'how can uses methods from as python script as opposed to > > from a command line'? > > Having you use the latest version and use ipython are your benefit as > much as it is mine. I am actually busy at the moment but at least want > to respond with some basics. At least this will get you started > (although) you will probably be left with more questions than answers. > > First thing. GNUBG isn't imported into python like you are probably use > to. SO you might be thinking that somehow you can load python and do > something like: > > import gnubg > > Unfortunately this isn't the way GNUBG was designed. What you must do is > load GNUBG and access the internal version of embedded Python that GNUBG > exposes. > > As you may have guessed that embedded Python is available at the command > line by using the greater than sign that I had you use to test earlier. > > Okay, so how do you run a Python script and pass it to GNUBG. You can > run GNUBG with the -p option which allows you to specify a Python script > to run. Once the script is complete GNUBG will exit. As well when > working with Python for scripting it is often preferred to use the -t > option to force everything to the console. eg: > > /path/to/gnubg -t -p testfile.py > > This will launch GNUBG in command mode (no GUI) and run testfile.py and > then exit. > > Now you know how to run a script. > > So how does one interact with GNUBG then. What are the classes and > method available. Well there is a hidden object that is available when > your script is run (or when you are at the Python command prompt via the > > (greater than sign) command. The object you are interested in is > called 'gnubg' > > So how can you find out more about the gnubg object. Load up gnubg a the > command line (gnubg -t) use the greater than sign > to get a python > prompt. You can then issue this command: > > help(gnubg) > > This will print out all the methods that are supported and their arguments. > > You can get out of the Python command line and back to the GNUBG command > line by using control-D. > > As you are probably already aware, most things you do in the gui have > corresponding text mode commands. If you launch GNUBG and type the > command in the terminal: > > new match 7 > > This would start a new match. > > So at the GNUBG command line you can find out all the commands that > GNUBG supports by typing: > > help > > For any command you can get further help b doing: > > help commandname > > so: > > help new > > would show you the new command. From there you could get help on the > match sub command via: > > help new match > > One thing you get use to when using GNUBG command line and the GUI at > the same time is the ability to see the commands as the GUI proceeds. > This gives you an idea of how GNUGB does things under the hood. > > So why am I spending a reat deal of time about GNUBG's command line. > Because one of the fucntions available to you in Python is to execute an > arbitrary command as if it was typed on the GNUBG command line. > > SO load GNUBG and type > > > > (now we are at Python prompt). > gnubg.command('new match 7') > > You should see GNUBG start a new match. You cna query the current game > state by using this method: > > gnubg.posinfo() > > This will return a dictionary of the current player and whether they > have been doubled, what the dice are (if not doubled). Dice of (0,0) and > doubled = 0 means that the player is on roll and has to make a cube > action. To cube you can then send the 'double' command via: > > gnubg.command('double') > gnubg.posinfo() > > posinfo should now show you what roll you have (meaning) you are on > turn. How do you send a move from Python to GNUBG? Let us say posinfo > says you rolled a '31' you could send this command to mak that play: > > gnubg.command('8/5 6/5') > > > GNUBG's command line takes moves like that to actually make a play. If > you play with the GUI launched from the console you can see all these > commands being execute while the GUI is playing (That is an invaluable > tool to get an idea of how things are done). > > As well one other very valuable method is: > > gnubg.match(analysis=0,boards=0,verbose=0) > > Analysis, boards, and verbose can be set to 1 as well. The amount of > information returned can be a lot. with everything turned on. Part fo > the data structure (dictionary) is documented. You can see it via: > > help(gnubg.match) > > gnubg.match(...) is designed to return every game, every move (and cube) > and associated information. > > If you undertsnad python and dictionaries (required knowledge) you could > in theory get the very last move/cube/resign made in a match via: > > gnubg.match(analysis=0,boards=1)['games'][-1]['game'][-1] > > Notice I'm not using the print command (nor assigning it to a variable). > if you don't specify either print or assignment ipython will pretty > print the dictionary that is generally more readable than had you issued: > > print gnubg.match(analysis=0,boards=0,verbose=0) > > I find this technique for understanding data structures I am not > familiar with. > > There are some sample file that should be available in: > > /usr/local/share/gnubg/scripts/ > > In particular matchseries.py may be useful to get an idea of things. > This was the very first Python program I ever played with (I wasn't a > Python developer at that time), and what got me started with Python > development in general. > > help(gnubg) is your friend. Although the documentation in there isn't > complete you can often learn what is available. > > I will stop things here. This email is meant as a starting point in your > learning > > -- > Michael Petch > CApp::Sysware Consulting Ltd. > OpenPGP FingerPrint=D81C 6A0D 987E 7DA5 3219 6715 466A 2ACE 5CAE 3304 >
_______________________________________________ Bug-gnubg mailing list [email protected] https://lists.gnu.org/mailman/listinfo/bug-gnubg
