在Android TextView中显示具有相同宽度的unicode字符

时间:2015-11-16 18:23:35

标签: java android unicode character

我试图显示所有具有相同宽度的unicode字符以制作游戏地图但是当我运行我的应用程序时,unicode字符“SUN”(\ u2600)的宽度比unicode字符“WALL”( █)。 因此,我的游戏地图不是一个完美的广场。

My game map.

我正在以这种方式显示地图:

Code 1

然后我有:

private String mapa[][];

private String PARED = "\u2588\u2588";

private String ESPACIO = "      ";

private String PUERTA = "\u25A2\u25A2";

private String SOL = "\u2600";

private String SNOWMAN = "\u2603";

有没有解决方案呢?

谢谢。

代码:

package es.snowland.snowman;

import android.annotation.TargetApi;
import android.graphics.Typeface;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Objects;

public class JuegoPrincipal extends AppCompatActivity {

    private Button botonArriba;
    private Button botonAbajo;
    private Button botonDerecha;
    private Button botonIzquierda;
    private TextView mostrarMapa;
    private TextView textview_mostrar_info;
    private String mapa[][];
    private String[][] mapaAux;
    private String[] aux;
    private String PARED = "\u2588\u2588";
    private String ESPACIO = "\u2588\u2588";
    private String PUERTA = "\u25A2\u25A2";
    private String SOL = "\u2600";
    private String SNOWMAN = "\u2603";
    private int POSX = 7;
    private int APOSX = 7;
    private int POSY = 3;
    private int APOSY = 3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_juego_principal);

        botonArriba = (Button) findViewById(R.id.boton_juego_arriba);
        botonAbajo = (Button) findViewById(R.id.boton_juego_abajo);
        botonDerecha = (Button) findViewById(R.id.boton_juego_derecha);
        botonIzquierda = (Button) findViewById(R.id.boton_juego_izquierda);
        mostrarMapa = (TextView) findViewById(R.id.mostrar_mapa);
        mostrarMapa.setTypeface(Typeface.MONOSPACE);
        textview_mostrar_info = (TextView) findViewById(R.id.Textview_mostrar_info);

        mapa = new String[][]{{PARED, PARED, PARED, PARED, PARED , PARED , PARED , PARED , PARED , PARED},
                {PARED , ESPACIO , ESPACIO , ESPACIO , ESPACIO , SOL , PARED , ESPACIO , ESPACIO , PARED},
                {PARED , ESPACIO , PARED , ESPACIO , ESPACIO , ESPACIO , ESPACIO , ESPACIO , PARED , PARED},
                {PARED , ESPACIO , PARED , ESPACIO , ESPACIO , PARED , SOL , ESPACIO , ESPACIO , PUERTA},
                {PARED , ESPACIO , PARED , ESPACIO , ESPACIO , SOL , PARED , PARED , PARED , PARED},
                {PARED , ESPACIO , PARED , SOL , ESPACIO , ESPACIO , ESPACIO , ESPACIO , SOL , PARED},
                {PARED , ESPACIO , PARED , PARED , PARED , ESPACIO , PARED , ESPACIO , ESPACIO , PARED},
                {PARED , ESPACIO , ESPACIO , SNOWMAN , PARED , PARED , ESPACIO , ESPACIO , ESPACIO , PARED},
                {PARED , ESPACIO , PARED , ESPACIO , ESPACIO , ESPACIO , ESPACIO , SOL , PARED , PARED},
                {PARED , PARED , PARED , PARED , PARED , PARED , PARED , PARED , PARED , PARED}};

        mostrarMapa();

        botonArriba.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moverSnowman(-1, 0);
            }
        });

        botonAbajo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moverSnowman(1,0);
            }
        });

        botonDerecha.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moverSnowman(0,1);
            }
        });

        botonIzquierda.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                moverSnowman(0,-1);
            }
        });

    }

    private void mostrarMapa() {
        mostrarMapa.setText("");
        for(int i = 0; i < mapa.length; i++)
        {
            for(int j = 0; j < mapa.length; j++)
            {
                mostrarMapa.append(mapa[i][j]);
            }
            if (i != mapa.length -1) {
                mostrarMapa.append("\n");
            }
        }
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void moverSnowman(int posx, int posy){
        if (Objects.equals(mapa[POSX + posx][POSY + posy], SOL)) {
            textview_mostrar_info.setText("Es un Sol, has perdido -.-");
            //desactivarBotones();
        } else {
            if (Objects.equals(mapa[POSX + posx][POSY + posy], PARED)) {
                textview_mostrar_info.setText("Una bonita pared se encuentra delante tuya.");
            } else {
                if (Objects.equals(mapa[POSX + posx][POSY + posy], PUERTA)) {
                    textview_mostrar_info.setText("Enhorabuena, eres el puto amo.");
                    //desactivarBotones();
                } else {
                    APOSX = POSX;
                    APOSY = POSY;
                    POSX = POSX + posx;
                    POSY = POSY + posy;
                    mapa = moverse(mapa);
                    mostrarMapa();
                }
            }
        }
    }

    private String[][] moverse (String[][] planocopia){
        mapaAux = new String [10][10];
        for (int i = 0; i < planocopia.length;i++){
            aux = new String[10];
            for (int j = 0; j < planocopia.length;j++){
                if (i == APOSX && j == APOSY){
                    aux[j] = ESPACIO;
                }else{
                    if (i == POSX && j == POSY){
                        aux[j] = SNOWMAN;
                    }else{
                        aux[j] = planocopia[i][j];
                    }
                }
            }
            mapaAux[i] = aux;
        }
        return mapaAux;
    }

}

0 个答案:

没有答案