사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
자바 awt를 사용해서 만들어진 샘플 게임입니다.

기본적인 게임의 처리 구조, 이미지나 멀티키를 다루는 기본 테크닉을 배울 수 있습니다.
사운드라던가 좀 더 풍부한 리소스를 다루기 위해서는 기본적으로 awt를 벗어나 애플릿이나 확장된 라이브러리를 사용해야 합니다만, 여기서는 간단히 awt로만 구현 가능한 것으로 해 보았습니다.

※여기서 제공하는 것은 게임 실행 파일이 아닙니다. 게임 소스 뿐이며, 테스트하기 위해서는 JDK 1.4 이상이 설치되어 있어야 합니다.

파일 다운로드 : http://modelisland.pe.kr/java/SW_tiny.zip
컴파일 방법 : javac W_Shooting.java
실행 방법 : java W_Shooting
(※JDK 1.4 이상 필수)

소스만 보고 파악이 가능하도록 다양한 주석을 달아 놨습니다.
자바로 게임 제작의 기본을 배우고자 하는 분에게 도움이 되기 바랍니다.

p.s.JAVA다 보니 osx에서도 잘 돌아가네요.
사용자 삽입 이미지
최소화 시키면 독으로 이쁘게 슬라이딩
사용자 삽입 이미지
바탕화면 아이콘은 업무 관련이라 가렸습니다.. (osx쓰다 보니 윈도우 배경화면 지저분하게 쓰는 사람을 이해할 수 있게 됐습니다..)

--------------------------------------
업데이트 이력
2010-10-04 : 점수 아이템, 게임오버 적용
2010-10-05 : 실드 아이템/기능, 레벨, 이동속도조절, 일시정지, 적 캐릭터 공격 다양화 적용, 부제를 요시카 스크램블로 잠정 결정
2010/10/03 19:57 2010/10/03 19:57
트랙백은 하나, 댓글 23개가 달렸습니다.

댓글+트랙백 RSS :: http://www.modelisland.pe.kr/blog/rss/response/220

트랙백 주소 :: http://www.modelisland.pe.kr/blog/trackback/220

트랙백 RSS :: http://www.modelisland.pe.kr/blog/rss/trackback/220

  1. Subject: JAVA로 슈팅게임!? 요시카 스크램블 - 보스전 추가

    Tracked from 冥土 모형도 (Model ISLAND) 2010/12/13 21:53  삭제

    5분만에 그린 보스에 많은 걸 기대하지 마셈. 1. 보스 캐릭터 처리를 위한 기본 조치 public void Init_GAME()에서 보스 캐릭터의 그림을 메모리에 로드합니다.gamescreen.enemy[1]=makeImage("./rsc/game/enemy1.png");

댓글을 달아 주세요

댓글 RSS 주소 : http://www.modelisland.pe.kr/blog/rss/comment/220
  1. 큰말 2010/10/05 11:50  댓글주소  수정/삭제  댓글쓰기

    아웅~ 예쁜걸로 치면 확실히 맥이라능~
    그런데 저 게임, 케릭이랑 배경 작업 혼자 다 하신거에요?

  2. 자바 2010/11/28 19:17  댓글주소  수정/삭제  댓글쓰기

    제가 소스를 이클립스에다가
    클래스이름 W_Shooting 로되있어서 클래스만들고
    실행햇는대

    Education ver <<라는 글씨만뜨고 실행이안되요 ㅠㅠ

    왜그런거죠 ㅠㅠㅠㅠㅠ???

  3. 자바 2010/11/29 11:04  댓글주소  수정/삭제  댓글쓰기

    펭귄님 ㅠㅠ 그러면은 펭귄님꼐서 실행하신방법좀
    자세하게 설명해주시면안될까요?ㅠㅠㅠㅠ
    뭐 이미지 폴더는 자바의 어느폴더에넣고...
    이런것좀 알려주세요 ㅠㅠㅠㅠㅠㅠㅠㅠ
    소스그대로 복사해서 막 넣엇다 이런거 ㅠㅠㅠ
    부탁드립니다.!

    • 펭귄대왕 2010/11/29 14:21  댓글주소  수정/삭제

      압축을 풀면 SW_tiny란 폴더가 나옵니다.
      윈도우라면 cmd로 커맨드 라인 들어가서 해당 폴더로 이동해서
      javac W_Shooting.java
      java W_Shooting
      해 주면 됩니다.
      java SDK 설치된 폴더의 bin 폴더에 패스 설정 되어있어야 하고, 패스 설정 안되어 있다면
      예를 들어 SDK가 C:\\j2sdk1.4.2_06 에 설치돼 있다면
      C:\\j2sdk1.4.2_06\\bin\\javac W_Shooting.java
      C:\\j2sdk1.4.2_06\\bin\\java W_Shooting
      이렇게 해도 됩니다.

  4. 비밀방문자 2010/12/06 00:50  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 펭귄대왕 2010/12/06 12:39  댓글주소  수정/삭제

      1.
      ->class Enemy
      ->public boolean move()
      ->switch(shoottype){~} 이 사이를 봅니다.

      bul=new Bullet( // 생략 // );
      main.bullets.add(bul);
      <-이게 한 번 불릴 때마다 총알이 1발 씩 발생합니다.
      그러므로 동시에 쏘는 수를 줄이려면 이것을 리마크하면 됩니다.
      예)
      case 3://플레이어를 향해 3갈래탄을 발사한다
      if(cnt%90==0||cnt%110==0||cnt%130==0){
      bul=new Bullet(pos.x, pos.y, 2, 1, main.getAngle(pos.x,pos.y,main.myx,main.myy), 2);
      main.bullets.add(bul);
      //bul=new Bullet(pos.x, pos.y, 2, 1, (main.getAngle(pos.x,pos.y,main.myx,main.myy)-20)%360, 2);
      //main.bullets.add(bul);
      //bul=new Bullet(pos.x, pos.y, 2, 1, (main.getAngle(pos.x,pos.y,main.myx,main.myy)+20)%360, 2);
      //main.bullets.add(bul);
      }
      break;
      이렇게 수정하면 1회 1발 밖에 발사하지 않습니다.

      이외에, 쏘는 시간 간격을 더 늘려주려면
      if문 내에 cnt%90==0<-cnt는 매 프레임마다 계속 1씩 증가하는 값이고, cnt가 90의 배수일 때마다 총알이 발생한다는 의미입니다.
      그러므로 %뒤의 숫자가 작을 수록 자주, 클 수록 띄엄띄엄 쏘게 됩니다.
      예)
      case 0://플레이어를 향해 3발을 점사한다
      //if(cnt%100==0||cnt%103==0||cnt%106==0) {//cnt로 공격 간격을 체크한다
      if(cnt%200==0||cnt%210==0||cnt%220==0) {//cnt로 공격 간격을 체크한다
      bul=new Bullet(pos.x, pos.y, 2, 1, main.getAngle(pos.x,pos.y,main.myx,main.myy), 4);
      main.bullets.add(bul);
      }
      break;
      이런 식으로 수정합니다.

      다른 case 문 내에 있는 것들도 원하는대로 수정해서 테스트 해 보세요.

      2. 적을 그려주는 부분은 Draw_ENEMY() 입니다.
      이 함수의
      drawImageAnc(enemy[0], buff.dis.x, buff.dis.y, ((cnt/8)%7)*36,0, 36,36, 4);
      부분이 적 캐릭터를 그리는 부분인데,
      우선 수정하려는 그림의 크기를 알아야 합니다.
      만일 그 그림의 크기가 40*40 이라면
      drawImageAnc(enemy[0], buff.dis.x, buff.dis.y, 0,0, 40,40, 4);
      또는
      drawImageAnc(enemy[0], buff.dis.x, buff.dis.y, 4);
      이런 식으로 수정하면 됩니다.


      4. 먼저
      public void Draw_UI() 부분을 봅니다.
      String str1="SCORE "+main.score+" LIFE "+main.mylife+" SPEED "+main.myspeed+" LEVEL "+(main.level+1);
      이 있지요.
      원하시는대로 하려면 이걸
      String str1="SCORE "+main.score+" LIFE "+main.mylife;
      이렇게 수정해 주면 됩니다.


      그럼 다시
      3. 으로 가서
      String str1="SCORE "+main.score+" LIFE "+main.mylife;
      이걸
      String str1="SCORE "+main.score+" LIFE ";
      이렇게 수정하고,
      public void Draw_UI()의 맨 끝 부분에서

      for(int i=0;i<main.mylife;i++) drawImageAnc(face, 200+i*12, 5, 4);

      이런 식으로 해 주면 됩니다.

      ※face는 얼굴 그림이 저장된 Image 객체입니다.
      ※200+i*12,5 는 적당히 맞는 위치로 수정해 주세요.

  5. 비밀방문자 2010/12/07 02:36  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 펭귄대왕 2010/12/07 10:04  댓글주소  수정/삭제

      우선 라이프로 쓰실 그림을
      rsc/game 폴더에 넣어 주세요.

      그 그림을 편의상 face.png 라고 하겠습니다.

      Image shield;//실드
      를 찾아서 그 밑에
      Image face;//라이프용 얼굴
      을 추가합니다.

      그리고,
      public void Init_GAME()
      을 찾아서
      gamescreen.shield=makeImage("./rsc/game/shield.png");
      줄 밑에
      gamescreen.face=makeImage("./rsc/game/face.png");
      를 추가합니다.

      이렇게 하고 Draw_UI() 에서 먼저 답변에서 수정한 것처럼 해 주시면 에러는 나지 않을 겁니다.
      표시 위치는 제가 맞춰본게 아니니까 엉터리로 나오겠지만, 적당히 화면을 보면서 출력 좌표를 수정해 주세요.


      적 총알은 시간이 지나면 점점 많이 쏘도록 프로그램 되어 있습니다.
      이렇게 하지 않으려면..
      Enemy(W_Shooting_frame main, int img, int x, int y, int kind, int mode)
      이 생성자를 찾아서, 생성자 내에서
      cnt=main.RAND(main.level*5,80);
      이 항목을 수정하거나 (예: cnt=main.RAND(main.level*1,10); )

      public void process_GAMEFLOW()
      함수를 찾아서
      level++;에 주석 처리를 해 줍니다. //level++; 이런 식으로요.
      이렇게 하면 아예 게임 난이도 자체가 올라가질 않아서 많이 쉬워집니다.

  6. 비밀방문자 2010/12/09 18:10  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  7. 비밀방문자 2010/12/11 12:25  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  8. 비밀방문자 2010/12/13 21:21  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  9. 학생 2011/11/19 16:22  댓글주소  수정/삭제  댓글쓰기

    저도 Education ver. 만 뜨고 실행이 안되용..ㅜㅜ
    맥 쓰는데 맥에서 어떻게 실행하신거죠? 부탁드립니다 ㅜㅜ

    • 펭귄대왕 2011/11/20 12:43  댓글주소  수정/삭제

      Education ver. 까지 나왔다면 실행은 맞게 된 것 같습니다만..
      아마 압축을 푼 폴더 이름이나 그래픽 데이타가 들어있는 폴더 위치에 문제가 있는건 아닐까 싶습니다.

      지금 맥을 쓰고있지 않아서 자세한 확인은 어렵겠네요..

  10. 학생2 2011/11/28 22:40  댓글주소  수정/삭제  댓글쓰기

    아이템 추가하는법좀 알려주세요......

[로그인][오픈아이디란?]