G2F3 0.7.3

G2F3 project is a generic framework for strategy games.

  Add it to your Download Basket!

 Add it to your Watch List!


Rate it!
send us
an update
GPL (GNU General Public License) 
2.7/5 18
Frank Boehme
ROOT \ Games \ TBS
G2F3 project is a generic framework for strategy games.

G2F3 (Generic Game Framework in eiFFel) aims to simplify the development of two player zero sum strategy games by separating game specific code from reusable generic code. So far, abstract board games are best supported.

This software is written using GNU SmartEiffel. The package comes with six example games.

What's New in This Release:

- A current snapshot of SmartEiffel-2.2 is now required. 2.2-beta and earlier
will not work anymore with this code.

New Features
- Added Tanbo (GTK UI only), an excellent abstract strategy game invented by
Mark Steere (http://www.marksteere.com, http://www.tanbo.com). Thanks to
Mark for sharing his idea under a very clear copyleft license.
At the moment, the computer plays weak, though not absolutely dumb. I think
I already know how to improve the evaluation function. Will try that soon.
- Tanbo and Breakthrough can now be built for different board sizes. Those
game directories have subdirectories for each board size. To compile, cd to
one of these and use the normal build commands (see doc). Currently, the
board size cannot be changed at runtime.

- More improvements in the evaluation function in Breakthrough.
- Node explorer: Now using monospace font for the two state views. Game positions
stored in BIT_2_BOARD_STORAGE and decendants are now shown in ASCII art.
- 'Undo' is now unlimited. Modified NODE_HISTORY and UNDO_REDO_BUFFER now
using linear memory instead of circular. This was done in anticipation of REPOSITORY
which will be used for load/save of games. With unlimited undo/redo, games
can be saved by storing moves only (rather than saving moves plus the oldest
game position).
- New class BIT_LARGE in e-lib. Used in the code for Tanbo.

Code Changes and Cleanup
- New feature {GEOMETRY_RECTANGLE}.rook_neighbors.
- Removed special loadpath files that were supposed to trick eiffeldoc into
running without errors. Eiffeldoc assumes no conflicts in the whole type universe.
This is not the case with the current state of this framework...
- Added 'insert ANY' to BIT_2_BOARD_KEY and BIT_1_BOARD_KEY to get
the body of is_equal (now deferred in HASHABLE).
- Added 'insert PLATFORM' to STORAGE_HASHABLE to get Maximum_integer.
- FILE_FINDER now uses {FILE_TOOLS}.is_readable instead of {ANY}.file_exists
which is now obsolete.
- New feature {BOARD_GAME_DISPLAY}.flash_cell and changed
{BOARD_GAME_DISPLAY}.animate_from_to to make use of this.
- New feature {SERVER}.int_move_input to simplify games where move_dim = 1.
Added precondition to incremental_move_input and incremental_set_move_input.
- {ALPHA_BETA_TT}.main_search and {ALPHA_BETA_TT}.alpha_beta_tt: Now using new
local variable dict_key which avoids calling {STORAGE_HASHABLE}.hash_key twice
(which is *not* an attribute). Gives some tiny speed improvement.
- New feature {BIT_BOARD_STORAGE}.occupier (was needed to remove hard coded
board sizes in Breakthrouigh). TODO: remove overlap with display_code.

- Fixed an embarassing bug in the evaluation function of 'Breakthrough' (forgotten
'not' in line 220 of STORAGE_BREAKTHROUGH) that caused the AIs to play
very weak moves.
- Fixed a self-made memory leak in {DICTIONARY_MANAGER}.clean_up: collection was
off when full_collect was called. Since collection is always off when the computer
AI is busy, I can hardly blame SmartEiffel for not automatically calling the GC
within the relatively few lines of code when collection was on. Thus, the
programs consumed more and more memory as soon as a TT based algorithm was used.
- Removed usage of 'twin' in {DICTIONARY_MANAGER}.add_useful_to_shadow. I have
no idea why I had used twin there in the first place. This was not really a
bug but it caused unneccessary memory consumption in addition to the collection
bug mentioned above.

Build System
- ACE files and top level makefile moved to the new directory scripts.
- ACE files and the top level makefile now expect a new variable G2F3 which
must point to the root directory of the G2F3 package. This variable is
used to locate non-Eiffel files. Also, all Eiffel files which are
not part of the SE standard library are now always located using 'loadpath.se'
in the current directory. All example programs still compile out of the box
as the application specific makefiles take care of setting the G2F3 variable.
These changes allow for more flexibility in the game directories (which may
now contain subdirectories).
- ACE files: added "${path_lib}/kernel/internal" to cluster sections
(required by SE-2.2).

Last updated on January 12th, 2007

#Generic Game #eiFFel Framework #Generic Framework #G2F3 #Generic #eiFFel #Framework

Add your review!