쿠키런 프로젝트 시리즈
1.준비
https://ondolroom.tistory.com/297
2.전역공간
https://ondolroom.tistory.com/298
3.JPanel생성자
https://ondolroom.tistory.com/299
4.mapMove메서드
https://ondolroom.tistory.com/300
5.hit메서드
https://ondolroom.tistory.com/301
6.fall메서드
https://ondolroom.tistory.com/302
7.jump메서드
https://ondolroom.tistory.com/303
8.paintComponent 및 결과
https://ondolroom.tistory.com/304
들어가기 전에...
아래 내용을 숙지하고 시작하자
https://ondolroom.tistory.com/279
더보기를 눌러서 전체 코드를 확인하자.
package Test4;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.plaf.basic.BasicTreeUI.TreeCancelEditingAction;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
public class CookieRun2 {
private JFrame frame;
JPanel panel; // 패널
Button escButton; // esc 버튼 (테스트 중)
// 배경 이미지
private ImageIcon backIc = new ImageIcon("testimg/backTest.png"); // 제일 뒷 배경
private ImageIcon secondBackIc = new ImageIcon("배경이미지2"); // 2번째 배경
// 쿠키 이미지 아이콘들
private ImageIcon cookieIc = new ImageIcon("testimg/cookieTest.png"); // 기본모션
private ImageIcon jumpIc = new ImageIcon("testimg/jumpTest.png"); // 점프모션
private ImageIcon doubleJumpIc = new ImageIcon("testimg/doubleJumpTest.png"); // 더블점프모션
private ImageIcon fallIc = new ImageIcon("testimg/fallTest.png"); // 낙하모션(더블 점프 후)
private ImageIcon slideIc = new ImageIcon("testimg/slideTest.png"); // 슬라이드 모션
private ImageIcon hitIc = new ImageIcon("testimg/hitTest.png"); // 부딛히는 모션
// 젤리 이미지 아이콘들
private ImageIcon jelly1Ic = new ImageIcon("testimg/jelly1Test.png");
private ImageIcon jelly2Ic = new ImageIcon("testimg/jelly2Test.png");
private ImageIcon jelly3Ic = new ImageIcon("testimg/jelly3Test.png");
private ImageIcon jellyHPIc = new ImageIcon("testimg/jellyHPTest.png");
private ImageIcon jellyEffectIc = new ImageIcon("testimg/effectTest.png");
// 발판 이미지 아이콘들
private ImageIcon field1Ic = new ImageIcon("testimg/footTest.png"); // 발판
private ImageIcon field2Ic = new ImageIcon("testimg/footTest2.png"); //공중발판
// 장애물 이미지 아이콘들
private ImageIcon tacle10Ic = new ImageIcon("testimg/tacleTest10.png"); // 1칸 장애물
private ImageIcon tacle20Ic = new ImageIcon("testimg/tacleTest20.png"); // 2칸 장애물
private ImageIcon tacle30Ic = new ImageIcon("testimg/tacleTest30.png"); // 3칸 장애물
private ImageIcon tacle40Ic = new ImageIcon("testimg/tacleTest40.png"); // 3칸 장애물
// 리스트 생성
private List<Jelly> jellyList = new ArrayList<>(); // 젤리 리스트
private List<Field> fieldList = new ArrayList<>(); // 발판 리스트
private List<Tacle> tacleList = new ArrayList<>(); // 장애물 리스트
private int runPage = 0; // 한 화면 이동할때마다 체력을 깎기 위한 변수
private int runStage = 1; // 스테이지를 확인하는 변수이다. (미구현)
private boolean escKeyOn = false; // 일시정지를 위한 esc키 확인
private int resultScore = 0; // 결과점수를 수집하는 변수
private int gameSpeed = 3; // 게임 속도
private int nowField = 2000; // 발판의 높이를 저장.
private boolean downKeyOn = false; // 다운키 눌렀는지 여부
// 이미지 파일로 된 맵을 가져온다.
private int[] sizeArr; // 이미지의 넓이와 높이를 가져오는 1차원 배열
private int[][] colorArr; // 이미지의 x y 좌표의 픽셀 색값을 저장하는 2차원배열
private Image buffImage; // 더블버퍼 이미지
private Graphics buffg; // 더블버퍼 g
private AlphaComposite alphaComposite; // 투명도 관련 오브젝트
Cookie c1; // 쿠키 오브젝트
Back b11; // 배경1-1 오브젝트
Back b12; // 배경1-2 오브젝트
int face; // 쿠키의 정면
int foot; // 쿠키의 발
class MyPanel extends JPanel{
public MyPanel() {
}
@Override
protected void paintComponent(Graphics g) {
}
}
void mapMove(){
}
void hit() {
}
void fall() {
}
void jump() {
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CookieRun2 window = new CookieRun2();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public CookieRun2() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 800, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new MyPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
escButton = new Button("재시작");
escButton.setBounds(350, 240, 50, 30);
escButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
panel.remove(escButton);
escKeyOn = false;
}
});
}
}
설명
프레임과 패널 버튼 등을 전역공간에 배치
프레임과 패널 버튼 등을 전역공간에 두는 것은, 클래스 내의 다른객체나 메서드들이 이용 할 수 있도록 하기 위함이다.
이미지 배치
게임에 이용할 이미지들을 배치한다
리스트 배치
젤리와 발판, 장애물 객체들을 저장할 리스트를 배치한다.
게임관련 변수 배치
paintComponent 관련 레퍼런스 배치
기타 레퍼런스들
클래스 내부 어디서든 사용할 수 있도록 전역공간에 선언해둔다
커스텀 JPanel
내가 직접 커스텀한 패널을 사용하기 위해 클래스 안에 inner클래스로 만들어준다.
메서드
메서드 들을 채워나갈 예정이다.
기타
위 코드 대부분은 windowBuilder에서 만들어 준 것이고
수정한 것은
new JPanel을 new MyPanel로 내가 커스텀한 패널로 교체 해주었다.
그리고 재시작 버튼은 미리 만들어 두었다. (esc키를 누르면 생성 되었다가 다시 사라지게 할 예정)
'Programming Language > Java' 카테고리의 다른 글
자바 스윙 쿠키런 만들기 mapMove() 메서드 (프로젝트 진행) (0) | 2020.05.06 |
---|---|
자바 스윙 쿠키런 만들기 MyPanel 생성자 수정 (프로젝트 진행) (2) | 2020.05.06 |
자바 스윙 쿠키런 제작 준비 (프로젝트 진행) (2) | 2020.05.05 |
자바 스윙 이미지로 발판 및 젤리 구현하기 (프로젝트 대비) (0) | 2020.05.03 |
자바 스윙 2중 for문 없이 다중발판 구현하기 (프로젝트 대비) (0) | 2020.05.02 |