Ir para o conteúdo
Xikoreo

Prencher matriz com BufferedImage

Mensagens Recomendadas

Xikoreo

Boas, eu estou a fazer um jogo de plataformas onde faço o desenho do ambiente gráfico através de txt onde tenho o que está representado em baixo.

33333333333333333333333333333333

30000000000000000000000000000003

00000000000000000000000000000003

00000000000000000000000000000003

32222220020202020202222000000003

30000000000000000000000000000003

30000000000000000000000222222203

30000000000000000000000000000003

30000000111100000000000000000023

30000000000000000000000000000003

30000000000000000000000000002223

30000000000000000000000000020003

30000000000000000000000000200003

32222200000000000000000002000003

30000000000000000000000020000003

30000022222200000000000200000003

30000000000000000000002000000003

32222220000000000000020000000003

30000000000000000000000000000003

34444444444444444444444444444443

Os zeros são ar, o 4 chão, o 3 paredes e o 1 e 2 plataformas.

Eu tenho um código em que de acordo com o que está no txt pinta com cor diferente. Mas o que quero é em vez de pintar com cores que importe uma imagem com o BufferedImage e preencha de acordo com o valor que está no txt. Ao ler o txt e ver que está lá um 4 preencher onde está o 4 com uma imagem de um chão e por ai adiante...

Em baixo está o código que estou a usar:

package jogo_plataformas;

import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class salaLVL1 {

    BufferedImage img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
    int sala[][] = new int[20][32];
    
    URL ceuImg = getClass().getClassLoader().getResource("./imagens/test.jpg");
    URL cor1 = getClass().getClassLoader().getResource("./imagens/test.jpg");
    URL cor2 = getClass().getClassLoader().getResource("./imagens/test.jpg");
    URL paredeImg = getClass().getClassLoader().getResource("./imagens/teste.jpg");
    URL soloImg = getClass().getClassLoader().getResource("./imagens/test.jpg");

     BufferedImage imgCeu = null;
     BufferedImage aplicacaoCeu = null;


    public BufferedImage salaLVL1() {
        try {
            ler();
        } catch (IOException ex) {
            Logger.getLogger(salaLVL1.class.getName()).log(Level.SEVERE, null, ex);
        }
        return img;
    }

    private void ler() throws IOException {
        File inputFile = new File("sala.txt");//abre o ficheiro
        Scanner scanner = new Scanner(inputFile, "UTF-8");//lê o ficheiro
        String c[] = new String[32];
        for (int i = 0; i < 32; i++) {
            if (scanner.hasNextLine()) {
                c[i] = scanner.nextLine();
            }
        }

        for (int i = 0; i < 20; i++) {
            for (int j = 0; j < 32; j++) {
                sala[i][j] = Integer.parseInt(c[i].substring(j, j + 1));//tira letra a letra da string
                Background(img, j * 20, i * 20, sala[i][j]);
            }
        }
    }

    //Desenho do labirinto
    private static BufferedImage Background(BufferedImage bi, int x, int y, int cor) {
        //verifica se a imagem é nula

      

        if (bi == null) {
            return null;
        }

        //criacao cor
        int rgb[] = new int[3];
        if (cor == 1) { //plataforma tipo 1

//            try {
//                temp_img = ImageIO.read(cor1);
//            } catch (IOException ex) {
//            }

            int[] cor2 = {0, 0, 255};
            rgb = cor2;
        } else if (cor == 2) { //plataforma tipo 2

//             try {
//                temp_img = ImageIO.read(cor2);
//            } catch (IOException ex) {
//            }

            int[] cor3 = {0, 255, 0};
            rgb = cor3;
        } else if (cor == 3) { //parede

//            try {
//                temp_img = ImageIO.read(paredeImg);
//            } catch (IOException ex) {
//            }

            int[] cor4 = {255, 0, 0};
            rgb = cor4;
        } else if (cor == 0) { // céu

//             try {
//                temp_img = ImageIO.read(ceuImg);
//            } catch (IOException ex) {
//            }

            int[] cor1 = {0, 0, 0};
            rgb = cor1;
        } else { // Solo

//            try {
//                temp_img = ImageIO.read(soloImg);
//            } catch (IOException ex) {
//            }

            int[] cor4 = {255, 0, 255};
            rgb = cor4;
        }

        //Desenho labirinto através de blocos de 20x20
        WritableRaster raster = bi.getRaster();
        for (int temp_x = x; temp_x < x + 20; temp_x++) {
            for (int temp_y = y; temp_y < y + 20; temp_y++) {
                raster.setPixel(temp_x, temp_y, rgb);
            }
        }

//        int rgb[] = new int[3];
//        WritableRaster raster = bi.getRaster();
//        WritableRaster raster_temp = temp_img.getRaster();
//        raster.setPixels(x, y, x + 19, y + 19, raster_temp.getPixels(0, 0, 19, 19, rgb));

        //retorna imagem
        return bi;
    }
}

Se me puderem ajudar agradeço....

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon

Coloca as tags de code, para o código aparecer decentemente.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.