-2

私の小さなプログラムは、map1.txtという名前の.txtファイルから読み取り、その中の文字をChar[][]配列に格納することになっています。map1.txtの文字に応じて、文字が「x」の場合はタイルクラスが赤で描画され、そうでない場合は緑で描画されます。(代わりに、プログラムは赤と緑のボックスの代わりにパネルの後ろにあるものを表示します。編集)。

これは私のプログラムであることに注意してください...

public class MainClass extends JPanel {
    static Tile[][] tile = new Tile[SomeInts.amount][SomeInts.amount];
    static Map map = new Map();
    public MainClass () {
        this.setBackground(Color.white);
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        for (int x = 0; x < SomeInts.amount; x++){
            for (int y = 0; y < SomeInts.amount; y++){
                tile[x][y].colorBody(g, x, y);
            }
        }
    }
    //Most important
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(500, 500);
        f.setLocation(100,100);
        f.setTitle("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MainClass p = new MainClass ();
        f.add(p);
        f.setVisible(true);
            //load map
        map.loadMap();
        for (int x = 0; x < SomeInts.amount; x++){
            for (int y = 0; y < SomeInts.amount; y++){
                tile[x][y] = new Tile();
            }
        }
        for (int x = 0; x < SomeInts.amount; x++){
            for (int y = 0; y < SomeInts.amount; y++){
                tile[x][y].setType(map.charmap[x][y]);
            }
        }
    }
}

public class Tile {
    char type = 'a';
    public void setType(char c){
        type = c;
    }
    public void colorBody(Graphics g, int x, int y){
        if (type == 'x'){
            g.setColor(new Color(255, 0, 0));
            g.fillRect(x * 10, y * 10, 10, 10);
        }
        else{
            g.setColor(new Color(0, 255, 0));
            g.fillRect(x * 10, y * 10, 10, 10);
        }
    }   
}

public class Map {
    public char[][] charmap = new char[SomeInts.amount][SomeInts.amount];
    public void loadMap(){
        BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader("map1.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        String line = null;
        try {
            line = in.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (line != null){
            int y = 0;
            for (int x = 0; x < line.length(); x++){
                charmap[x][y] = line.charAt(x);
            }
            y++;
        }
    }

    //Not used but does work
    public void createMap() {
          for (int x = 0; x < SomeInts.amount; x++){
              for (int y = 0; y < SomeInts.amount; y++){
                  charmap[x][y] = 'x';
              }
          }
    }
}
4

1 に答える 1

1

表示しているコードには無限ループがあり、ここでの考え方は少しずれています。あなたが持っているロジックは行を読み取り、その行がnullでない限りループします。行が最初からnullであったか、そうでなかったかのいずれかで、それ自体は変更されません。現在の行を処理したら、新しい行を読み取る必要があります。

また、ループの外でyのリセットを0に移動する必要があります。ここで、yを0に設定し、1つ増やしてから、もう一度0に戻します。

String line = null;
int y = 0;
try {
    while ((line = in.readLine())!= null) {
        for (int x = 0; x < line.length(); x++){
            charmap[x][y] = line.charAt(x);
        }
        y++;
    }
} catch (IOException e) {
    e.printStackTrace();
}
于 2012-10-02T11:23:19.647 に答える