Giter Club home page Giter Club logo

reversi-ai's Introduction

reversi-ai

A text based python implementation of Reversi with an artificial intelligence as opponent.

Table of Contents

  1. Requirements
  2. How to Install and Run
  3. What is it?

###1. Requirements Requirements:

  • Python 3.2

The application was only tested on Ubuntu 13.10 and Mac OS X 10.8.5 with successful results.

###2. How to Install and Run

$ mkdir reversi
$ cd reversi
$ wget https://github.com/Zolomon/reversi-ai/archive/master.zip
$ unzip master.zip 
$ cd reversi-ai-master/
$ chmod +x reversi.py
$ ./reversi.py --help
$ ./reversi.py --colour # or...
$ #python3 reversi.py --colour

###3. What is it? reversi-ai is an implementation of the game Reversi where you can face the computer, or watch two artificial intelligences battle it out against each other.

The game is implemented in Python (3.x) and consists of a few different components.

At the top is the reversi.py file which contains the common "main" function which starts the application. This takes care of parsing command line arguments and constructing the Game object which handles the game specific parts of the application.

The Game class exists inside the game/game.py file. The Game object creates the Board object which is used as the front-end for the game. Game also initializes the values needed for the game to be played. The essence of the Game object is its run function which mimics the common REPL (read-eval-print-loop). It will render the current game state, ask for user input, process the input and then repeat from the first step.

The Game object holds information about the players in the shape of two controllers. A Controller (in game/controllers.py) can be either an PlayerController or an AiController. The PlayerController will parse input from the user through the console into a valid move command, or Ctrl+D to quit the game. The AiController will parse the current state and pass that information on to the Brain (in game/brain.py) which in turn will create an instance of the AlphaBetaPruner (in game/ai.py) in a second thread.

This allows the user to easily output extra information or capture user input while the Brain is performing its calculations. However, only simple output is done to signal that the application has not crashed.

The AlphaBetaPruner (ABP) is an implementation of the Minimax algorithm with the Alpha-Beta Pruning optimization. The ABP is implemented using a list of integers to represent the board, a more optimized way would have been to just use three 64 bit integers and bitwise operators, but this was the first representation that came to mind so I went with this.

In the implementation of the ABP, the most interesting function is the evaluation function. This is what can actually be considered the brain of the whole artificial intelligence, here is where the actual state evaluation is performed. The following evaluations are used; whether the player has more bricks than its opponent, how many player bricks are located on the edges (edge bricks are important in order to control flipping of the opponent's bricks), how many player bricks are in the corners which are also very important strategically. I found more important heuristics to be made at WikiPedia, but did not have enough time to profile them.

The Game instance has a Board object which contains a list of Piece objects that has an internal state to represent the different types of possible pieces (Board, Move, White, Black). Each Piece is drawn to the display either in monochrome colours or in 256 RGB colours if the --colour command line flag is set.

The game is played by giving input in the shape of x,y coordinates for the valid moves, using the common format of xโˆˆ(a-h), yโˆˆ(1,8), for example: d3, h1, a2, f8, h7 etc.

The game is over when there are no more moves left, and the winner will be determined by a count of bricks (more bricks is better).

reversi-ai's People

Contributors

zolomon avatar yuessiah avatar ming030890 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.