GNU Go Documentation
1.5.2 Smaller projects
These issues are of tactical nature, i.e. they concern some specific
feature or the infrastructure of the engine. Some of these are quiet
small, maybe doable in a day for an experienced GNU Go programmer.
They might also be useful project to start with for a new project
member. Some of them are bigger and demand a deeper knowledge of the
engine internals. The issues are presented here in an approximate
order of perceived difficulty.
- Add more checks in patterns/mkpat.c testing whether the main diagram and
the constraint diagram are consistent.
- Complete the conversion to 1-dimensional representation.
Check all comments before functions to make them agree with
the actual function header. In some cases these comments were
missed when the function was converted to 1D.
- Break out handling of movelists into its own file and generalize it.
This is started in 3.1.16. Move lists are used, among other places,
in worms.c where it is used to store moves that capture, save,
threaten to capture and threaten to save the worm.
- Implement move lists storing important moves for dragons and eyes
in the same way as it is used for worms. Half eyes are already
halfway done. The moves are stored, but not the attack and defend
codes (LOSE, KO_A, KO_B and WIN).
- Make the cache not waste storage on 64 bit systems.
- Implement detection of superko violation in the board code. We
probably only want this optionally in play_move() and in a variant
of is_legal().
- The dragon data is split into two arrays, dragon[] and dragon2[].
The dragon2 array only have one entry per dragon, in contrast to
the dragon array where all the data is stored once for every
intersection of the board. Complete the conversion of eye_data,
half_eye_data, worm and dragon to use the same structure as the
dragon2 array.
- Implement persistent caching in the semeai code.
- Support for ko in eyes.db and optics.c.
- Support for constraints in the eye patterns.
- Create a paradigm for handling other types of ko (approach move ko,
multi-step ko, etc) and then write code that handles them.
(Difficult!)
- GNU Go should be able to resign some games. This feature should be
able to be turned on or off since we don't want it during
tournament play. If all dragons are settled and GNU Go is behind by
a lot, it should be able to resign.