基于回合的Android应用程序(蓝牙)

时间:2018-01-17 02:16:08

标签: android android-studio bluetooth

我在蓝牙Android应用/游戏上工作,这包括两个通过蓝牙连接的玩家,并尝试猜测对方的号码。

这就是我所做的:

  • 通过蓝牙连接两台设备。
  • 选择您的电话号码。
  • 尝试猜测对方的号码并获得结果。
  • 显示对手的猜测。
  • 赢,如果有人猜对方的号码。

这是我无法解决的问题:

  • 当两者都选择数字时,随机将转弯设为1,并禁用对方的UI。
  • 每回合放一个计时器。

我想我需要两个设备之间的处理程序,但我不知道如何实现它。如果你能帮我解决一些问题,我很感激。

这是应用的screenshot

这是我的代码的一部分:

private Handler handler = new Handler(new Handler.Callback() {

    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case MESSAGE_STATE_CHANGE:
                switch (msg.arg1) {
                    case ServicioBluetooth.STATE_CONNECTED:
                        actionBar.setSubtitle("Conectado: " + connectingDevice.getName());
                        empezarJuego();
                        break;
                    case ServicioBluetooth.STATE_CONNECTING:
                        actionBar.setSubtitle("Conectando...");
                        break;
                    case ServicioBluetooth.STATE_LISTEN:
                    case ServicioBluetooth.STATE_NONE:
                        actionBar.setSubtitle("No conectado");
                        terminarJuego();
                        break;
                }
                break;
            case MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;

                String writeMessage = new String(writeBuf);
                if (numElegido.equals("")) {
                    numElegido = writeMessage;
                    mostrarNumElegido.setText(numElegido);
                    readyPlayer1 = true;
                    jugadoresListos();
                }
                else{
                    if (writeMessage.equals(numRival)){
                        mostrarGanador("GANASTE");
                    }
                    resultados.add(compararNumeros(writeMessage));
                    resultadoAdapter.notifyDataSetChanged();
                }
                break;
            case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;

                String readMessage = new String(readBuf, 0, msg.arg1);
                if (numRival.equals("")){
                    numRival = readMessage;
                    listos++;
                    Toast.makeText(InicioActivity.this, connectingDevice.getName() + " listo!", Toast.LENGTH_LONG).show();
                    readyPlayer2 = true;
                    jugadoresListos();
                }
                else{
                    if (readMessage.equals(numElegido)){
                        mostrarGanador("GANÓ " + connectingDevice.getName());
                    }
                    numsContrario.add(readMessage);
                    numContrarioAdapter.notifyDataSetChanged();

                }
                break;
            case MESSAGE_DEVICE_OBJECT:
                connectingDevice = msg.getData().getParcelable(DEVICE_OBJECT);
                Toast.makeText(getApplicationContext(), "Connected to " + connectingDevice.getName(),
                        Toast.LENGTH_SHORT).show();
                break;
            case MESSAGE_TOAST:
                Toast.makeText(getApplicationContext(), msg.getData().getString("toast"),
                        Toast.LENGTH_SHORT).show();
                break;
        }
        return false;
    }
});

private String verficarNumero(String num){
    String primerNum = num.substring(0,1);
    String comparado;
    String comparando;
    if (num.length() < 4){
        return "Debe tener 4 digitos";
    }
    if (primerNum.equals("0")){
        return "No puede empezar por 0";
    }
    for (int i=0; i<num.length()-1; i++){
        comparado = num.substring(i,i+1);
        for (int j=i+1; j<num.length(); j++){
            comparando = num.substring(j,j+1);
            if (comparado.equals(comparando)) {
                return "No debe haber números repetidos";
            }
        }
    }
    return "";
}

private void empezarJuego(){
    tv_msjInicio.setVisibility(View.GONE);

    tv_resultado.setVisibility(View.VISIBLE);
    btnListo.setVisibility(View.VISIBLE);
    estado.setVisibility(View.VISIBLE);
    numero.setVisibility(View.VISIBLE);
    listaNumsContrario.setVisibility(View.VISIBLE);
    listaResultados.setVisibility(View.VISIBLE);
    mostrarNumElegido.setVisibility(View.VISIBLE);
}

private void terminarJuego(){
    tv_msjInicio.setVisibility(View.VISIBLE);

    tv_resultado.setVisibility(View.GONE);
    btnListo.setVisibility(View.GONE);
    estado.setVisibility(View.GONE);
    numero.setVisibility(View.GONE);
    listaNumsContrario.setVisibility(View.GONE);
    listaResultados.setVisibility(View.GONE);
    mostrarNumElegido.setVisibility(View.GONE);

    numElegido = "";
    numRival = "";
    listos = 0;
}

private void mostrarGanador(String name){
    try {
        Intent intent = new Intent(getBaseContext(), GanadorActivity.class);
        intent.putExtra("winner_name", name);
        startActivity(intent);
    }
    catch(Exception ex){
        Log.d("Ganador", "Error: " + ex.getMessage());
        System.out.print("Error: " + ex.getMessage());
    }
}

private String compararNumeros(String num){
    String comparado;
    String comparando;
    int bien = 0;
    int regular = 0;
    int mal = 0;
    String res = "";

    for (int i=0; i<num.length(); i++){
        comparado = num.substring(i, i+1);
        res += comparado + " ";
        for (int j=0; j<numRival.length();j++){
            comparando = numRival.substring(j,j+1);
            if (comparado.equals(comparando)){
                if (i == j){
                    bien++;
                }
                else
                    regular++;
            }
        }
    }
    mal = 4 - (bien + regular);
    return res + "  -   " + bien + "b  " + regular + "r  " + mal + "m";
}

0 个答案:

没有答案