The history of Diana

Back to game   Back to index

Version 1.0

Version 1.0 was created by me (Johnny Norre) for the Sinclair ZX81 home computer in 1983. The original version was based on a version of Othello for the BBC computer, that was published in the magazine "Your computer" (sept.83 issue). The game algorithm that was used in this game is very simple: A one ply (a ply is a half-move) search maximized the number of pieces captured with respect to a table of positional values (eg. the corner scores 32, the fields next to the corner scores 0 except in certain cases where the corner already is occupied).

Version 1.1

After sharing the original version with my friends, some of them started to complain about the game being to easy to win, so a two-level follow-up was developed. This version had an additional level that performed a 2 ply search while maximizing both the global positional values of the pieces as well as the total number of pieces.

Version 1.5

Version 1.5 was made for the Sinclair ZX Spectrum in 1994. Version 1.5 had the same playing engine as v1.1 but added some features like "Hint" where Diana suggested a move and "Show legal moves" where the legal moves were marked on the board.

Version 2.0

Version 2.0 of Diana was developed for the Amstrad CPC464,CPC664, & CPC6128 series of computers in 1986 and was our first attempt to produce a commercial version of Diana. To ensure it had a chance in the marked we tried to make a program that would beat a game called "Moi Othello" that at the time was considered the best program around (by winning a world title!). A large amount of research went into the development and finally we ended up with a program that consistently won over the "Moi" program at comparable levels. The game engine had the following features: It had 7 levels of play (1 to 7 ply look-ahead). It was written in assembler. The search engine used alpha-beta search with the minimax algorithm to perform time optimizing branch cut-offs. The positional values used in v1.0 & 1.5 were dropped in favour of a pattern recognizing position evaluator:

  • Diana knew 16 center positions (the 16 center fields) that was favourable.

  • Diana used global evaluation as well as look-ahead to make the "best" moves on the fields next to the border.

  • Diana knew 40 border patterns to strive for.

  • Diana used an algorithm that minimized the number of pieces on the board until the game outcome was within the horizon of the search algorithm.

  • When reaching the end of the game the look-ahead search was increased to enhance the horizon when maximizing the number of pieces captured: Level 3 (3 ply look-ahead) was able to accurately calculate the outcome of the game when 55 pieces was placed on the board.

Beside being very strong, Diana 2.0 also had a lot of features including Demo-mode where two different levels could play each other, print out, load/save, position setup, analyse information and so on. It even supported mouse control (a rare feature in 1986 - except on the Apple Lisa & MacIntosh machines).

Version 1.0/Java

The Java version of Diana was developed in 1998 as a Java pilot project. The game engine used is a refined version of the engine used in the original version 1.0 for ZX81: The positional board values is slightly enhanced and the 1 ply analyse phase uses a piece minimizing approach when two moves evaluates to the same positional value. The playing strength is just above the original v1.0, but weaker than v1.1 and later.

Version 1.0/JavaScript

The JavaScript version of Diana was converted from Java to JavaScript in april 2015. It is a straight conversion from the previous java version.

Back to game   Back to index