我在蓝牙Android应用/游戏上工作,这包括两个通过蓝牙连接的玩家,并尝试猜测对方的号码。
这就是我所做的:
这是我无法解决的问题:
我想我需要两个设备之间的处理程序,但我不知道如何实现它。如果你能帮我解决一些问题,我很感激。
这是应用的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";
}