Generic Game Framework in eiFFel (G2F3) 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.
Be the first to post a text review of G2F3. Rate and review a project by clicking thumbs up or thumbs down in the right column.
Version 0.7.3, July 5 2005 ========================== Dependencies ------------ - 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. Improvements ------------ - 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. Bugfixes -------- - 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). Documentation ------------- - Updates to g2f3_doc.pdf, README, TODO and BUGS. Version 0.7.2, May 09, 2005 =========================== New Features ------------ - Added classes BIT_BOARD_STORAGE, BIT_1_BOARD_STORAGE and BIT_1_BOARD_KEY. - Added feature {SERVER}.incremental_set_move_input. Improvements ------------ - The AI player for "Breakthrough" is now much stronger due to a completely new evaluation function that takes mutual influence of pieces into account. There is still room for improvement (tuning weights). One day G2F3 will include a "genetic breeder" for doing that automatically... Nevertheless, Breakthrough is now the most interesting game in this package (when the AI plays with depth 6 or greater). - NODE_EXPLORER: Now clears right list view if Current Node is a leaf. - The computer players in the "Stopgate" game are now much faster since STORAGE_SG is now based on the new class BIT_1_BOARD_STORAGE. - Implementation of move history heuristics was simplified and is now fully implemented inside the g2f3 core code. We now use another hash table rather than an array but no loss of speed occurs. {GAME_SPECIFIC}.move_to_int and {GAME_SPECIFIC}.hist_table_count have been removed. The only thing a developer might want to care about is possibly a redefinition of {NODE}.move_to_hash (new) in case there are too many hash clashes in the history table. - Cut-offs (fail high) resulting from transposition table look-up have now a more correct impact on the heuristic history table. See new feature NODE.{update_hist_gen_move}. - Small speed improvement in NODE. 'last_child_node' is now created by 'child_moves_start'. Code Changes and Cleanup ------------------------ - Deleted {BOARD_GAME_DISPLAY}.location_to type and added instead {BIT_BOARD_STORAGE}.display_code and {BOARD_GAME_DISPLAY}.display_code. These functions take the index of a cell as argument and return an integer code that tells how (and if) that cell should be shown in the GUI. Things are now a bit clearer and simpler. - BIT_2_BOARD_STORAGE now inherits from new class BIT_BOARD_STORAGE. - Renamed BIT_BOARD_HASH_KEY to BIT_2_BOARD_KEY and changed export status and comments of set_max_b_last to clarify the code. - Added important comment to {NODE}.child_moves_start. - Simplified FLTK_STOPGATE. Now calling {SERVER}.incremental_set_move_input. - New class PROPERTIES. Modified and moved {SHARED}.hashable_storage to PROPERTIES. - MOVE_EVAL_PAIR replaced by HIST_TABLE_KEY and HIST_TABLE_VALUE. - Replaced {GTK_NODE_EXPLORER}.line by {NODE_EXPLORER}.strg and moved 'insert ARRAY_STRING_CONVERTER' from GTK_NODE_EXPLORER up to NODE_EXPLORER. - Replaced some more 'inherit' with 'insert'. - Added log report features to HASHED_DICTIONARY_LOGGING. - Begun to clean up the logging code in AI_ALGORITHM, ALPHA_BETA_TT, SERVER and DICTIONARY_MANAGER and some game specific classes. Saved some lines and avoid unnecessary creation of STRINGs. Needs more work. New feature {SHARED}.msg. - Replaced 'clear' with 'clear_count' in HASHED_DICTIONARY_LOGGING (definition and all occurrences). - New constant {CONSTANTS}.hist_dict_init_size. When this number is greater than the sum of all possible moves and move_to_hash is properly redefined, then zero hash collisions in the move history code may be achieved. But this is not required. - Added directory src/eiffeldoc-dummy and file src/eiffeldoc-loadpath.se in preparation of using eiffeldoc from SE-2.2. Currently, eiffeldoc runs out of memory when a loadpath is given. - Replaced some more old '!!' with 'create' in the Outwit code. - GTK interface: maximum depth for search algorithms increased to 9. Bugfixes -------- - Fixed some cases of incorrect handling of move history weight in {AI_ALGORITHM}.post_search_history. Hope it is ok now. Build System ------------ - ACE files: SE libs are now searched last (should always be like that because of class name clashes). "${path_lib}/loadpath" replaced with less general clusters. (Does that speed up class searching noticably?). - ACE files: Removed 'case_insensitive (no)' since SE-2.2 does not support this flag anymore. Documentation ------------- - Updated TODO. Version 0.7.1, March 8 2005 =========================== New Features ------------ - New implementation of the Node Explorer, now using GTK2. The Node Explorer is a development tool for testing the code for move generation, move application and position evaluation. I use GTK-2.6 but I believe GTK-2.4 is sufficient. Improvements ------------ - Added {NODE_HISTORY}.reset_default and {NODE_EXPLORER}.restart. Code Changes and Cleanup ------------------------ - Moved HASHED_DICTIONARY_LOGGING from direectory e-core to e-lib. - Small fixes to ARRAY_STRING_CONVERTER (now again in use by GTK_NODE_EXPLORER). - Updates to NODE_EXPLORER (since v0.5 moves are FAST_ARRAY[INTEGER]). Removed ------- - Deleted FLTK_NODE_EXPLORER (used to use IFLTK, long defunct). Bugfixes -------- - GTK UI: Message view now scrolls properly when large messages arrive. Removed unnecessarily added GtkViewPort in favour of native scrolling abilities from GtkTextView. Documentation ------------- - Main pdf doc: Added info about how to build and use the Node Explorer. - BUGS: New bug with tooltips in GTK node explorer. Removed scrolling bug (fixed). - Updated TODO list. Version 0.7, March 1 2005 ========================= New Features ------------ - Added a GTK2 GUI featuring pixmaps, color logging, tear off menus and proportional scaling of the game specific widget. Added ports of all sample games except "Stopgate" to this new UI. Unlike the FLTK games, these GTK games do not crash when compiled with heavy optimization (i.e. export CFLAGS="-O6 -march=xxx -fxxx ..."). Modified makefiles and ACE files accordingly. I am using GTK+-2.6.2 but I believe all GTK versions from 2.2.2 upwards should work fine (feedback welcome!). The GTK GUIs should be preferred over the FLTK ones as they are much nicer. - Added class FILE_FINDER (read comments for more info). - Added file lookup features in USER_INTERFACE (still needs improvement). This is used for pixmap searching in UI_GTK. Improvements ------------ - Faster evaluation function for "Breakthrough" using bitfields rather than arrays. Unfortunately, it seems to play weaker than in v.0.6. Needs work. - Added makefile target 'gtk-noace' and 'fl-noace' for optimized builds w/o using ACE files. These should work out of the box without any config file editing. Compiler and linker flags are taken from pkgconfig (GTK) or fltk-config (FLTK). This is more portable but I don't know a nice method to keep incremental compilation. Still looking for a *simple* method to parse the output of tools like `pkg-config --cflags --libs gtk+-2.0` into the corresponding entries in ACE files. - Better animation of moves in board games if a piece moves along a straight line (horizontally, vertically or diagonally). Added appropriate code to {BOARD_GAME_DISPLAY}.animate_from_to. Code Changes and Cleanup ------------------------ - Split directory 'core' into 'e-core', 'e-lib' and 'e-board-game' and added README files to each. 'e-lib' now contains general-purpose classes which happened to emerge during the development of G2F3. They may as well be used in completely different projects. 'e-board-game' contains classes used in board games that are played on a rectangular grid. - External code (C, C++, cecil) now in src/external. - Moved 'cell_clicked' from toolkit-specific classes up to BOARD_GAME_DISPLAY. - Moved 'location_to_type' from toolkit-specific classes up to BOARD_GAME_DISPLAY. The default meaning has changed (Result = -1 now means the cell is empty). - Factored out GUI code which does not depend on the GUI toolkit. New classes ANY_GUI_XXX (game-specific) and ANY_GUI_BASIC_MOVES (shared between certain games). This is only possible thanks to the revised inheritance rules which again allow for diamond graphs, as long as there is no ambiguity with access through the top-level interface. - Added directory 'src/games/share/pixmaps'. The gifs have been taken from http://www.coolarchive.com. Thanks to Anil for his permission to distribute them with G2F3. Bugfixes -------- - Changed the build system so that only one cecil file per root target is used. This avoids some bug related to double declararions in the generated *.h files that was introduced somewhere between SE 2.1-beta4 and SE 2.1-rc1. - Workaround for SmartZilla 471/472. The following features have preconditions commented out: In UI_FLTK_BOARD_GAME: label_cell, labelcolor_cell, color_cell In BOARD_GAME_DISPLAY: show_cell, highlight_cell - In {MG_NEUT}.make_choices: changed storage.h_size to temp_storage.h_size now avoiding call with Void target. How come this ever worked??? Documentation ------------- - PDF main doc: now mostly using screenshots from GTK-GUIs. Updated relevant sections about the newly introduced choice between FLTK and GTK. Started to document the API for board games. Updated README, TODO and BUGS. Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function in Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a large patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.
Version 0.7.2, May 09, 2005 =========================== New Features ------------ - Added classes BIT_BOARD_STORAGE, BIT_1_BOARD_STORAGE and BIT_1_BOARD_KEY. - Added feature {SERVER}.incremental_set_move_input. Improvements ------------ - The AI player for "Breakthrough" is now much stronger due to a completely new evaluation function that takes mutual influence of pieces into account. There is still room for improvement (tuning weights). One day G2F3 will include a "genetic breeder" for doing that automatically... Nevertheless, Breakthrough is now the most interesting game in this package (when the AI plays with depth 6 or greater). - NODE_EXPLORER: Now clears right list view if Current Node is a leaf. - The computer players in the "Stopgate" game are now much faster since STORAGE_SG is now based on the new class BIT_1_BOARD_STORAGE. - Implementation of move history heuristics was simplified and is now fully implemented inside the g2f3 core code. We now use another hash table rather than an array but no loss of speed occurs. {GAME_SPECIFIC}.move_to_int and {GAME_SPECIFIC}.hist_table_count have been removed. The only thing a developer might want to care about is possibly a redefinition of {NODE}.move_to_hash (new) in case there are too many hash clashes in the history table. - Cut-offs (fail high) resulting from transposition table look-up have now a more correct impact on the heuristic history table. See new feature NODE.{update_hist_gen_move}. - Small speed improvement in NODE. 'last_child_node' is now created by 'child_moves_start'. Code Changes and Cleanup ------------------------ - Deleted {BOARD_GAME_DISPLAY}.location_to type and added instead {BIT_BOARD_STORAGE}.display_code and {BOARD_GAME_DISPLAY}.display_code. These functions take the index of a cell as argument and return an integer code that tells how (and if) that cell should be shown in the GUI. Things are now a bit clearer and simpler. - BIT_2_BOARD_STORAGE now inherits from new class BIT_BOARD_STORAGE. - Renamed BIT_BOARD_HASH_KEY to BIT_2_BOARD_KEY and changed export status and comments of set_max_b_last to clarify the code. - Added important comment to {NODE}.child_moves_start. - Simplified FLTK_STOPGATE. Now calling {SERVER}.incremental_set_move_input. - New class PROPERTIES. Modified and moved {SHARED}.hashable_storage to PROPERTIES. - MOVE_EVAL_PAIR replaced by HIST_TABLE_KEY and HIST_TABLE_VALUE. - Replaced {GTK_NODE_EXPLORER}.line by {NODE_EXPLORER}.strg and moved 'insert ARRAY_STRING_CONVERTER' from GTK_NODE_EXPLORER up to NODE_EXPLORER. - Replaced some more 'inherit' with 'insert'. - Added log report features to HASHED_DICTIONARY_LOGGING. - Begun to clean up the logging code in AI_ALGORITHM, ALPHA_BETA_TT, SERVER and DICTIONARY_MANAGER and some game specific classes. Saved some lines and avoid unnecessary creation of STRINGs. Needs more work. New feature {SHARED}.msg. - Replaced 'clear' with 'clear_count' in HASHED_DICTIONARY_LOGGING (definition and all occurrences). - New constant {CONSTANTS}.hist_dict_init_size. When this number is greater than the sum of all possible moves and move_to_hash is properly redefined, then zero hash collisions in the move history code may be achieved. But this is not required. - Added directory src/eiffeldoc-dummy and file src/eiffeldoc-loadpath.se in preparation of using eiffeldoc from SE-2.2. Currently, eiffeldoc runs out of memory when a loadpath is given. - Replaced some more old '!!' with 'create' in the Outwit code. - GTK interface: maximum depth for search algorithms increased to 9. Bugfixes -------- - Fixed some cases of incorrect handling of move history weight in {AI_ALGORITHM}.post_search_history. Hope it is ok now. Build System ------------ - ACE files: SE libs are now searched last (should always be like that because of class name clashes). "${path_lib}/loadpath" replaced with less general clusters. (Does that speed up class searching noticably?). - ACE files: Removed 'case_insensitive (no)' since SE-2.2 does not support this flag anymore. Documentation ------------- - Updated TODO. Version 0.7.1, March 8 2005 =========================== New Features ------------ - New implementation of the Node Explorer, now using GTK2. The Node Explorer is a development tool for testing the code for move generation, move application and position evaluation. I use GTK-2.6 but I believe GTK-2.4 is sufficient. Improvements ------------ - Added {NODE_HISTORY}.reset_default and {NODE_EXPLORER}.restart. Code Changes and Cleanup ------------------------ - Moved HASHED_DICTIONARY_LOGGING from direectory e-core to e-lib. - Small fixes to ARRAY_STRING_CONVERTER (now again in use by GTK_NODE_EXPLORER). - Updates to NODE_EXPLORER (since v0.5 moves are FAST_ARRAY[INTEGER]). Removed ------- - Deleted FLTK_NODE_EXPLORER (used to use IFLTK, long defunct). Bugfixes -------- - GTK UI: Message view now scrolls properly when large messages arrive. Removed unnecessarily added GtkViewPort in favour of native scrolling abilities from GtkTextView. Documentation ------------- - Main pdf doc: Added info about how to build and use the Node Explorer. - BUGS: New bug with tooltips in GTK node explorer. Removed scrolling bug (fixed). - Updated TODO list. Version 0.7, March 1 2005 ========================= New Features ------------ - Added a GTK2 GUI featuring pixmaps, color logging, tear off menus and proportional scaling of the game specific widget. Added ports of all sample games except "Stopgate" to this new UI. Unlike the FLTK games, these GTK games do not crash when compiled with heavy optimization (i.e. export CFLAGS="-O6 -march=xxx -fxxx ..."). Modified makefiles and ACE files accordingly. I am using GTK+-2.6.2 but I believe all GTK versions from 2.2.2 upwards should work fine (feedback welcome!). The GTK GUIs should be preferred over the FLTK ones as they are much nicer. - Added class FILE_FINDER (read comments for more info). - Added file lookup features in USER_INTERFACE (still needs improvement). This is used for pixmap searching in UI_GTK. Improvements ------------ - Faster evaluation function for "Breakthrough" using bitfields rather than arrays. Unfortunately, it seems to play weaker than in v.0.6. Needs work. - Added makefile target 'gtk-noace' and 'fl-noace' for optimized builds w/o using ACE files. These should work out of the box without any config file editing. Compiler and linker flags are taken from pkgconfig (GTK) or fltk-config (FLTK). This is more portable but I don't know a nice method to keep incremental compilation. Still looking for a *simple* method to parse the output of tools like `pkg-config --cflags --libs gtk+-2.0` into the corresponding entries in ACE files. - Better animation of moves in board games if a piece moves along a straight line (horizontally, vertically or diagonally). Added appropriate code to {BOARD_GAME_DISPLAY}.animate_from_to. Code Changes and Cleanup ------------------------ - Split directory 'core' into 'e-core', 'e-lib' and 'e-board-game' and added README files to each. 'e-lib' now contains general-purpose classes which happened to emerge during the development of G2F3. They may as well be used in completely different projects. 'e-board-game' contains classes used in board games that are played on a rectangular grid. - External code (C, C++, cecil) now in src/external. - Moved 'cell_clicked' from toolkit-specific classes up to BOARD_GAME_DISPLAY. - Moved 'location_to_type' from toolkit-specific classes up to BOARD_GAME_DISPLAY. The default meaning has changed (Result = -1 now means the cell is empty). - Factored out GUI code which does not depend on the GUI toolkit. New classes ANY_GUI_XXX (game-specific) and ANY_GUI_BASIC_MOVES (shared between certain games). This is only possible thanks to the revised inheritance rules which again allow for diamond graphs, as long as there is no ambiguity with access through the top-level interface. - Added directory 'src/games/share/pixmaps'. The gifs have been taken from http://www.coolarchive.com. Thanks to Anil for his permission to distribute them with G2F3. Bugfixes -------- - Changed the build system so that only one cecil file per root target is used. This avoids some bug related to double declararions in the generated *.h files that was introduced somewhere between SE 2.1-beta4 and SE 2.1-rc1. - Workaround for SmartZilla 471/472. The following features have preconditions commented out: In UI_FLTK_BOARD_GAME: label_cell, labelcolor_cell, color_cell In BOARD_GAME_DISPLAY: show_cell, highlight_cell - In {MG_NEUT}.make_choices: changed storage.h_size to temp_storage.h_size now avoiding call with Void target. How come this ever worked??? Documentation ------------- - PDF main doc: now mostly using screenshots from GTK-GUIs. Updated relevant sections about the newly introduced choice between FLTK and GTK. Started to document the API for board games. Updated README, TODO and BUGS. Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function in Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a large patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.
Version 0.7.1, March 8 2005 =========================== New Features ------------ - New implementation of the Node Explorer, now using GTK2. The Node Explorer is a development tool for testing the code for move generation, move application and position evaluation. I use GTK-2.6 but I believe GTK-2.4 is sufficient. Improvements ------------ - Added {NODE_HISTORY}.reset_default and {NODE_EXPLORER}.restart. Code Changes and Cleanup ------------------------ - Moved HASHED_DICTIONARY_LOGGING from direectory e-core to e-lib. - Small fixes to ARRAY_STRING_CONVERTER (now again in use by GTK_NODE_EXPLORER). - Updates to NODE_EXPLORER (since v0.5 moves are FAST_ARRAY[INTEGER]). Removed ------- - Deleted FLTK_NODE_EXPLORER (used to use IFLTK, long defunct). Bugfixes -------- - GTK UI: Message view now scrolls properly when large messages arrive. Removed unnecessarily added GtkViewPort in favour of native scrolling abilities from GtkTextView. Documentation ------------- - Main pdf doc: Added info about how to build an use the Node Explorer. - BUGS: New bug with tooltips in GTK node explorer. Removed scrolling bug (fixed). - Updated TODO list. Version 0.7, March 1 2005 ========================= New Features ------------ - Added a GTK2 GUI featuring pixmaps, color logging, tear off menus and proportional scaling of the game specific widget. Added ports of all sample games except "Stopgate" to this new UI. Unlike the FLTK games, these GTK games do not crash when compiled with heavy optimization (i.e. export CFLAGS="-O6 -march=xxx -fxxx ..."). Modified makefiles and ACE files accordingly. I am using GTK+-2.6.2 but I believe all GTK versions from 2.2.2 upwards should work fine (feedback welcome!). The GTK GUIs should be preferred over the FLTK ones as they are much nicer. - Added class FILE_FINDER (read comments for more info). - Added file lookup features in USER_INTERFACE (still needs improvement). This is used for pixmap searching in UI_GTK. Improvements ------------ - Faster evaluation function for "Breakthrough" using bitfields rather than arrays. Unfortunately, it seems to play weaker than in v.0.6. Needs work. - Added makefile target 'gtk-noace' and 'fl-noace' for optimized builds w/o using ACE files. These should work out of the box without any config file editing. Compiler and linker flags are taken from pkgconfig (GTK) or fltk-config (FLTK). This is more portable but I don't know a nice method to keep incremental compilation. Still looking for a *simple* method to parse the output of tools like `pkg-config --cflags --libs gtk+-2.0` into the corresponding entries in ACE files. - Better animation of moves in board games if a piece moves along a straight line (horizontally, vertically or diagonally). Added appropriate code to {BOARD_GAME_DISPLAY}.animate_from_to. Code Changes and Cleanup ------------------------ - Split directory 'core' into 'e-core', 'e-lib' and 'e-board-game' and added README files to each. 'e-lib' now contains general-purpose classes which happened to emerge during the development of G2F3. They may as well be used in completely different projects. 'e-board-game' contains classes used in board games that are played on a rectangular grid. - External code (C, C++, cecil) now in src/external. - Moved 'cell_clicked' from toolkit-specific classes up to BOARD_GAME_DISPLAY. - Moved 'location_to_type' from toolkit-specific classes up to BOARD_GAME_DISPLAY. The default meaning has changed (Result = -1 now means the cell is empty). - Factored out GUI code which does not depend on the GUI toolkit. New classes ANY_GUI_XXX (game-specific) and ANY_GUI_BASIC_MOVES (shared between certain games). This is only possible thanks to the revised inheritance rules which again allow for diamond graphs, as long as there is no ambiguity with access through the top-level interface. - Added directory 'src/games/share/pixmaps'. The gifs have been taken from http://www.coolarchive.com. Thanks to Anil for his permission to distribute them with G2F3. Bugfixes -------- - Changed the build system so that only one cecil file per root target is used. This avoids some bug related to double declararions in the generated *.h files that was introduced somewhere between SE 2.1-beta4 and SE 2.1-rc1. - Workaround for SmartZilla 471/472. The following features have preconditions commented out: In UI_FLTK_BOARD_GAME: label_cell, labelcolor_cell, color_cell In BOARD_GAME_DISPLAY: show_cell, highlight_cell - In {MG_NEUT}.make_choices: changed storage.h_size to temp_storage.h_size now avoiding call with Void target. How come this ever worked??? Documentation ------------- - PDF main doc: now mostly using screenshots from GTK-GUIs. Updated relevant sections about the newly introduced choice between FLTK and GTK. Started to document the API for board games. Updated README, TODO and BUGS. Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function in Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a large patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.
Version 0.7, March 1 2005 ========================= New Features ------------ - Added a GTK2 GUI featuring pixmaps, color logging, tear off menus and proportional scaling of the game specific widget. Added ports of all sample games except "Stopgate" to this new UI. Unlike the FLTK games, these GTK games do not crash when compiled with heavy optimization (i.e. export CFLAGS="-O6 -march=xxx -fxxx ..."). Modified makefiles and ACE files accordingly. I am using GTK+-2.6.2 but I believe all GTK versions from 2.2.2 upwards should work fine (feedback welcome!). The GTK GUIs should be preferred over the FLTK ones as they are much nicer. - Added class FILE_FINDER (read comments for more info). - Added file lookup features in USER_INTERFACE (still needs improvement). This is used for pixmap searching in UI_GTK. Improvements ------------ - Faster evaluation function for "Breakthrough" using bitfields rather than arrays. Unfortunately, it seems to play weaker than in v.0.6. Needs work. - Added makefile target 'gtk-noace' and 'fl-noace' for optimized builds w/o using ACE files. These should work out of the box without any config file editing. Compiler and linker flags are taken from pkgconfig (GTK) or fltk-config (FLTK). This is more portable but I don't know a nice method to keep incremental compilation. Still looking for a *simple* method to parse the output of tools like `pkg-config --cflags --libs gtk+-2.0` into the corresponding entries in ACE files. - Better animation of moves in board games if a piece moves along a straight line (horizontally, vertically or diagonally). Added appropriate code to {BOARD_GAME_DISPLAY}.animate_from_to. Code Changes and Cleanup ------------------------ - Split directory 'core' into 'e-core', 'e-lib' and 'e-board-game' and added README files to each. 'e-lib' now contains general-purpose classes which happened to emerge during the development of G2F3. They may as well be used in completely different projects. 'e-board-game' contains classes used in board games that are played on a rectangular grid. - External code (C, C++, cecil) now in src/external. - Moved 'cell_clicked' from toolkit-specific classes up to BOARD_GAME_DISPLAY. - Moved 'location_to_type' from toolkit-specific classes up to BOARD_GAME_DISPLAY. The default meaning has changed (Result = -1 now means the cell is empty). - Factored out GUI code which does not depend on the GUI toolkit. New classes ANY_GUI_XXX (game-specific) and ANY_GUI_BASIC_MOVES (shared between certain games). This is only possible thanks to the revised inheritance rules which again allow for diamond graphs, as long as there is no ambiguity with access through the top-level interface. - Added directory 'src/games/share/pixmaps'. The gifs have been taken from http://www.coolarchive.com. Thanks to Anil for his permission to distribute them with G2F3. Bugfixes -------- - Changed the build system so that only one cecil file per root target is used. This avoids some bug related to double declararions in the generated *.h files that was introduced somewhere between SE 2.1-beta4 and SE 2.1-rc1. - Workaround for SmartZilla 471/472. The following features have preconditions commented out: In UI_FLTK_BOARD_GAME: label_cell, labelcolor_cell, color_cell In BOARD_GAME_DISPLAY: show_cell, highlight_cell - In {MG_NEUT}.make_choices: changed storage.h_size to temp_storage.h_size now avoiding call with Void target. How come this ever worked??? Documentation ------------- - PDF main doc: now mostly using screenshots from GTK-GUIs. Updated relevant sections about the newly introduced choice between FLTK and GTK. Started to document the API for board games. Updated README, TODO and BUGS. Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function in Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a lage patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.
Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function In Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a lage patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.
Be the first person to add a text review.
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use
Thanks for your rating!
Would you also like to write a review?