我试图显示所有具有相同宽度的unicode字符以制作游戏地图但是当我运行我的应用程序时,unicode字符“SUN”(\ u2600)的宽度比unicode字符“WALL”( █)。 因此,我的游戏地图不是一个完美的广场。
我正在以这种方式显示地图:
然后我有:
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;
}
}