Como fazer um menu para o usuário escolher

Olá amigos, desenvolvi um jogo da velha em java, e agora preciso aprimorar ele.
O que preciso é o seguinte: um menu para o usuário escolher, dentre esse menu haverá 3 opções:
Humano vs Máquina
Humano vs Humano
Máquina vs Máquina

Vou deixar meu código aqui:

import java.util.ArrayList;
import java.util.List;

public class JogoDaVelha {

public static void main(String[] args) {

List<Jogador> jogadores = new ArrayList<>();
int indexAtual;
boolean finalizado;


jogadores.add(new Jogador(1));
jogadores.add(new Jogador(2));

Menu menu = new Menu();

Tabuleiro tabuleiro = new Tabuleiro();

menu.imprimeTabuleiro(tabuleiro);

finalizado = false;

Jogador vencedor = null;

indexAtual = 0;

while (!finalizado) {

    Jogador jogador = jogadores.get(indexAtual);

    jogador.jogada(tabuleiro);

    if (tabuleiro.verificaVitoria("X") || tabuleiro.verificaVitoria("O")) {
        finalizado = true;
        vencedor = jogador;
    }

    menu.imprimeTabuleiro(tabuleiro);

    indexAtual = (indexAtual + 1) % jogadores.size();
}

System.out.println("A vitória foi do jogador com id " + vencedor.getid());

}
}


public class Jogador {

private int qtd, id;
private int linha, coluna;
private Menu menu = new Menu();

public Jogador(int id_jogador) {
    this.id = id_jogador;
    this.qtd = 0;
}

public int getid() {
    return this.id;
}

public void jogada(Tabuleiro tabuleiro, int linha, int coluna) {

    if (id == 1) {
        tabuleiro.setPosicao(linha, coluna, "X");
    } else {
        tabuleiro.setPosicao(linha, coluna, "O");
    }

    qtd++;
}

public void jogada(Tabuleiro tabuleiro) {

    do {

        System.out.println("É a vez do jogador com id " + getid());

        do {
            linha = menu.lerLinha();
        } while (linha < 0 || linha > 2);

        do {
            coluna = menu.lerColuna();
        } while (coluna < 0 || coluna > 2);

        if (tabuleiro.getPosicao(linha, coluna) != " ") {
            System.out.println("Erro: Essa jogada já foi efetuada!");
            menu.imprimeTabuleiro(tabuleiro);
            break;
        }

    } while (tabuleiro.getPosicao(linha, coluna) != " ");

    jogada(tabuleiro, linha, coluna);

    qtd++;

    if (qtd > 9) {
        System.out.println("Deu empate!");
        System.exit(0);
    }
}
}

import java.util.Scanner;
public class Menu{
	private Scanner sc = new Scanner (System.in);
	private int linha=0, coluna=0;
	public Menu(){
	}
	public void imprimeTabuleiro(Tabuleiro tabuleiro) {
        for (int linha = 0; linha < 3; linha++) {
            for (int coluna = 0; coluna < 3; coluna++) {
                System.out.print(tabuleiro.getPosicao(linha, coluna) + " | ");
            }
            System.out.println();
        }
        System.out.println("______________");
    }
	public int lerLinha() {
    do {
        System.out.print("Digite a linha: ");
        linha = sc.nextInt();
    } while (linha < 0 || linha > 2);
    return linha;
}
	public int lerColuna(){
		
		System.out.print("Digite a coluna: ");
		this.coluna = sc.nextInt();
			return coluna;
		}
	}




public class Tabuleiro {
    private String[][] matriz;
    private String[][] posicoes;

    public Tabuleiro() {
        posicoes = new String[3][3];
        for (int i = 0; i < posicoes.length; i++) {
            for (int j = 0; j < posicoes[i].length; j++) {
                posicoes[i][j] = "";
            }
        }
    }

    public String getPosicao(int linha, int coluna) {
        return posicoes[linha][coluna];
    }

    public String getPosicoes(int a, int b){
        return matriz[a][b];
    }

    public void setPosicao(int linha, int coluna, String valor) {
        posicoes[linha][coluna] = valor;
    }
    public boolean verificaVitoria(String sinal) {
        if ((posicoes[0][0].equals(sinal) && posicoes[0][1].equals(sinal) && posicoes[0][2].equals(sinal)) || // linha 1
            (posicoes[1][0].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[1][2].equals(sinal)) || // linha 2
            (posicoes[2][0].equals(sinal) && posicoes[2][1].equals(sinal) && posicoes[2][2].equals(sinal)) || // linha 3
            (posicoes[0][0].equals(sinal) && posicoes[1][0].equals(sinal) && posicoes[2][0].equals(sinal)) || // coluna 1
            (posicoes[0][1].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][1].equals(sinal)) || // coluna 2
            (posicoes[0][2].equals(sinal) && posicoes[1][2].equals(sinal) && posicoes[2][2].equals(sinal)) || // coluna 3
            (posicoes[0][0].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][2].equals(sinal)) || // diagonal
            (posicoes[0][2].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][0].equals(sinal))) { // diagonal inversa
            return true;
        }
        return false;
	}
}