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

ORACLE 이론 및 코딩하는방법

개발/DB 2013. 11. 4. 16:12

DBMS( Data Base Management System)- 오라클, My SQL(오라클에서 인수), SQL server
: 데이터를 효과적으로 이용할 수 있도록 정리,보관하기 위한 소프트 웨어

SQL ( Structed Query Language)
: 구조화된 질의어

DB : 데이터를 관리하는 방법의 하나 ( 기존 데이터 결함 => 중복된 데이터를 없애서 관리)

SQL용어 :  1. DDL ( Data Definition Language)-CREATE, ALTER, DROP
    2. DML ( Data Manipulation Language)-SELECT, INSERT, UPDATA, DELETE
    3. DCL

데이터 형식의 종류
1. 숫자 - NUMBER
2. 문자 - '  '      1. VARCHAR2(50) - 최대 50개 가변길이의 문자
                       2. NVARCHAR2 - 가변길이의 유니코드 문자
                       3. CHAR -고정길이의 문자
                       4. NCHAR - 고정길이의 유니코드 문자
3. 날짜 - DATE
4. 날짜+시간 - TIMESTAMP

"    "  용도  1. 띄어쓰기 할때 "AB CD"
                2. 허락되지 않은 컬럼명을 사용하기 위해


메타 데이터 : 사용자 데이터를 저장하기 위한 데이터, 데이터를 위한 데이터

Dictionary : 메타 데이터의 저장소

NVL(AVG(AGE),0) NULL값을 0으로 바꿔준다,

CREATE TABLE STUDENTS(
"SID" VARCHAR2(15),
"PWD" VARCHAR2(15),
"NAME" VARCHAR2(20),
"GENDER" VARCHAR2(10),
"AGE" NUMBER,
"BIRTHDAY" CHAR(10),
"MAJOR" VARCHAR2(50) ,
"ADDRESS" VARCHAR2(100),
"PHONE" VARCHAR2(13),
"SSN" CHAR(14),
"IP" VARCHAR2(15),
"REGDATE" DATE
)

컬럼을 추가할 경우
ALTER TABLE "STUDENTS" ADD "CITY" VARCHAR2

컬럼을 삭제할 경우
ALTER TABLE "STUDENTS" DROP COLUMN"CITY"

컬럼의 스타일 변경할 경우
ALTER TABLE "STUDENTS" MODIFY "CITY" TIMESTAMP

테이블 생성
CREATE TABLE "STUDENTS"

테이블 삭제
DROP TABLE "STUDENTS"

칼럼에 값 넣기
INSERT INTO STUDENTS (SID,PWD) VALUES ('김창훈','777')

데이터 조회하기
SELECT * FROM STUDENTS : STUDENTS에 있는 데이터를 전부 조회.
                         조회하고 싶은것을 선택하고 싶은때는 * 대신 SID,PWD를 쓰면 된다.


DELETE STUDENTS WHERE SID='NA'
:SID의 NA가 포함된것 삭제

KCH가 있는 곳에 이름이랑 성별 업뎃
UPDATE STUDENTS SET NAME='창훈',GENDER='남' WHERE SID='KCH'

데이터 조회하기 이것들은 로그에 임시로 저장해 놓은 상태이다
ROLLBACK하면 쉬소, COMMIT 하면 완전 저장

SQL 연산자
나이에 +10  : SELECT AGE+10 FROM STUDENTS
원하는 컬럼만 조회 : SELECT SID,NAME FROM STUDENTS
원하는 컬럼을 별칭줘서 조회 : SELECT SID AS ID FROM STUDENTS
AS는 생략해도 된다

테이블 컬럼이 없을때 계산 방법
SELECT '3'+10 FROM DUAL : DUAL은 임의의 테이블
-> +는 무조건 숫자만 연산하려 하기 때문에
'3'을 숫자 3으로 변경
'3'을 'A'로 바꾸면 수치가 부족하다는 에러가 뜸

문자열을 더해주는 연산자 ||
SELECT 'A'||'BC' FROM DUAL  : 계산결과 ABC

나이가 20이상인것만 조회하시오
SELECT * FROM STUDENTS WHERE AGE>20;

주소를 입력하지 않을것을 조회하시오
SELECT * FROM STUDENTS WHERE ADDRESS IS NULL

주소 입력한 것을 조회하시오
SELECT * FROM STUDENTS WHERE ADDRESS IS NOT NULL

나이가 20,21,22인 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE=20 OR AGE=21 OR AGE=22;
SELECT * FROM STUDENTS WHERE 20<=AGE AND AGE<=22;
SELECT * FROM STUDENTS WHERE AGE BETWEEN 20 AND 22;

나이가 20,25,27인 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE=20 OR AGE=25 OR AGE=27;
SELECT * FROM STUDENTS WHERE AGE IN (20,25,27);

나이가 20,25,27이 아닌 회원을 조회하시오
SELECT * FROM STUDENTS WHERE AGE NOT IN (20,25,27);
회원중에 김씨 성을 조회하시오
SELECT * FROM STUDENTS WHERE NAME LIKE '김%';

회원중에 김씨성을 제외한 회원을 조회하시오
SELECT * FROM STUDENTS WHERE NAME NOT LIKE '김%';

회원중에 박이 들어간 사람들 조회하시오
SELECT * FROM STUDENTS WHERE NAME LIKE '%박%';  
: 앞뒤 어떤 길이의 문자가 와도 박이 들어가면 조회
SELECT * FROM STUDENTS WHERE NAME LIKE '박_'; 
: 박뒤에 한글자만 있는 사람을 조회(자릿수를 결정)

회원의 나이를 조회하고, 동일한 나이는 생략
SELECT DISTINCT AGE FROM STUDENTS;

모든 회원을 조회하시오. 단 레코드 번호를 함께 출력하시오
SELECT ROWNUM, STUDENTS.* FROM STUDENTS
ROWNUM 은 오라클에서 제공하는 행넘버

1번째 회원부터 5번째 회원까지만 조회하시오.
SELECT * FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 5;
SELECT ROWNUM, STUDENTS.* FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 5;


문자열 덧셈 함수
SELECT CONCAT('홍','길동')FROM DUAL

문자와 코드
SELECT ASCII('Q')FROM DUAL

73번째 문자
SELECT CHR(73) FROM DUAL;

문자열 추출함수 SUBSTR(문자열,시작위치,길이)
SELECT SUBSTR('HELLO',1,3)FROM DUAL   : 결과 HEL
SELECT SUBSTR('HELLO',0,3)FROM DUAL : 0에서부터 글자를 만나는 순간부터 3개 뽑아냄
SELECT SUBSTR('HELLO',3)FROM DUAL :결과 LLO

이름과 생년월일에서 월만 조회
SELECT NAME,SUBSTR(BIRTHDAY,6,2) FROM STUDENTS 

문자열을 소문자,대문자로 변경하기
SELECT LOWER('NeWIEC')FROM DUAL; : 다 소문자로 변경
SELECT UPPER('neWLec')FROM DUAL; : 다 대문자로 변경

회원의 아이디가 NEWLEC인 회원을 조회하시오(대소문자 안가림)
SELECT * FROM STUDENTS WHERE UPPER(SID)=UPPER('NEWLEC');
--다 대문자로 바꿔놓고 조회 (근데 왜 대문자로 안바뀌지??)

문자열 대치 함수 REPLACE(문자열,찾는문자열,대치할 문자열)/TRANSLATE()
SELECT REPLACE ('WHERE WE ARE','WE','YOU') FROM DUAL;
:WHERE YOU ARE (WE 를 YOU로 바꿔줌)
SELECT TRANSLATE ('WHERE WE ARE','WE','YOU') FROM DUAL;
:YHORO YO ARO (W를 Y로,E를 O로)

주소를 띄어쓰기 없이 출력
SELECT REPLACE (ADDRESS,' ','') FROM STUDENTS ;

첫글자를 대문자로 바꿔주는 역할
SELECT INITCAP('the most important thing is..')FROM DUAL;
: The Most Important Thing Is..

문자열 패딩 함수(5글자지만 10개로 늘리고싶다)
SELECT LPAD('HELLO',10,'0')FROM DUAL;
:00000HELLO

문자열의 길이를 얻는 함수
SELECT LENGTH('WHERE WE ARE')FROM DUAL;
: 12

모든 회원의 핸드폰 번호와 번호의 문자열 길이를 조회
SELECT PHONE,LENGTH(PHONE)FROM STUDENTS

문자열 검색함수 INSTR(문자열,검색문자열,위치,찾을수)
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO')FROM DUAL
: 13
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO',15)FROM DUAL
:여기서 15는 15번째부터 찾아라.
SELECT INSTR('ALL WE NEED TO IS JUST TO..','TO',1,2)FROM DUAL
:1번째부터 검색하고,2번째 TO를 찾아라

회원의 전화번호에서 두번째 -가 존재하는 위치를 조회
SELECT PHONE,INSTR(PHONE,'-',1,2)FROM STUDENTS

회원의 전화번호에서 첫번째-와 두번째- 문자 간격?
SELECT PHONE,INSTR(PHONE,'-',1,2)-INSTR(PHONE,'-',1,1)-1 FROM STUDENTS

회원의 전화번호에서 첫번째와 두번째 사이의 번호를 출력하시오.
SELECT PHONE,SUBSTR(PHONE,5,INSTR(PHONE,'-',1,2)-INSTR(PHONE,'-',1,1)-1) FROM STUDENTS;

회원중에서 앞번호가 016인거
SELECT * FROM STUDENTS WHERE PHONE LIKE'016%';

현재 시간을 얻는 함수
SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL
:SYSDATE 현재 날짜
 CURRENT_DATE 접속자의 시간
 SYSTIMESTAMP 시간까지 나오는거
 CURRENT_TIMESTAMP 시간,지역

날짜 추출함수 EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND FROM)
SELECT EXTRACT(YEAR FROM SYSDATE)FROM DUAL
:년도만 출력
SELECT EXTRACT(DAY FROM SYSDATE)FROM DUAL
:월만 출력

가입 회원중에 2,3,11,12월달에 가입한 회원을 조회
SELECT * FROM STUDENTS WHERE EXTRACT(MONTH FROM BIRTHDAY)IN (2,3,11,12) ;

가입일이 현재로부터 6개월이 안된 회원 조회
SELECT * FROM STUDENTS WHERE EXTRACT(MONTH FROM SYSDATE)-EXTRACT(MONTH FROM REGDATE)<6;
: 현재 날짜에서 가입날짜를 빼고 6보다 작으면 출력
SELECT * FROM STUDENTS WHERE REGDATE>ADD_MONTHS(SYSDATE,-6);

 

구절문
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
순서가 바뀌면 안된다.

원하는 행을 필터링: WHERE

그룹으로 묶어서 조회하기 위한 구절
:GROUP BY/HAVING

정렬을 위한 구절
:ORDER BY

정렬순서
ASC(ascending,오름차순)DESC(descending,내림차순)

이름을 기준으로 역순으로 정렬해서 조회
SELECT*FROM STUDENTS ORDER BY NAME DESC

김씨성을 조회하고 나이는 오름차순으로 정렬
SELECT*FROM STUDENTS WHERE NAME LIKE '김%' ORDER BY AGE ASC
:1.FROM STUDENTS 가 먼저 실행
 2.WHERE NAME LIKE 가 실행
 3.ORDER BY 가 실행
 4.SELECT 실행

나이를 기준으로 역순 정렬, 나이가 같을 경우 아이디를 기준으로 오름차순 정렬
SELECT*FROM STUDENTS ORDER BY AGE DESC,NAME ASC

집계 함수
SUM, MIN, MAX, COUNT, AVG

가입한 회원수를 조회
SELECT COUNT(SID) FROM STUDENTS

가입한 회원의 성별 회원수를 조회
SELECT GENDER,COUNT(SID) FROM STUDENTS GROUP BY GENDER

가입한 회원의 나이대별 회원수를 역정렬
SELECT AGE,COUNT(SID) FROM STUDENTS GROUP BY AGE ORDER BY COUNT(SID) DESC

성별 평균 나이
SELECT GENDER,AVG(AGE) FROM STUDENTS GROUP BY GENDER

성씨 몇명이 있는지 조회
SELECT SUBSTR(NAME,1,1),COUNT(NAME) FROM STUDENTS GROUP BY SUBSTR(NAME,1,1);

박씨성의 회원수
SELECT COUNT(SID)FROM STUDENTS WHERE NAME LIKE '박%';
SELECT COUNT(SID)FROM STUDENTS WHERE SUBSTR(NAME,1,1)='박';


부조회(서브쿼리)

값을 얻는 종류 : 

단일형(스칼라, COUNT,SUM,MIN등. 서브 쿼리를 넣을 수 있는 공간 GROUP BY, ORDER BY), 

목록형(서브 쿼리를 넣을 수 있는 공간 WHERE,HAVING) 

격자형(서브 쿼리를 넣을수 있는 공간 FROM)


동적인 결과를 얻기위해 구절의 순서가 중요한경우
SELECT *FROM STUDENTS WHERE ROWNUM BETWEEN 1 AND 10;
이름 순으로 역정렬한 결과에서 상위 열명을 원하는 경우라면?
SELECT*FROM STUDENTS ORDER BY NAME DESC WHERE ROWNUM BETWEEN 1 AND 10
:정렬한후 10명을 뽑아라 근데, 명령어가 올바르게 종료되지 않는 에러
SELECT*FROM (SELECT*FROM STUDENTS ORDER BY NAME DESC)WHERE ROWNUM BETWEEN 1 AND 10;

단일 값을 반환하는 경우:비교연산에 사용
SELECT*FROM STUDENTS WHERE AGE>(SELECT AVG(AGE) FROM STUDENTS)
:평균 나이보다 높은 사람출력,(SELECT AVG(AGE) FROM STUDENTS)이게 단일값

목록을 반화하는 경우:목록형 연산에 사용
SELECT*FROM STUDENTS WHERE AGE IN(SELECT AVG(AGE) FROM STUDENTS GROUP BY ADDRESS)
:도시별 나이 평균을 구하기 위해

서브 쿼리 연산자
(), ANY,EXISTS,ALL

모든 성별의 평균 나이보다 큰 회원만 출력
SELECT*FROM STUDENTS WHERE AGE>ALL(SELECT AVG(AGE) FROM STUDENTS GROUP BY GENDER)
:ALL은 각 성별의 나이의 평균을 구하고 그 중 큰 값을 뽑아내서 그보다 큰 나이를 출력


하나 이상의 성별 평균키보다 큰 회원을 출력
SELECT*FROM STUDENTS WHERE AGE>ANY(SELECT AVG(AGE) FROM STUDENTS GROUP BY GENDER)
:ANY 는 각 성별의 나이의 평균을 구하고 그 중 작은 값을 뽑아내서 그보다 작은 나이를 출력

조인
INNER JOIN, OUTER JOIN, SELF JOIN, CORSS JOIN

NOTICES 와 STUDENTS를 연결시켜주는거
SELECT SEQ,TITLE,WRITER,NAME FROM
STUDENTS INNER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITER
:각각에서 SEQ,TITLE,WRITER,NAME을 연결.여기서 SID와 WRITER이 동일해야한다.
필드 이름이 같을 경우(WRITEH가 NAME으로 변경됐다고 했을 경우)
SELECT NOTICES.SEQ, NOTICES.TITLE, STUDENTS.NAME FROM
STUDENTS INNER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITERH
필드 이름이 너무 길어서 귀찮다면 테이블의 별칭을 사용
SELECT N.SEQ, N.TITLE, S.NAME FROM
STUDENTS S INNER JOIN NOTICES N ON S.SID=N.WRITER
:주의-별칭만 사용을 해야한다

 회원별 작성한 게시글 수
SELECT S.SID,S.NAME,COUNT(N.SEQ)FROM
STUDENTS S INNER JOIN NOTICES N ON S.SID=N.WRITER GROUP BY S.SID,S.NAME

참조키를 기준으로 일치하지 않는 행도 포함시키는 조인
SELECT STUDENTS.SID,STUDENTS.NAME,NOTICES.SEQ FROM
STUDENTS LEFT OUTER JOIN NOTICES ON STUDENTS.SID=NOTICES.WRITER
:LEFT대신 RIGHT, FULL을 넣어도 된다.
LEFT면 STUDENTS에서 글을 남기지 않은 사람의 값도 출력(?)

회원수 게시글이 0인것도 같이 출력
SELECT S.SID,S.NAME,COUNT(N.SEQ)FROM
STUDENTS S LEFT OUTER JOIN NOTICES N ON S.SID=N.WRITER GROUP BY S.SID,S.NAME;

자기가 자신을 참조하는 조인
SELECT B.NAME BOSS, M.NAME "MEMBER" FROM
STUDENTS B JOIN STUDENTS M ON B.SID=M.BOSS ORDER BY B.NAME;

컬럼이 같은 테이블의 레코드를 합치는 연산
SELECT SEQ,CONTENT,WRITER FROM NOTICES UNION
SELECT SEQ,CONTENT,WRITER FROM COMMENTS;
합쳐서 검색했는데, 검색이 어디서 됐는지 위치 확인
SELECT*FROM(
SELECT SEQ,CONTENT,WRITER,'NOTICES'TBL FROM NOTICES UNION
SELECT SEQ,CONTENT,WRITER,'COMMENTS'TBL FROM COMMENTS
)
WHERE CONTENT LIKE '%d%';
:TBL의 별칭에서 COMMENTS와 NOTICES를 표시해준다

검색된 결과가 테이블당 몇개인지 확인
SELECT TBL, COUNT(SEQ) FROM (
  SELECT SEQ, 'NOTICES' TBL FROM NOTICES UNION
  SELECT SEQ, 'COMMENTS' TBL FROM COMMENTS
)
GROUP BY TBL;

VIEW

조인 문장을 VIEW로 만들어 놓기
CREATE VIEW NOTICESVIEW777 AS
SELECT N.SEQ,N.TITLE,N.WRITER,S.NAME,COUNT(C.SEQ)CNT FROM
STUDENTS S RIGHT OUTER JOIN NOTICES N ON S.SID=N.WRITER
LEFT OUTER JOIN COMMENTS C ON N.SEQ=C.NOTICESEQ
GROUP BY N.SEQ,N.TITLE,N.WRITER,S.NAME;
VIEW를 이용해 쿼리하기
SELECT*FROM NOTICESVIEW777 WHERE TITLE LIKE '%오%'ORDER BY SEQ DESC;

게시글 나눠서 보기
SELECT *
FROM (SELECT ROWNUM NUM,N.* FROM (SELECT * FROM NOTICES ORDER BY REGDATE DESC)N)
WHERE NUM BETWEEN 1 AND 15;

 


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

해당 숫자에 몇건이 있는가?  (0) 2014.06.25
해당월의 마지막 날짜 구하는 쿼리  (0) 2014.05.13
TABLESPACE, TRUCATE  (0) 2014.04.07
날짜 갖고 놀기  (0) 2014.03.28
실전에서!!!  (0) 2014.03.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

숫자 맞추기 겜

개발/코딩 2013. 10. 11. 20:25

import java.util.Random;
import java.util.Scanner;

public class 연습 {
 public static void main(String[] args) {
  Scanner scan = new Scanner(System.in);
  Random rand = new Random();
  int j = rand.nextInt(100);
  int k = 1;
  int low=0;
  int high=100;
  while (k == 1) {
   int i = scan.nextInt();
   if (j < i) {
    System.out.println("더 낮게");
    high=i;
    System.out.printf(low+"-"+high);
    
   } else if (j > i) {
    System.out.println("더 높게");
    low=i;
    System.out.printf(low+"-"+high);
   }
   else if (j == i) {
    System.out.println("맞다");
    System.out.println("다시 하겠습니까?(1/2)");
    k = scan.nextInt();
    if(k==1){
    System.out.println("시작");
    j = rand.nextInt(100);
    high=100;
    low=0;
    }
    else{
     System.out.println("종료");
     }
    }
   }
  }
 }

 

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

JSP특징  (0) 2013.11.15
비행기 겜 완성  (0) 2013.10.21
비행기  (0) 2013.10.11
삽입 정렬  (0) 2013.10.11
그림 파일불러오기  (0) 2013.10.10

비행기

개발/코딩 2013. 10. 11. 17:54

 

package shooting;

public class Enemy {
 private EnemyMissile[] missiles;
 
 public Enemy() {
 missiles=new EnemyMissile[100];
}
 
}
======================================

package shooting;

public class EnemyMissile {

}
=====================================

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;
 }
  
 }
}

====================================

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;

public class GameBoard extends Canvas { // 겜보드가 세가지를 가지고 있다.
 private Fighter fighter; // Canvas는 윈도우가 제공해주는거(도화지 역할)
 private Enemy[] enemies;
 private StatusBar statusBar; // 정의만 한다
 private Image img; // 함수를 구현할때 필요한 이미지

 public GameBoard() {
  fighter = new Fighter(); // 객체 생성
  enemies = new Enemy[100]; // 참조할수 있게 배열 선언,객체 생성은 안됐다.
  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:

   fighter.move(key); // key 가 눌리면 무브함수가 바꿔주지만 그림은 바뀌지않는다.
   break;
   }
   repaint(); // 화면을 다시 그리게 한다.

   }
  });

 }

 public void paint(Graphics g) {

  super.paint(g);
  g.drawImage(img, 0, 0, this); // 그림을 그려달라
  fighter.paint(g, this);    // 파이터에 그림을 그려달라(그림 그리는 도구,도화지)
 }
}


/*
 * MyKeyListener클래스를 처음에는 생성했는데 필요 없다. //public class MyKeyListener implements
 * KeyListener { //키입력받는 기능을 구현하겠다 //내부 클래스
 * public void keyPressed(KeyEvent e) {
 * // 키가 눌리는거에 관심
 *
 * final int LEFT=37;final int RIGHT=39; //상수형 변수는 대문자로
 *
 * int key = e.getKeyCode();
 *
 * switch (key) {
 * case KeyEvent.VK_LEFT: //비행기를 왼쪽으로
 * case KeyEvent.VK_RIGHT:
 * case KeyEvent.VK_DOWN:
 * case KeyEvent.VK_UP:
 *
 * fighter.move(key); //key 가 눌리면 무브함수가 바꿔주지만 그림은 바뀌지않는다.
 * break; }
 * repaint();
 * //화면을 다시 그리게 한다. }
 *
 * public void keyReleased(KeyEvent arg0) { // 키가 떼는거에 관심
 * }
 * public void keyTyped(KeyEvent arg0) { // 어떤 문자가 눌렸는지 관심(화살표 누르면 실행X)
 *
 * } }
 */
/*
 * -------------------------------------------------------------------
 *
 * addKeyListener(new KeyListener() { //클래스를 생성할 필요 없다.
 *          한번만 객체 생성하면 되기때문에,익명클래스
 * 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:
 *
 * fighter.move(key); // key 가 눌리면 무브함수가 바꿔주지만 그림은 바뀌지않는다. break; } repaint();
 * // 화면을 다시 그리게 한다. }
 *
 * public void keyReleased(KeyEvent e) { }
 * public void keyTyped(KeyEvent e) { }
 * });
 */
============================================================================

 

package shooting;

import java.awt.Frame;

public class MainFrame extends Frame//윈도우가 제공
 //private SplashBoard splashBoard;  //게임 전 스페이스를 눌러 게임시작하는거
 private GameBoard gameBoard;
 //private RankingBoard rankingBoard;
 
 public MainFrame() {
  gameBoard=new GameBoard();
  this.add(gameBoard); //이걸 해줘야 게임이 뜬다. add는 프레임에 보드 붙여준다.
 }
}
=====================================

package shooting;

public class Program {
 public static void main(String[] args){
  //GameBoard gameBoard=new GameBoard(); 안된다 Frame부터 띄워야한다.
  MainFrame frm=new MainFrame();
  frm.setSize(420,500);
  frm.setVisible(true);
 }
}
==========================================

package shooting;

public class StatusBar {

}
================================

package shooting;

public class UserMissile {

}

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

비행기 겜 완성  (0) 2013.10.21
숫자 맞추기 겜  (0) 2013.10.11
삽입 정렬  (0) 2013.10.11
그림 파일불러오기  (0) 2013.10.10
캡슐 이해 (오목)  (0) 2013.10.07

삽입 정렬

개발/코딩 2013. 10. 11. 09:15

package Group;

public class InsertionSort {
 public static void main(String[] args){
  int[] A={31,25,12,22,11};
  int buf,j;
  for(int i=1;i<5;i++){
   buf=A[i];
   for(j=i-1;j>-1;j--){
    if(buf<A[j]){
     A[j+1]=A[j];
    }
    else    
     break;  // j 가 0이 되면 for 문을 벗어난다
   }
  
  A[j+1]=buf;
  for(int k=0;k<5;k++)
   System.out.printf("%d ",A[k]);
  System.out.println();
   }

 }
 }
====결과 창====

11, 12, 22, 25, 31

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

숫자 맞추기 겜  (0) 2013.10.11
비행기  (0) 2013.10.11
그림 파일불러오기  (0) 2013.10.10
캡슐 이해 (오목)  (0) 2013.10.07
get,set이용해서 성적입력 Ver2  (0) 2013.10.02

그림 파일불러오기

개발/코딩 2013. 10. 10. 16:31

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;


public class MyFrame extends Frame{

 private Image img;
 public MyFrame(){
  Toolkit tk=Toolkit.getDefaultToolkit();
  img=tk.getImage("res/222.jpg");  //이미지 선택
 }
 public void paint(Graphics g) {
  
  super.paint(g);
  try{
   int offy=0;
  g.drawImage(img,0,0,210,60,0,0,200,50,this);//시작좌표(너비),시작좌표(높이),끝,끝,가져올이미지의<<
  Thread.sleep(500);  //0.5초 간격으로 멈추기
  
  offy +=10;
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this  Thread.sleep(500);
  offy +=10;
  
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this  Thread.sleep(500);
  offy +=10;
  
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this  Thread.sleep(500);
  offy +=10;
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this  Thread.sleep(500);
  offy +=10;
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this  Thread.sleep(500);
  offy +=10;
 
  
  g.drawImage(img,0,0,210,60,0,0+offy,500,200+offy,this 
 
  }catch(InterruptedException e){
  e.printStackTrace();
  
  }
 } 
 
}

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

비행기  (0) 2013.10.11
삽입 정렬  (0) 2013.10.11
캡슐 이해 (오목)  (0) 2013.10.07
get,set이용해서 성적입력 Ver2  (0) 2013.10.02
상속(예제)  (0) 2013.10.01

자바 Referenced Libraries 만들기

개발/이론 2013. 10. 8. 15:50

자바 Referenced Libraries 만들기  +   [Sist/java]   |  2013/10/01 20:14

자바에서 직접 라이브러리를 만들어서 활용해보자.

1. 생성할 프로젝트를 정한다.



2. 지정한 프로젝트에 마우스를 대고 우클릭을하고 Export를 클릭한다.



3. Export창이 뜨는데 Java를 클릭해보면 JAR file이 보인다 (Jar 만들 소스를 컴파일 함과 동시에 Jar로 만들어준다) Next.



4. Jar Export창에서 Jar파일을 만들 소스와 export할 위치를 설정해준다. 

(javaPrj - src - exam패키지 안에 Record와 RecordView를 묶어서 Jar파일을 생성)



5. 라이브러리를 불러올 프로젝트 마우스 우클릭 - Build Path - Configure Build Path


 

6. Properties for javaPrj창이 뜬다.


7. Java Build Path메뉴에서 Libraries탭을 선택한 후 Add External JARs...를 클릭



8. jar파일을 불러온다



9. 생성된 라이브러리를 확인할 수 있다. OK를 누르자



10. 왼쪽아래 Referenced Libraries가 생성된 것을 확인할 수 있다.


 

 

출처 : http://adiosamigos.tistory.com/17

'개발 > 이론' 카테고리의 다른 글

MVC 1, MVC 2 차이  (0) 2017.12.06
자바 세마포어( JAVA Semaphore )  (0) 2015.12.29
9월 11일  (0) 2013.09.12
9월 9일  (0) 2013.09.12

캡슐 이해 (오목)

개발/코딩 2013. 10. 7. 15:50

package com.newlecturegame;

public class Program {
 public static void main(String[] args){
  MenuView menuView=new MenuView();   //객체 생성
  GameView gameView=new GameView();
  RankView rankView=new RankView();
  
  menuView.print();         //메인메뉴 화면 출력, print 선택하고 F3누르면 해당 프린트로 이동
  int menu=menuView.input();     //메인메뉴에서 메뉴 선택
  
  switch(menu)
  {
  case 1:
   gameView.print();   //게임 선택시 게임화면 출력
   break;
  case 2:
   break;
  }
 }

}

=====================================================================================

package com.newlecturegame;

import java.util.Scanner;

public class MenuView {
 public void print() {
  System.out.println("1. 1인용");
  System.out.println("2. 순위보기");
  System.out.println("3. 종료하기");
  System.out.print(">");
 }

 public int input() {
  Scanner scan=new Scanner(System.in);  //메뉴 입력
  int menu=scan.nextInt();
  
  return menu;
 }
}
=====================================================================================

package com.newlecturegame;

public class GameView {
 private OmokBoard board; // GameView 가 보드,상태바,겜메뉴를 포함하고 있다.
 private StatusBar statusBar;
 private GameMenu menu;

 public GameView() { // 생성자 Ctrl+Space+Enter누르면 자동 생성
  board = new OmokBoard(30,20); // 객체 생성,(오목 보드 크기 생성)
  statusBar = new StatusBar();
  menu = new GameMenu();
 }

 public void print() { // print 할거 모아놈
  board.print(); // .print 빨간줄 클릭하면 함수 생성.
  statusBar.print();
  menu.print(); //게임화면 메뉴 프린트
  
  switch(menu.input()) { //게임화면에서 메뉴 입력
  case 1:
   Omok omok=new Omok();  //오목 생성
   omok.input();
   board.put(omok);  //보드에 오목을 둬야한다.
   break;
  case 2:
   break;
  case 3:
   break;
  default:
   break;
  }
 }
}

===================================================================================

package com.newlecturegame;

import java.util.Scanner;

public class GameMenu {

 public void print() {
  System.out.println("1>오목두기\n2>한수봐줘\n3>도움말");  
 }
 public int input() {
 /* MenuView menu=new MenuView();  메뉴뷰에 있는 input가져올수있다.*/
  System.out.print("선택 :");
  Scanner scan=new Scanner(System.in);  //게임화면에서 메뉴 입력
  int menu=scan.nextInt();
  return menu;
 }
}
=================================================================================

package com.newlecturegame;

import java.util.Scanner;

public class Omok {
 private int x;
 private int y;
 private int type;
 
 public void input(){
  
 System.out.println("(x,y)를 입력해주세요.");
 Scanner scan=new Scanner(System.in);
 x=scan.nextInt();
 y=scan.nextInt();
 }
}

=================================================================================

package com.newlecturegame;

public class OmokBoard {
 
 private char [][] buf; //연산자가 들어갈수없다. 함수안에서만 연산자 가능
 private int width;    //너비
 private int height;   //높이
 
 public OmokBoard(int width,int height){   //GameView에서 입력받는다.
  this.width=width;
  this.height=height;
  int i,j;
  buf=new char[height][width];   //세로,가로
  for(i=0;i<height;i++){
   for(j=0;j<width;j++){
   buf[i][j]='┼';
  }
 }
}
 public void print() {    //바둑판 출력
  int i,j;
  for(i=0;i<height;i++){
   for(j=0;j<width;j++){
 
   System.out.printf("%c",buf[i][j]);
   }
   System.out.println();
  }
 }
 public void put(Omok omok) { //GameView,board.put(omok);에서 빨간줄 클릭해서 생성
 }

}

=================================================================================

package com.newlecturegame;

public class RankView {

}

=================================================================================

package com.newlecturegame;

public class StatusBar {

 public void print() {
  System.out.println("turn : KCH");
  
 }

}

 

 


 

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

삽입 정렬  (0) 2013.10.11
그림 파일불러오기  (0) 2013.10.10
get,set이용해서 성적입력 Ver2  (0) 2013.10.02
상속(예제)  (0) 2013.10.01
get,set이용해서 성적입력.  (0) 2013.10.01

get,set이용해서 성적입력 Ver2

개발/코딩 2013. 10. 2. 17:37

=========메인 함수===========

 

package oop.instance;
import java.util.Scanner;

public class Program2{
 public static void main(String[] args) {
  Record record = new Record();
  int total = 0;
  float avg = 0;
  int menu = 0;
  Scanner a = new Scanner(System.in);
  Scanner in = new Scanner(System.in);
  뿅:while (true) {
    
   switch (RecordView.inputMenu()) {
   
   case 1:
    RecordView.inputRecord(record);
    break;

   case 2:
    RecordView.printRecord(record);
    break;
    
   case 3:
    System.out.println("종료됩니다");
    break 뿅;
    
   default:
    System.out.println("입력이 잘못됐습니다. 다시 입력하세요");
   }
  }
 }
}

 

 

=============레코트 뷰===========================

package oop.instance;
import java.util.Scanner;


public class RecordView {
 private Record record;
 public static int inputMenu(){
  int menu;
  Scanner in = new Scanner(System.in);
  System.out.println("┌─────────────────────────────┐");
  System.out.println("│           메인 메뉴             │");
  System.out.println("└─────────────────────────────┘");
  System.out.println("1.성적 입력");
  System.out.println("2.성적 출력");
  System.out.println("3.종료");
  System.out.print("선택>");
  menu = in.nextInt();
  return menu;
 }

 public static void inputRecord(Record record){
  int kor,eng,math;
  Scanner a = new Scanner(System.in);
  System.out.println("┌─────────────────────────────┐");
  System.out.println("│           성적 입력             │");
  System.out.println("└─────────────────────────────┘");

  do {
   System.out.print("국어:");
   kor = a.nextInt();

   if (kor < 0 || kor > 100)
    System.out.println("성적 범위를 벗어났습니다,다시 입력하세요");
  } while (kor < 0 || kor > 100);

  do {
   System.out.print("영어:");
   eng = a.nextInt();

   if (eng < 0 || eng > 100)
    System.out.println("성적 범위를 벗어났습니다,다시 입력하세요");
  } while (eng < 0 || eng > 100);

  do {
   System.out.print("수학:");
   math = a.nextInt();

   if (math < 0 || math > 100)
    System.out.println("성적 범위를 벗어났습니다,다시 입력하세요");
  } while (math < 0 ||math > 100);

  record.setKor(kor); //record는 객체, 값을 담을수 있는 공간
  record.setEng(eng); //record에 eng을 세팅해줄래?(eng)값으로
  record.setMath(math); //record.math(30);으로 해도 되는데, 구조 바뀔까바
 }
 
 public static void printRecord(Record record){
  int total = record.total(); //다른클래스의 이름을 변경(kor=>kor1)하면 여기에서만 오류 날 수 있도록(?)
  float avg = total / 3.0f;    
  System.out.println("┌─────────────────────────────┐");
  System.out.println("│           성적 출력              │");
  System.out.println("├────┬────┬────┬────┬────┬────┤");
  System.out.println("│ 번호 │ 국어 │ 영어 │ 수학 │ 총점 │ 평균 │");
  for (int i = 0; i < 3; i++) {
   System.out.println("├────┼────┼────┼────┼────┼────┤");
   System.out.printf("│%3d │%3d │%3d │%3d │%3d │%6.2f │\n",i + 1,
 record.getKor(), record.getEng(),record.getMath(), total, avg);
  }       //Racord 클래스에 과목(값)을 얻어주라는 뜻.get
  System.out.println("└────┴────┴────┴────┴────┴────┘"); 
 }
}
 

=====================레코트 클래스=======================

package oop.instance; //코드의 캡슐화

public class Record {
  int kor;
  int eng;
  int math;
 

 

 public int total() {
  return this.kor + this.eng + this.math;
 }

 public void setKor(int kor){
  this.kor=kor;
 }
 public int getKor() {
  return this.kor;
 }
 public void setEng(int eng){
  this.eng=eng;
 }
 public int getEng() {
  return this.eng;
 }
 public void setMath(int math){
  this.math=math;
 }
 public int getMath() {
  return this.math;
 }
}
//static 을 지우면 인스턴스 함수(객체 함수)가 된다

 

 

 

 

 

 

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

그림 파일불러오기  (0) 2013.10.10
캡슐 이해 (오목)  (0) 2013.10.07
상속(예제)  (0) 2013.10.01
get,set이용해서 성적입력.  (0) 2013.10.01
입력 단어와 일치하면 그 라인에 있는 문자 출력하기(자막)  (0) 2013.09.30