배열로 발판과 젤리를 만드는 것은 직관적이지 않고 배치하기가 쉽지 않다.
그래서 이미지를 읽어들여서 발판과 젤리를 배치하도록 만들어 보려고 한다.
참고 사이트
맵이미지 그리기
맵의 크기는 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로 바꾼다.
결과
리스트를 하나더 추가하여 아래와 같이 장애물도 만들어보자
'Programming Language > Java' 카테고리의 다른 글
자바 스윙 쿠키런 만들기 전역 변수 선언하기 (프로젝트 진행) (2) | 2020.05.05 |
---|---|
자바 스윙 쿠키런 제작 준비 (프로젝트 진행) (2) | 2020.05.05 |
자바 스윙 2중 for문 없이 다중발판 구현하기 (프로젝트 대비) (0) | 2020.05.02 |
자바 스윙 다중 발판 구현하기 (프로젝트 대비) (0) | 2020.05.02 |
자바 스윙 투명화 구현하기 (프로젝트 대비) (0) | 2020.05.02 |