Version 4 Release Notes
OpenGo is currently implemented only in C++. It is designed to be portable across operating systems. It is not tied to any one GUI, but it does not attempt to abstract any GUI either.
OpenGo's classes can also be used in implementing a Go engine. There is a simple interface for compiling in engines or communicating with them using the Go Modem Protocol. OpenGo allows your Go Engine to receive recieve a coherent, legal board and a legal move, and the means to respond to that move.
This architecture could be generalized further for multiplayer games of most any sort.
Full source is included in an opensource arrangment (see important restrictions below).
| base | fundamental types, os abstractions, abstract modem, i/o abstraction. Some OS/GUI specific implementations. |
| players | player abstraction and a few simple players |
| remote | simplified go modem protocol, could add internet nngs, igs here too |
| doc | documentation. |
| db | contains code to read and write various go database formats. |
| wally | the wally weak go player. It has been modified to support playing multiple instances. This program is often used as a benchmark in the literature |
| gondo | gondo is an improved wally added by don wagner@optimal.com |
| playrand | a random player |
| Windows | This is Windows MFC based code. The main Visual C++ 6.0 workspace/project files are here. |
| console | This is a console/keyboard based interface. It works on Windows 95/NT and under Linux. It is purely based on stdio/streams and the C-runtime, so it should/could work anywhere. |
| Unix | Files specific to Unix / linux. |
|
|
|
|
|
|
Visual C++ 5.x | The current release is now VC6. |
|
|
Visual C++ 6.x | Current release. |
|
|
VC5 & VC6 | Executable runs. |
|
|
? | ? |
|
|
gcc | Should work - any volunteers? |
|
|
Visual Age |
|
|
|
gcc | Works. |
|
|
? |
|
| JAVA | It's C++ for now. Might do a Java port, but it won't be soon. |
|
|
|
| Portable | Designed to run on modern operating systems and GUIs |
| Go DB formats | Can load ISHI format. Can save out in a partial SGF. |
| Go Modem Protocol | Supported |
| Encapsulation | Clean separation of the game playing infrastructure from the game engine / algorithm code. Put in your own engine. |
| Standard engines to test with. | Wally, random, go modem. Others can be added in a clean way. |
| Multiple rules and board sizes | Japanese & Chinese. Proper hoshi too. |
| Windows GUI | The Windows implementation has an MDI, splitter-window GUI. |
| Multiple simultaneous games. | Many games can be played at once. Could be elaborated into a gaming server. |
| Console GUI | Simple, command-line scrolling interface for development and debugging on most platforms. |
| Simple Scoring | For automated testing and evaluation |
| "Common" Go classes | Points, Boards, Strings, Enclosures. Get liberty counts, Kill captured groups, make legal moves, detect ko... |
|
|
|
| Multiple Languages | No effort has been made to support wide or unicode characters for language portablility. Generally, strings are char *. As constructed, this can be easily corrected. |
| Go Modem Protocol | The pipe-based GMP works. It may need enhancements to supports the quirks of each program that uses it... |
| Unix Support | Linux works. Solaris untried. |
| Scoring | The referee can only score a board that has 'stabilized'. This means playing it to the bitter end, something suitable perhaps only for go programs. To say that it is unsuitable for humans would be to understate it. It likely needs work dealing with seki. (The entire scheme needs to be redone.) |
| Rules | It makes available Ko & SuperKo rules, as well as suicide allow/prevent. |
| Wally | Wally works fine. But it only supports simple Ko and with suicide allowed. Otherwise, it will make a move that is rejected by the referee, or it will recieve a move that it thinks is illegal but isn't. |
| Handicaps | It will place handicaps properly using chinese placement. It doesn't support random placing of handicaps (ala japanese rules). |
| Computer opponents play forever on console version | This needs to change to so that a certain number of games are played in a row. This would facilitate learning programs. |
The code is pretty solid as far as crashing goes. It might have some difficulty if you are playing random players against each other and just close the applications. There is a race condition that might cause a crash.
In general, you should check the file "log" which is in the same directory as the running program and which will detail what is going on. In addition you can turn on debubbing flags that will add more to the log. Wally has one, and there is one in the referee to watch the messages going by, and there is one in the modem/go-modem protocol.
During this time, I have had access to different machines, operating systems, compilers, and GUIs. Lately, I've been working in Windows NT and while I also have SunOS and Solaris on my desk, NT is the only active port at this time. Hopefully, those of you in the community can remedy this now, and reactivate the relevant environments.
There are some other bodies of Go code that have portions of what is in OpenGo. I chose to implement my own because I wanted certain functions, architectural features, speed, portability in combinations which others didn't seem to have. Still you should be aware of cgoban, gnugo, pubgo, nngs, jago at least.