배열로 발판과 젤리를 만드는 것은 직관적이지 않고 배치하기가 쉽지 않다.

그래서 이미지를 읽어들여서 발판과 젤리를 배치하도록 만들어 보려고 한다.

 

참고 사이트

https://sunnyholic.com/79

 

이미지에서 픽셀 배열 얻기.

File imgf = new File("source.png"); BufferedImage img = ImageIO.read(imgf); int width = img.getWidth(); int height = img.getHeight(); int[] pixels=new int[width*height]; PixelGrabber grab = new Pixe..

sunnyholic.com

 

 

맵이미지 그리기

맵의 크기는 200 * 12로 하였다.

아주 작게 보이니 돋보기로 확대를 하여 그리도록 하자.

8배로 확대한 사진이다.

발판은 검은색이며 2칸 2칸 마다 만들어 두면 된다. (귀찮음 때문에 쭉 그어 버렸다.)

젤리는 1칸1칸마다 만들 수 있다. 

 

이미지를 값으로 가져오는 클래스 생성

코드를 복사하려면 더보기 클릭

더보기
package Test3;

import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.File;

import javax.imageio.ImageIO;

public class Bf2 {
	
	static int[] getSize(String src) throws Exception { // 이미지의 사이즈를 가져오는 메서드
		File imgf = new File(src); // 이미지 경로를 입력받아서 파일객체를 만든다.
		BufferedImage img = ImageIO.read(imgf); // 이미지를 버퍼드이미지에 넣는다.
		int width = img.getWidth(); // 이미지의 넓이
		int height = img.getHeight(); // 이미지의 높이
		int[] tempPos = {width, height}; // 넓이 높이를 배열로 만든다.
		return tempPos; // 리턴한다.
	}
	
	static int[][] getPic(String src) throws Exception{ // 아래 코드는 어디다가 갖다두고 쓰자.
		File imgf = new File(src);
		BufferedImage img = ImageIO.read(imgf);
		int width = img.getWidth();
		int height = img.getHeight();
		int[] pixels=new int[width*height];
		PixelGrabber grab = new PixelGrabber(img, 0, 0, width, height, pixels, 0,width);
		grab.grabPixels();
		
		int[][] picture=new int[width][height];
		for(int i=0;i<pixels.length;i++)
		      picture[i%width][i/width]=pixels[i] + 16777216;
		return picture;
	}
	
	public static void main(String[] args) {
        int x = 10;
        int y = 21;
        try {
        	int[] tempArr1 = getSize("img/firstMap.png");
        	int maxX = tempArr1[0];
        	int maxY = tempArr1[1];
        	
        	int[][] tempArr = getPic("img/firstMap.png");
        	
        	for (int i = 0; i <	 maxX; i+=1) {
        		for (int j = 0; j < maxY; j+=1) {
        			System.out.println(tempArr[i][j]);
					
				}
			}
        	
        	
		} catch (Exception e) {
			e.printStackTrace();
		}
        
	}
}

 

 

전역공간에 젤리이미지와 리스트 추가

젤리리스트와 발판리스트를 만든다.

색값을 담을 2차원 배열과

이미지의 사이즈를 담을 배열을 선언한다.

 

패널에서 이미지 불러오기

sizeArr과 colorArr를 초기화 해준다.

미리만들어둔 fieldList와 jellyList에 발판과 젤리를 추가한다.

 

배경 및 발판 이동 쓰레드 수정

배경 및 발판 이동 쓰레드 내용에 아래 내용들을 추가하자

 

 

paintComponent에 발판과 젤리를 그려주자

buffg는 더블버퍼링 관련 내용이기 때문에, 쓰지않는 사람은 g로 바꾼다.

 

결과

 

 

리스트를 하나더 추가하여 아래와 같이 장애물도 만들어보자

+ Recent posts