Pintar tablero

Hola necesito pintar el siguiente tablero
&&&&&&&&&&
&&&&&&&&&&
&&######&&
&&#a**b#&&
&&#a**b#&&
&&#cdde#&&
&&#cfge#&&
&&#a&&b#&&
&&##--##&&
&&&&&&&&··
&&&&&&&&··
"*" pieza singular
"a-g" otras piezas piezas
"#" paredes
"·" posicion objetivo
"--" paredes
"&" vacio, cuadrado vacio
la verdad que no he podido hacerlo, el tablero esta guardado en un archivo el cual he podido leer sin ningun problema cuando lo guardo en una matriz pareciera que no guarda nada ya que cuando mando imprimir la matriz no imprime nada lo que quiero es que en el frame salgan pintadas(diferentes colores) no se que estoy haciendo mal gracias y disculpa la molestia.
2

2 respuestas

Respuesta
1
Si no te imprime nada cuando lo mandas a imprimir algo debe estar mal en tu lectura, yo probe el programa que te escribi y funcionó bien. Puedes poner el codigo aqui para que lo cheque bien.
import java.awt.*;
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
public class Lienzo {
public static void main(String[] args) {
Frame f = new Frame("KLOTSKI");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
public void paint(Graphics g) {
f.add(new
MiCanvas(), BorderLayout.CENTER);
f.pack();
f.show();
}
try{
//Abrimos el archivo
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\klotski.txt")));
//Leemos la primera linea que es en la que esta el numero de filas
int filas=Integer.parseInt(in.readLine());
//Leemos la segunda linea que es en la que esta el numero de columnas
int columnas=Integer.parseInt(in.readLine());
//Creamos el arreglo con las dimensiones dadas
char mat[][]=new char[filas][columnas];
//Leemos los caracteres
for(int i=0;i for(int j=0;j mat[i][j]=(char)(in.read());
if(mat[i][j]=='*'){
g.setColor(Color.red);
g.fillRect(0,0,10,10);
}
else if(mat[i][k]=='&'){
g.setColor(Color.white);
g.fillRect(0,0,20,20);
}
else if(mat[i][k]=='#'){
g.setColor(Color.yellow);
g.fillRect(0,0,20,20);
}
if(mat[i][k]=='·'){
g.setColor(Color.gray);
g.fillRect(0,0,20,20);
}
else if(mat[i][k]=='-'){
g.setColor(Color.black);
g.fillRect(0,0,20,20);
}
//Cerramos el archivo
in.close();
}catch(Exception e){}
}
aqui esta en la parte de la comparacion falta mas caracteres pa completar el tablero
No se entendio tu respuesta porque la pagina le agregó otras cosas pero de lo que mas o menos entendi que querias hacer aqui te pongo una forma en la que lo puedes hacer:
import java.awt.*;
import java.io.*;
public class Tablero extends Frame{
 char arreglo[][];
 Tablero(){
   setSize(600,600);
   try{
    BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream("archivo.txt")));
    int filas=Integer.parseInt(in.readLine());
    int columnas=Integer.parseInt(in.readLine());
    arreglo=new char[filas][columnas];
    for(int i=0;i < filas;i++){
     for(int j=0;j < columnas;j++){
      arreglo[ i ][ j ]=(char)(in.read());
     }
    }
    in.close();
   }catch(Exception e){}
 }
 //Este metodo es el que se llama cada vez que la ventana necesite pintarse
 public void paint(Graphics g){
   //PosX y posY se utilizan para ir cambiando la posicion en la que se pintara el rectangulo
   //ancho y alto son precisamente el ancho y alto del rectangulo
   int posX,posY,ancho=25,alto=25;
   Color col=null;
   //Recorremos los elementos del arreglo
   posY=0;
   for(int i=0;i < arreglo.length;i++){
    posX=0;
    for(int j=0;j < arreglo[ i ].length; j++){
      //Escogemos el color a pintar segun el caracter (&,#,etc.)
      if(arreglo[ i ][ j ]=='&')col=Color.GREEN;
      else if(arreglo[ i ][ j ]=='#')col=Color.WHITE;
      //Asignamos el color
      g.setColor(col);
      //Dibujamos el rectangulo
      g.fillRect(posX,posY,ancho,alto);
      posX+=ancho;
    }
     posY+=alto;
   }
 }
 public static void main(String arg[]){
  Tablero t=new Tablero();
  t.show();
 }
}
Con esto ya deberias poder hacer lo que te falta.
he corrido tu codigo y a la hora de mostrar en pantalla el frame sale completamente en blanco no se que estoy haciendo mal pero gracias de todas formas y disculpa la molestia
Checa que el nombre del archivo sea correcto y que tengas el archivo en esa carpeta, en esta linea:
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStreamReader("archivo.txt")));
El formato de tu archivo debe quedar algo asi (si fuera de 6 x 6) y todos los caracteres ( &, #, etc.) deben estar en una sola linea como te lo pongo aqui para que funcione:
6
6
&#&#&##&#&#&&#&#&##&#&#&&#&#&##&#&#&
estoy corriendo tu codigo el cual deberia imprimir el archivo que esta al final, en entorno grafico no se que estoy haciendo mal ya que el frame sale en pantalla completamente en blanco por favor ayudame gracias y disculpa la molestia
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class tabler extends Frame {
char arreglo[][];
tabler(){
setSize(500,600);
try{
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream("C:\\klotski.txt")));
int filas=Integer.parseInt(in.readLine());
int columnas=Integer.parseInt(in.readLine());
arreglo=new char[filas][columnas];
for(int i=0;i < filas;i++){
for(int j=0;j < columnas;j++){
arreglo[ i ][ j ]=(char)(in.read());
}
}
in.close();
}catch(Exception e){}
}
//Este metodo es el que se llama cada vez que la ventana necesite pintarse
public void paint(Graphics g){
//posX y posY se utilizan para ir cambiando la posicion en la que se pintara el rectangulo
//ancho y alto son precisamente el ancho y alto del rectangulo
int posX,posY,ancho=25,alto=25;
Color col=null;
//Recorremos los elementos del arreglo
posY=0;
for(int i=0;i < arreglo.length;i++){
posX=0;
for(int j=0;j < arreglo[ i ].length; j++){
//Escogemos el color a pintar segun el caracter (&,#,etc.)
if(arreglo[ i ][ j ]=='*')col=Color.red;
else if(arreglo[ i ][ j ]=='a')col=Color.yellow;
else if(arreglo[ i ][ j ]=='b')col=Color.BLUE;
else if(arreglo[ i ][ j ]=='c')col=Color.CYAN;
else if(arreglo[ i ][ j ]=='d')col=Color.GREEN;
else if(arreglo[ i ][ j ]=='e')col=Color.LIGHT_GRAY;
else if(arreglo[ i ][ j ]=='f')col=Color.MAGENTA;
else if(arreglo[ i ][ j ]=='g')col=Color.ORANGE;
else if(arreglo[ i ][ j ]=='#')col=Color.gray;
else if(arreglo[ i ][ j ]=='-')col=Color.DARK_GRAY;
else if(arreglo[ i ][ j ]=='&')col=Color.white;
else if(arreglo[ i ][ j ]=='·')col=Color.red;
//Asignamos el color
g.setColor(col);
//Dibujamos el rectangulo
g.fillRect(posX,posY,ancho,alto);
posX+=ancho;
}
posY+=alto;
}
}
public static void main(String arg[]){
tabler t=new tabler();
t.show();
t.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
//t.setBackground(Color.yellow);
}
}
archivo
&&&&&&&&&&
&&&&&&&&&&
&&######&&
&&#a**b#&&
&&#a**b#&&
&&#cdde#&&
&&#cfge#&&
&&#a&&b#&&
&&##--##&&
&&&&&&&&··
&&&&&&&&··
"*" pieza singular
"a-g" otras piezas piezas
"#" paredes
"·" posicion objetivo
"--" paredes
"&" vacio, cuadrado vacio
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStreamReader("archivo.txt")));
FileInputStreamReader al colocar esto que me acabo de dar cuenta que es distinto a primer codigo me da error no se si es por falta de libreria o es incorrecto
Perdon, me equivoque en eso. Es FileInputStream
En el archivo no estas poniendo el numero de filas y columnas, y tambien le estas poniendo saltos de linea entre los caracteres que representan el tablero.
Deberia quedaren la primera linea el numero de filas, en la segunda linea el numero de columnas y en la tercera linea todos los caracteres que representan el tablero (sin saltos de linea o enter)
Osea que como tienes 11 filas y 10 columnas en lo que me mostraste, lo unico que deberia tener tu archivo es esto:
11
10
&&&&&&&&&&&&&&&&&&&&&&######&&&&#a**b#&&&&#a**b#&&&&#cdde#&&&&#cfge#&&&&#a&&b#&&&&##--##&&&&&&&&&&··&&&&&&&&··
Respuesta
1
No entiendo exactamente el problema, si me puedes enseñar el trozo de código en el que guardas los objetos en la matriz y luego los mandas imprimir, quizás los entendería mejor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas