Warning
This page is located in archive. Go to the latest version of this course pages.

Reversi game

Task

Your task is to download the ZIP file and alter the downloaded player.py file for the Reversi game and then win a Reversi tournament against the players of the rest of the class.

Learning outcomes

This task will teach you about:

  • Adversarial search
    • Complexity explosion
    • Search algorithm effectivity

The solution can be generalized to other classical games, although in some cases this strategy does not lead to optimal solutions and you would use different approaches (e.g.: Go).

ZIP file content

See README_EN.md in reversi.zip.

The package containg also the file 'game_board.py' that contains the class of the gameboard. You can also test your player in a Reversi game using the reversi_creator.py or headless_reversi_creator.py scripts.

Player specification

The file player.py contains the MyPlayer class with a few methods. You can use the method that is already implemented in the MPlayer class called get_all_valid_moves in order to get all the valid moves and thus focus only on your strategy and decision how to play the game.

  • The code must be Pythonu 3 compatible, otherwise it can fail during automatic evaluation!
method input output explanation
__init__ my_color, opponent_color None A player contructor. The color is either 0 or 1
get_all_valid_moves board list of coordinate tuples Method returns for a given board all the valid moves.
move board (n x n game board) r , c (row, column) a tuple - coordinates of your move The input is 2D list - current game board. Method should return a valid move. Example: (0,0) means putting your stone to the position board[r][c]. If no valid move is possible return None. board values -1 for empty space and 0/1 for the stone color. The max time spent within the move method is 3 secs. This is the method you are supposed to alter.

MyPlayer properties

  • docstring should be informative enough
  • attribute name contains the username of the student

Example of MyPlayer implementation

class MyPlayer:
    '''super-smart indeed'''
    def __init__(self, my_color,opponent_color):
        self.name = 'username' #username of the studen
 
    def move(self,board):
        return (*,*) 

Evaluation

Late submissions do not take part in the tournament and receive 0 points.

Points are given in the following way:

  1. The player must work and generate correct moves (e.g.: not outside the board).
  2. Manual evaluation is done by the teachers with regards to your code quality.
  3. The automatic evaluation gives points based on automatic code testing and the success of the player in the tournament.
Evaluation min max note
Algorithm quality 0 4 Evaluated based on automatic evaluation whether the player follows the Reversi game rules.
Code quality 0 5 Comments, code structure, cleanliness, proper naming…
Rank in the tournament 0 6 The tournament truly pits your code against the others. Based on the order in the tournament, we distinguish five levels and give them their respected point count: 1-2-3-4-6. If your player does not finish the tournament because of his mistake, you get 0 points.

Submission

Upload a ZIP archive with the module agent.py and any other possible modules you created to the Upload system. All the files must to be in the archive's root folder! The archive cannot contain any other folders!

Results

courses/be5b33kui/labs/reversi/start.txt · Last modified: 2018/04/17 08:11 by svarnpet