Version 2.5 - (current)
In this version I introduced the following major improvements:
The evaluation function which is used to determine the best possible
move is assigning credits for mobility and corners and deducts credits
for playing bad squares (follow this link
for explanation of Othello strategies)
In two respects my algorithm is different from some others that I reviewed.
Firstly, it doesn't assign mobility credit for moves that result in taking
"bad" squares. Secondly, C and X squares are no longer considered
"bad" when the corresponding corner is taken. Moreover, the static
evaluation function assures that at this point in the game C-squares start
to look very attractive.
Whether these features improve the quality of the game or not I cannot tell, because I am not a good player. But the applet currently plays far beyond my abilities and therefore I think I did a good job.
I believe that the strength of the game can be somewhat improved by optimizing the values of credits and debits assigned for mobility, corners and bad squares. I couldn't find any research materials that would discuss this kind of optimization. If you are aware of such research or can suggest the optimization algorithm, or know of a self-learning Othello programs that are capable to adjust parameters based on the outcome of the games - please share the information.
In the foundation of the design is class Position which is responsible for calculating value of a position and determining available moves. Class Game controls the game flow by scheduling user and computer moves. Class ReversiView provides applet shell and determines the UI. Finally, class ReversiController is responsible for updating ReversiView based on the state of the Game and informing Game about actions of the human player.