서블릿 프로그래밍

개발/코딩 2013. 11. 19. 19:04

 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 파일에 저장된 정보를 서블릿의 초기화 파라미터로 읽어온다

 

'개발 > 코딩' 카테고리의 다른 글

JSP 액션  (0) 2013.11.21
JSP에 대해  (0) 2013.11.21
스타일 시트  (0) 2013.11.19
자바 스크립트  (0) 2013.11.19
유용한 HTML태그들  (0) 2013.11.19

스타일 시트

개발/코딩 2013. 11. 19. 18:50

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>

 

'개발 > 코딩' 카테고리의 다른 글

JSP에 대해  (0) 2013.11.21
서블릿 프로그래밍  (0) 2013.11.19
자바 스크립트  (0) 2013.11.19
유용한 HTML태그들  (0) 2013.11.19
JSP 디렉티브1  (0) 2013.11.19

자바 스크립트

개발/코딩 2013. 11. 19. 12:23

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값이 리턴

 

 

'개발 > 코딩' 카테고리의 다른 글

서블릿 프로그래밍  (0) 2013.11.19
스타일 시트  (0) 2013.11.19
유용한 HTML태그들  (0) 2013.11.19
JSP 디렉티브1  (0) 2013.11.19
서블릿 설명 홈피  (0) 2013.11.18

유용한 HTML태그들

개발/코딩 2013. 11. 19. 11:48

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)

 

 

 

 

'개발 > 코딩' 카테고리의 다른 글

스타일 시트  (0) 2013.11.19
자바 스크립트  (0) 2013.11.19
JSP 디렉티브1  (0) 2013.11.19
서블릿 설명 홈피  (0) 2013.11.18
JSP 스크립트 1  (0) 2013.11.15

JSP 디렉티브1

개발/코딩 2013. 11. 19. 09:54

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

서블릿 설명 홈피

개발/코딩 2013. 11. 18. 18:16

'개발 > 코딩' 카테고리의 다른 글

유용한 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

개발/코딩 2013. 11. 15. 12:01

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  (0) 2013.11.19
서블릿 설명 홈피  (0) 2013.11.18
JSP 작동방식  (1) 2013.11.15
JSP특징  (0) 2013.11.15
비행기 겜 완성  (0) 2013.10.21

JSP 작동방식

개발/코딩 2013. 11. 15. 11:44

1.JSP의 작동 원리

-사용자가 서버에 JSP페이지를 요청

-해당 페이지에 대한 서블릿이 있는지 검사

-서블릿이 존재할 경우 메모리에 로드시켜 해당 페이지에 대한 응답객체 생성

     요청 객체 (request) 응답객체 (response)

-서블릿이 없을 경우 해당 페이지에 대한 서블릿을 생성

-특정 폴더에 서블릿을 저장 (페이지요청을 할때마다 이미 작성된 자바 파일을 불러온다)

-이후 같은 페이지 요청시 메모리 상의 서블릿을 실행시켜 응답 객체를 생성

 

2. 간단한 예제

-톰캣으로 서버를 시작

-Hello.jsp 페이지를 작성

<html>

<head>

<title>예제</title>

</head>

<body>

<h3>안녕하세요</h3>

</body>

</html>

-웹사이트의 모든 파일이 시작되는 폴더인 ROOT폴더에 저장(폼캣 폴더에 있다 )

-브라우저를 열어 http://localhost:8080/폴더명/파일명.jsp 포트로 접속(톰캣이 제공하는 기본포트)

-파일명을 쳐주고, 실행된 화면을 확인후 서블릿이 저장되는 WORK폴더에 가서 서블릿을 확인

 

'개발 > 코딩' 카테고리의 다른 글

서블릿 설명 홈피  (0) 2013.11.18
JSP 스크립트 1  (0) 2013.11.15
JSP특징  (0) 2013.11.15
비행기 겜 완성  (0) 2013.10.21
숫자 맞추기 겜  (0) 2013.10.11

JSP특징

개발/코딩 2013. 11. 15. 11:03

1. HTML의 한계

-사용자의 요청에 의해 이미 작성되어진 정적인 페이지만을 일방적으로 전달

-데이터 베이스와의 연동 불가

-지속적인 연결이 이루어지지 않음

 

2.CGI(Common Gateway Interface)의 활용과 한계

-데이터 베이스와 연동 가능

-사용자가 입력한 값  또는 정보에 따라 서버에서 동적인 결과를 생성

-사용자의 요청에 대해서 각각의 프로세스를 생성

-접속자가 많을 수록 메모리를 많이 사용하여 서버에 부담 증가

 

3.서블릿의 활용과 한계

-자바를 기반으로 작성하므로 자바에서 제공하는 풍부한 API를 사용할 수 있고 객체 지향적으로 작성 가능

-멀티스레드 방식의 사용으로 각각의 사용자마다 스레드를 생성하며 서버의 부담을 극소화

-디자인을 표현하는 표현부와 논리적인 부분을 구성하는 구현부가 분리되지 않음

 

4.JSP의 장점

-자바 가상머신(JVM)이 설치된 어떠한 운영체제에서도 플랫폼에 독립적으로 실행 가능

-자바기반의 언어이므로 자바에서 제공하는 API,멀티스레드,객체 지향 프로그래밍의 기법을 그대로 사용가능

-보여주는 표현부와 내부적인 로직을 나타내는 구현부를 분리하여 각각의 영역에서 효율적으로 작업 가능

-작성한 컴포넌트는 언제든지 재사용 가능

 

 

'개발 > 코딩' 카테고리의 다른 글

JSP 스크립트 1  (0) 2013.11.15
JSP 작동방식  (1) 2013.11.15
비행기 겜 완성  (0) 2013.10.21
숫자 맞추기 겜  (0) 2013.10.11
비행기  (0) 2013.10.11

비행기 겜 완성

개발/코딩 2013. 10. 21. 16:01

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 {

}

 

 

'개발 > 코딩' 카테고리의 다른 글

JSP 작동방식  (1) 2013.11.15
JSP특징  (0) 2013.11.15
숫자 맞추기 겜  (0) 2013.10.11
비행기  (0) 2013.10.11
삽입 정렬  (0) 2013.10.11