검색결과 리스트
개발/코딩에 해당되는 글 68건
- 2013.11.19 서블릿 프로그래밍
- 2013.11.19 스타일 시트
- 2013.11.19 자바 스크립트
- 2013.11.19 유용한 HTML태그들
- 2013.11.19 JSP 디렉티브1
- 2013.11.18 서블릿 설명 홈피
- 2013.11.15 JSP 스크립트 1
- 2013.11.15 JSP 작동방식 1
- 2013.11.15 JSP특징
- 2013.10.21 비행기 겜 완성
글
서블릿 프로그래밍
1. HTTP GET 메소드
-서버의 URI에 의해 참조되는 정보를 요청
(웹 브라우저에서 사이트 방문하는 경우)
-웹 서버에 데이터를 요청
-데이터를 웹 서버에 전송(데이터 길이 제한, 전송 여부 확인 불가)
2. HTTP HEAD 메소드
-해당 페이지가 존재하는지 여부와 페이지에 대한 정보 얻기 위해 사용
-웹페이지에 대한 정보만 웹브라우저에 전달 (값은 처리하지 않는다)
3. HTTP POST 메소드
-클라이언트의 데이터를 웹 서버에 전달(게시판에 글, 로그인 할때)
-파일 전송
-길이에 제한 없으며, 전달 여부 확인 가능
-전달 할때는 entity body 부분에 포함시켜 전달
4. 사용자 데이터 처리
-HTTP의 GET과 POST방식으로 전달 -> 서블릿의 doGet(), doPost() 구현
(get : 서버가 가지고 있는 웹페이지를 달라
post: 클라이언트가 서버에게 데이터 전달하고 데이터를 처리해달라)
-전달된 데이터는 HttpServletRequtst의
getParameter(), getParameterValues(), getParameterNames()
(getParameter():클라이언트가 어떤 데이터를 보냈는지 알아냈는지 알아냈을때 사용)
5. 서블릿 라이프 사이클
(1) init : 서블릿이 메모리에 load,초기화 작업
- 서블릿이 만들어지고 최초에 한번 호출될때 메모리에 한번 만들어진다
(2)service : 클라이언트의 요청을 thread로 실행
(그 다음에 호출할때 init을 거치지않고 만들어진다, doGet()과 doPost()와 역할이 똑같다 )
(3)destory : 서블릿이 메모리에서 제거 (한번 호출)
서블릿 에서 System.exit(0)사용하지 말것-> 컨테이너가 종료된다
6. HttpServlet
•HTTP 서비스를 위한 기능을 제공
•destroy(), getInitParameter(String), getInitiParameterNames(), getServletContext(), init(), init(ServletConfig), log(String), getLastModified(HttpServletRequest), service(HttpServletRequest, HttpServletResponse), service(ServletRequest, ServletResponse)
•doGet(), doPost(), doDelete(), doOptions(), doHeader(), doPut(), doTrace()
7. HttpServletRequest
-웹 클라이언트로부터 전달되는 요청을 처리
-getCookies()
-getMethod() -> 현재 요청이 어떤 것인가 알기 위해서
-getSession() -> 사용자에 대한 정보를 얻기 위해서
-(set)getArribute(String)
-getRequestDispatcher(String) -> 다른쪽 페이지로 포워드 시키거나 인클루드 시킬 수 있다(Srting 포함하거나 이동시키고자 파일의 주소를 적으면 된다.
8. HttpServletResponse
-웹 컨테이너의 응답을 표현
-addCookie(Cookie) ->쿠키를 저장
-sendRedirect(String) -> 페이지를 이동 (<a> 태그를 이용)
-setHeader(String,String) -> 헤더값 지정
-getOutputStream() ->바이너리 데이터를 출력
-getWriter() -> 단순한 출력 스트림을 얻고자 할때
-setContentType(String) -> 클라이언트가 어떠한 양식으로 서버측에서 메시지를 받아야 할것인가
9. ServletContext
-웹 응용 프로그램(Web Application)
(1)웹에서 실행되는 프로그램들의 모음
(2)서블릿,유틸리티 클래스, JSP, HTML, 이미지, 자바스크립트, 스타일시트
-Context
(1)여러개의 서블릿과 JSP들이 서로 협력하면서 실행되는 환경
(2)서블릿과 JSP들 간에 서로 정보 저장, 검색
(3)웹 응용프로그램은 오직 하나의 실행 환경을 갖는다
(4)ServletConfig의 getServletContext()메소드를 이용
10. RequestDispatcher
-클라이언트의 요청을 다른 자원으로 전달
-ServletContext의 getRequestDispatcher() 사용
-forward(ServletRequest, ServletResponse) : 클라이언트 요청을 다른 자원으로 전달
-include(ServletRequest, ServletResponse) : 다른 자원의 내용을 HttpServletResponse에 포함
11. getInitParameter()
-web.xml 파일에 저장된 정보를 서블릿의 초기화 파라미터로 읽어온다
설정
트랙백
댓글
글
스타일 시트
1. 스타일 시트 선언
CSS(Cascading Style Sheets)
-HTML이 웹 브라우저에서 어떤 형태로 보여야 할지를 결정하는 규칙들
-동일한 HTML페이지라 하더라도, 스타일 시트의 내용에 따라 다른 내용의 모습으로 보인다
<style type="text/css">
<!--
H1{color:blue} //선언부. H1(태그)은 선택자
-->
</style>
ex1) 여러 개의 선택자 사용
<style type=“text/css”>
H1, H2, H3, H4, H5, H6 { color : blue }
</style>
ex2) 여러 개의 속성 사용
<style type=“text/css”>
H1 { color : blue; font-size : 24pt }
</style>
ex3) 내포된 태그에 속성 사용
<style type=“text/css”>
H1 EM { text-decoration : underline } //H1안쪽의 EM의 태그는 문자를 언더라인표시
</style>
ex4) 클래스를 사용한 스타일 선언
<style type=“text/css”>
p.italic { font-style : italic }
p.bold { font-weight : bold } //글자를 진하게
.underline { text-decoration : underline }
</style>
->HTML 페이지에서 태그에 클래스 지정
<p class=“italic”>이탤릭체 문단
<p class=“bold”>볼드체 문단
<H1 class=“underline”>밑줄 친 문단</h1>
설정
트랙백
댓글
글
자바 스크립트
1. 자바 스크립트
-HTML 에 포함 되어 웹 페이지에 동적인 효과를 주거나 사용자가 입력한 데이터의 유효성 검사를 위해 사용
(유효성 검사: id가 맞는지 pw가 맞는지)
-주석 ://사용
첫번째 사용법
<script language="JavaScript">
자바스크립트 프로그램
</script>
두번째 사용법
<script language="JavaScript"src="hello.js"> (src를 이용하여 필요한 파일 불러온다)
</script>
2. 자바 스크립트 함수
-C나 자바와 같이 함수 선언하여 사용가능
3. 자바스크립트에서 HTML 객체 접근
-DOM(Document Object Model)방식을 이용해 HTML 문서의 내부 구조에 접근, 변경 가능
-웹 브라우저는 HTML문서, 그림, 폼 등의 각 객체를 대표하는 객체 인스턴스를 생성 관리
4. 사용자 입력을 처리 하는 함수
-alert() : 경고 메시지를 보여주기 위해 사용
-confirm() : 확인 버튼과 취소버튼이 있는 메시지 창을 보여주기 위해 사용
확인-> true 취소->false 값을 리턴
-prompt() : 사용자가 입력한 값을 받기 위해 창을 보여준다
확인->입력값 취소 -> null값이 리턴
설정
트랙백
댓글
글
유용한 HTML태그들
1. iframe
-HTML문서에 다른 HTML문서 삽입
-속성 (align, frameborder,height, width, marginheight, margiwidth,name, scorolling,src)
2. marquee
-IE(인터넷 익스플로어)에서 메시지 스크롤
-속성(behavior, direction, scrollamount, scrolldelay, height, width, onmouseover, onmouseout)
3. meta
-웹브라우저의 행동제어, 검색 키워드 저장
-head 태그 내에 저장
-속성
"http-equiv","name" :이름
-"content" :값
4. form
-HTML에서 사용자가 값을 입력할 수 있도록 제공
- input, select, textarea 사용할 수 있다
-속성(action, method, enctype, target, onsubmit, onreset) on이 붙은건 이벤트라 본다
* GET방식 - 문서를 요청하는 방식, 페이지를 이동하고자 할때
*POST - 데이터를 전달하는 방식
5. input (form 태그 안에 있다)
-사용자가 값을 입력
-속성( name, type, value, checked, size, maxlength
-type종류 (button, text, password, chechbox, radio, submit, reset, hidden, image, file)
6. 폼 관련 태그들( select, option)
-드롭 다운 형태의 메뉴
-아이템을 표기하기 위해 option 태그 사용
-속성(name, size, multiple, onfocus, onblur, onchange)
7.폼 관련 태그들(textarea)
-여러 줄에 걸쳐 글을 입력할 때 사용
-<textarea>와</textarea>태그 사에이 있는 글을 기본 텍스트로 화면 표시
-속성(name, rows, cols, readonly, onfocus, onblur, onselect)
설정
트랙백
댓글
글
JSP 디렉티브1
1. 디렉티브란?
-해당 JSP 페이지와 관련된 정보를 나타낼 때 쓰는 태그
-형식
<%& 디렉티브 속성1="값1" 속성2="값2"...%>
2.디렉티브 종류
-page : 해당 페이지의 전체적인 특성을 나타냄
-include : 다른 페이지를 포함하고 싶을때
-taglib : 기능확장을 위해 상용할 커스텀 태그의 경로를 지정할때
'개발 > 코딩' 카테고리의 다른 글
자바 스크립트 (0) | 2013.11.19 |
---|---|
유용한 HTML태그들 (0) | 2013.11.19 |
서블릿 설명 홈피 (0) | 2013.11.18 |
JSP 스크립트 1 (0) | 2013.11.15 |
JSP 작동방식 (1) | 2013.11.15 |
설정
트랙백
댓글
글
서블릿 설명 홈피
'개발 > 코딩' 카테고리의 다른 글
유용한 HTML태그들 (0) | 2013.11.19 |
---|---|
JSP 디렉티브1 (0) | 2013.11.19 |
JSP 스크립트 1 (0) | 2013.11.15 |
JSP 작동방식 (1) | 2013.11.15 |
JSP특징 (0) | 2013.11.15 |
설정
트랙백
댓글
글
JSP 스크립트 1
1.선언부
-형식
<%!
//변수 또는 메소드를 선언하는 문장들
%>
ex)
<%!
private int num=0;
public static int count=0;
double getDistance() 메소드
{
return distance;
}
%>
2.표현식
-형식
<%=
//변수 메소드 특정객체 수식등 (특정객체, toString등)
%>
ex)
<%!
String s="This is a test";
int i=1000;
Point2D.Double myPoint=new Point2D.Double(5.0,10.0);
<%=s%> <%=i%> <%=myPoint%>
3.스크립트릿
-형식
<%
선언부와 표현식을 제외한 모든 자바코드 (반복문, 제어문 등)
%>
ex)
<%
int i=0; 선언부 이지만 들어갈수 있다
for(i=0;i<5;i++){
%>
//여기에 반복되는 문장이 들어간다
<%
}
%>
설정
트랙백
댓글
글
JSP 작동방식
1.JSP의 작동 원리
-사용자가 서버에 JSP페이지를 요청
-해당 페이지에 대한 서블릿이 있는지 검사
-서블릿이 존재할 경우 메모리에 로드시켜 해당 페이지에 대한 응답객체 생성
요청 객체 (request) 응답객체 (response)
-서블릿이 없을 경우 해당 페이지에 대한 서블릿을 생성
-특정 폴더에 서블릿을 저장 (페이지요청을 할때마다 이미 작성된 자바 파일을 불러온다)
-이후 같은 페이지 요청시 메모리 상의 서블릿을 실행시켜 응답 객체를 생성
2. 간단한 예제
-톰캣으로 서버를 시작
-Hello.jsp 페이지를 작성
<html>
<head>
<title>예제</title>
</head>
<body>
<h3>안녕하세요</h3>
</body>
</html>
-웹사이트의 모든 파일이 시작되는 폴더인 ROOT폴더에 저장(폼캣 폴더에 있다 )
-브라우저를 열어 http://localhost:8080/폴더명/파일명.jsp 포트로 접속(톰캣이 제공하는 기본포트)
-파일명을 쳐주고, 실행된 화면을 확인후 서블릿이 저장되는 WORK폴더에 가서 서블릿을 확인
설정
트랙백
댓글
글
JSP특징
1. HTML의 한계
-사용자의 요청에 의해 이미 작성되어진 정적인 페이지만을 일방적으로 전달
-데이터 베이스와의 연동 불가
-지속적인 연결이 이루어지지 않음
2.CGI(Common Gateway Interface)의 활용과 한계
-데이터 베이스와 연동 가능
-사용자가 입력한 값 또는 정보에 따라 서버에서 동적인 결과를 생성
-사용자의 요청에 대해서 각각의 프로세스를 생성
-접속자가 많을 수록 메모리를 많이 사용하여 서버에 부담 증가
3.서블릿의 활용과 한계
-자바를 기반으로 작성하므로 자바에서 제공하는 풍부한 API를 사용할 수 있고 객체 지향적으로 작성 가능
-멀티스레드 방식의 사용으로 각각의 사용자마다 스레드를 생성하며 서버의 부담을 극소화
-디자인을 표현하는 표현부와 논리적인 부분을 구성하는 구현부가 분리되지 않음
4.JSP의 장점
-자바 가상머신(JVM)이 설치된 어떠한 운영체제에서도 플랫폼에 독립적으로 실행 가능
-자바기반의 언어이므로 자바에서 제공하는 API,멀티스레드,객체 지향 프로그래밍의 기법을 그대로 사용가능
-보여주는 표현부와 내부적인 로직을 나타내는 구현부를 분리하여 각각의 영역에서 효율적으로 작업 가능
-작성한 컴포넌트는 언제든지 재사용 가능
설정
트랙백
댓글
글
비행기 겜 완성
package shooting;
public class Program {
public static void main(String[] args){
//GameBoard gameBoard=new GameBoard(); 안된다 Frame부터 띄워야한다.
MainFrame frm=new MainFrame();
frm.setSize(450,700);
frm.setVisible(true);
}
}
==============================================
package shooting;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
public class MainFrame extends JFrame {
private SplashBoard splashBoard;
private GameBoard gameBoard;
private JMenuBar mainMenu;
private JMenu mnFile; //메뉴바 선택
private JMenu mnWindow; //메뉴바 선택
private JMenuItem miFileExit;
private JMenuItem miWindowSplash;
private JMenuItem miWindowGame;
public MainFrame() {
mainMenu = new JMenuBar();
mnFile = new JMenu("File");
miFileExit = new JMenuItem("Exit");//file 메뉴바에 속해있는 메뉴
mnWindow=new JMenu("Window");
miWindowSplash = new JMenuItem("Splash"); //Window메뉴바에 속해있는 메뉴
miWindowSplash.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //화면전환
/*JOptionPane.showMessageDialog
(MainFrame.this,"스플레시입니다");*/
gameBoard.pause();
gameBoard.setVisible(false);
splashBoard.setVisible(true);
MainFrame.this.revalidate();
}
});
miWindowGame = new JMenuItem("Gmae"); //Window메뉴바에 속해있는 메뉴
miWindowGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //화면전환
/* JOptionPane.showMessageDialog
(MainFrame.this,"게임입니다");*/
splashBoard.setVisible(false);
MainFrame.this.add(gameBoard);
gameBoard.setVisible(true);
gameBoard.start();
MainFrame.this.revalidate(); //사라졌던 잔재가 다시 호출
}
});
splashBoard=new SplashBoard();
gameBoard=new GameBoard();
mnFile.add(miFileExit); //메뉴에 붙여준다
mnWindow.add(miWindowSplash);
mnWindow.add(miWindowGame);
mainMenu.add(mnFile);
mainMenu.add(mnWindow);
this.setJMenuBar(mainMenu);
gameBoard.setFocusable(true); //겜 시작하자 마자 움직일 수 있도록.클릭안해도 됨
this.add(gameBoard); //이걸 해줘야 게임이 뜬다. add는 프레임에 보드 붙여준다.
this.add(splashBoard);
addWindowListener(new WindowAdapter() { //윈도창에 X표로 닫을 수 있게
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
===================================================
package shooting;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
public class GameBoard extends Canvas implements Runnable { // 겜보드가 세가지를 가지고 있다.
private Fighter fighter; // Canvas는 윈도우가 제공해주는거(도화지 역할)
private ArrayList enemies;
private ArrayList userMissiles;
private StatusBar statusBar; // 정의만 한다
private Image img; // 함수를 구현할때 필요한 이미지
// 게임 상태 변수들
// updateItems를 위한 입력 변수
private int hKey;
private int vKey;
private int timerToEnemyAppear; // 적기 출현 시간
private int timerToFire; //미사일 발사 카운터
private int key;
private int space;
private Thread thread;
public GameBoard() {
hKey = 0;
vKey = 0;
timerToEnemyAppear = 0;
fighter = new Fighter(); // 객체 생성
statusBar = new StatusBar();
Toolkit tk = Toolkit.getDefaultToolkit(); // 윈도우 제공
img = tk.getImage("res/우주.jpg"); // 이미지 불러오는거
addKeyListener(new KeyAdapter() { // KeyListener와 달리 어탭더 안에 세가지 기능이 있다.
// public void keyPressed(KeyEvent
// e)
// public void keyReleased(KeyEvent
// e) { }
// public void keyTyped(KeyEvent e)
// { }
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT: // 왼쪽키
case KeyEvent.VK_RIGHT: // 오른쪽키
case KeyEvent.VK_DOWN:
case KeyEvent.VK_UP:
hKey = key;
vKey = key;
GameBoard.this.key = key;
break;
}
if (key == KeyEvent.VK_SPACE) //화살표랑 다르게 써줘야한다
space = key;
}
public void keyReleased(KeyEvent e) {
hKey=0;
vKey=0;
int key = e.getKeyCode();
super.keyReleased(e);
switch (key) {
case KeyEvent.VK_LEFT: // 비행기를 왼쪽으로
if (GameBoard.this.key == KeyEvent.VK_LEFT)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_RIGHT:
if (GameBoard.this.key == KeyEvent.VK_RIGHT)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_DOWN:
if (GameBoard.this.key == KeyEvent.VK_DOWN)
GameBoard.this.key = 0;
break;
case KeyEvent.VK_UP:
if (GameBoard.this.key == KeyEvent.VK_UP)
GameBoard.this.key = 0;
break;
}
if (key == KeyEvent.VK_SPACE)
space = 0;
}
});
enemies = new ArrayList();
userMissiles = new ArrayList();
}
public void start(){ //스레드 시작
if(thread==null){
thread =new Thread(this);
thread.start();
}
else
thread.resume();//멈췄던것을 다시
}
public void pause(){
thread.suspend();
}
public void stop(){
thread.stop();
}
public void run() {
while (true) {
updateItems();
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void updateItems() {
Random rand = new Random();
if (hKey != 0)
fighter.move(hKey);
for (int i = 0; i < enemies.size(); i++)
((Enemy)enemies.get(i)).move();
if (timerToEnemyAppear-- == 0) {
enemies.add(new Enemy(this));
timerToEnemyAppear = (rand.nextInt(500) + 500) / 17; // 스레드가 17
} // 스레드 500이면 05초 0.5초~1초 사이에 하나 생성
if(timerToFire>0)
timerToFire--;
if (space == KeyEvent.VK_SPACE){ //스페이스라면 발사
if(timerToFire ==0){ //미사일 발사 카운터
UserMissile um=fighter.fire(); //미사일
userMissiles.add(um);
timerToFire=10;
}
}
for(int i=0;i<userMissiles.size();i++)
((UserMissile)userMissiles.get(i)).move();
for(int ei=0;ei<enemies.size();ei++){ //적기에 물어본다 부딪혔냐
Enemy en=(Enemy)enemies.get(ei);
for(int i=0;i<userMissiles.size();i++){ //미사일이 여러개
UserMissile um=(UserMissile)userMissiles.get(i);
if(um.hasCrashed(en)){ //부딪혔다면
en.burst(); //터져! 터져! 터져!
userMissiles.remove(um); //미사일 지움
}
}
}
for(int ei=0;ei<enemies.size();ei++){
Enemy en=(Enemy)enemies.get(ei);
if(en.hasBurst()) { //너 터졌니?
enemies.remove(en); //적기 지우자
}
}
}
public void update(Graphics g) { // 윈도우에서 지원.지웠다 다시 그리는것을 재정의
// super.update(g); 부모클래래스 호출하면 소용없은게.
paint(g);
}
public void paint(Graphics g) {
// super.paint(g);
Image buf = createImage(this.getWidth(), this.getHeight());
Graphics g1 = buf.getGraphics(); // 비트맵에 그림을 그리고 프레임에 덮어서 깜빡임사라지게
g1.drawImage(img, 0, 0, this); // 그림을 그려달라 배경
fighter.paint(g1, this); // 파이터에 그림을 그려달라(그림 그리는 도구,도화지)
for (int i = 0; i < enemies.size(); i++)
((Enemy)enemies.get(i)).paint(g1);
for(int i=0;i<userMissiles.size();i++)
((UserMissile)userMissiles.get(i)).paint(g1);
g.drawImage(buf, 0, 0, this);
}
}
=================================================
package shooting;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
public class SplashBoard extends Canvas { //화면 전환.얘가 제일 먼저뜬다
private Image img;
public SplashBoard() {
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("res/title3.jpg"); // 이미지 불러오는거
// Toolkit tk=Tookit.getDefaultToolkit().getImage("res/start.png");
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img,0, 0, this);
}
}
====================================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class Fighter {
// private UserMissile missiles[];
private Image img;
private int x,y; //뱅기 좌표
private int speed;
public Fighter() {
// missiles=new UserMissile[100]; //미사일 보유
x=170;
y=500;
speed=5; //스피드 만큼 좌표를 바꾼다
Toolkit tk=Toolkit.getDefaultToolkit(); //윈도우 제공
img=tk.getImage("res/fighter.png"); //이미지 불러오는거
}
public void paint(Graphics g,GameBoard parent) {
g.drawImage(img,x,y,parent); //게임 보드에 그림을 그려달라
}
public void move(int key) {
switch(key){
case KeyEvent.VK_LEFT:
x -= speed;
break;
case KeyEvent.VK_RIGHT:
x += speed;
break;
case KeyEvent.VK_DOWN:
y += speed;
break;
case KeyEvent.VK_UP:
y -= speed;
break;
}
}
public UserMissile fire() {
UserMissile um=new UserMissile(); //미사일 무한
um.setX(this.x+25); //비행기 중앙 앞에서 나오게
um.setY(this.y-40);
return um;
}
}
=============================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class UserMissile {
private int x;
private int y;
private static Image img; //미사일이 여러개
private GameBoard parent;
public UserMissile() { //생성자
this(0,0);
}
public UserMissile(int x,int y){ //오버로딩 생성자
this.x=x;
this.y=y;
this.parent=parent;
}
static{
Toolkit tk=Toolkit.getDefaultToolkit(); //윈도우 제공
img=tk.getImage("res/missile.png"); //이미지 불러오는거
}
public void paint(Graphics g) {
g.drawImage(img,x,y,parent); //게임 보드에 그림을 그려달라
}
public void move() {
y -= 7; //미사일 속도
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public boolean hasCrashed(Enemy en) { //충돌 알고리즘
int w=48;
int h=64;
if((en.getX()<x && x<en.getX()+w)
&& (en.getY()<y && y<en.getY()+h))
return true;
return false;
}
}
======================================
package shooting;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
public class Enemy {
private static final int LEFT = 1; // static 하나만 선언해서 모든 객체가 공유
private static final int RIGHT = 2; //final은 정의를 해야하기때문에 연산자 가능.
private static Image img; //static으로 공유를 해야하기때문에 연산자 넣어줌
private static Image explosion;
private int x;
private int y;
private EnemyMissile[] missiles;
private int speed;
private GameBoard parent;
private int dir; // 적뱅기 움직이는 방향
private int rightWall;
private int leftWall;
private Random rand;
private boolean isBursting; //터지고 있다
private boolean doneBusrt; //터졌다
private int delayBurst;
private int offsetX;
private int offsetY;
static{ //스태틱 멤버 초기화, 그림 공통
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("res/enemy.png"); // 이미지 불러오는거
explosion=tk.getImage("res/explosion.png");
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Enemy(GameBoard parent) { // 태어날때부터 이 정보를 갖고 있는다.
rand = new Random();
this.parent = parent;
missiles = new EnemyMissile[100];
x =rand.nextInt(400) - 100; // 범위를 잡아주는것
y = -100;
speed = rand.nextInt(3)+1; // 스피드 만큼 좌표를 바꾼다
dir=rand.nextInt(2)+1; //LEFT,RIGHT 정해준다
rightWall=0;
leftWall=350;
isBursting=false;
doneBusrt=true;
offsetX=0;
offsetY=0;
delayBurst=2;
}
public void move() { // 움직일 수 있도록.
if(dir==LEFT){
x -= speed;
y += speed;
if(x < rightWall){ //창에 부딪히면 다시 오른쪽으로 이동
dir=RIGHT;
leftWall=rand.nextInt(350);
}
}
else if(dir==RIGHT){
x += speed;
y += speed;
if(x >= leftWall){
dir=LEFT;
rightWall=rand.nextInt(350);
}
}
}
public void paint(Graphics g) {
g.drawImage(img, x, y, parent); // 게임 보드에 그림을 그려달라
if(isBursting) //터지는 상황인가
g.drawImage(explosion,x-110,y-50,x+160,y+120,0+offsetX,0+offsetY,0+160+offsetX,0+120+offsetY,parent); //비행기 위에 그리는거다
}
//explosin x-110,y-50은 뱅기 가운데, x,y는 그림의 크기
public boolean hasBurst() {
if(isBursting){
if(--delayBurst>0) //터지는 그림이 빨라서 딜레이줌
return false;
delayBurst=2;
if(offsetX==640-160){ //뭐가 매끄럽지 않아서 -160
offsetY+=120;
offsetX=0;
}
offsetX+=160;
}
if(offsetY==600)
return true;
//offsetY=120;
return false;
}
public void burst() { //터지는 그림의 좌표
isBursting=true; //터지는 중이라면
}
}
============================================
package shooting;
public class EnemyCollection { //Enemy에 대한 정보
private int current;
private int max;
private Enemy[] enemies;
public EnemyCollection() {
current=0;
max=3;
enemies=new Enemy[max];
}
public void add(Enemy enemy){
if(current >= max){ //공간을 늘려준다
//1.배열을 temp라는 이름으로 max+10만큼의 배열을 새로 생성
//2.enemies 공간의 Enemy들을 새로운 temp배열로 이주 시킨다.
Enemy[] temp = new Enemy[max+10];
for(int i = 0; i < max ; i++)
temp[i] = enemies[i];
enemies=temp;
max += 10;
}
this.enemies[current++]=enemy;
}
public Enemy get(int idx){
return enemies[idx];
}
public int size(){ //현재 몇개가 있는가
return current;
}
}
========================================
package shooting;
public class EnemyMissile {
}
===================================
package shooting;
public class StatusBar {
}