public void run() {
		Instruction inst = Instruction.ERROR;
		String currentTurn;
		while (!this.game.isFinished() && !(inst.equals(Instruction.EXIT))) {
			this.game.displayBoard();
			System.out.println("");
			currentTurn = this.game.getTurn().toString();
			currentTurn = this.convertTurnFirstUpper(currentTurn);
			System.out.println(currentTurn + " to move.");
			inst = readInstruction(this.in);
			switch (inst) {
			case MOVE:
				Move mov = null;
				if (this.rules == DifferentRules.CONNECT4) {
					mov = new Connect4Move(readColumn(), this.game.getTurn());
				} 
				else if (this.rules == DifferentRules.COMPLICA) {
					mov = new ComplicaMove(readColumn(), this.game.getTurn());
				}				
				this.game.executeMove(mov);
				break;
			case UNDO:				
				this.game.undo();
				break;
			case RESTART:
				this.game.reset(this.rules.getRules());
				System.out.println("Game restarted.");				
				break;
			case ERROR:
				//non existing command
				System.err.println("Invalid move, please try again.");
			case EXIT:
				break;
			case PLAY_C4:
				this.rules = DifferentRules.CONNECT4;
				this.game.reset(this.rules.getRules());
				break;
			case PLAY_CO:
				this.rules = DifferentRules.COMPLICA;
				this.game.reset(this.rules.getRules());
				break;
			default:
				break;					
			}						
		}
		if (this.game.isFinished()) {
			System.out.println("Game over. " + this.convertTurnFirstUpper(this.game.getWinner().toString()) + " wins");
		}
		System.out.println("Closing the game...");	
	}