


기본적인 게임의 처리 구조, 이미지나 멀티키를 다루는 기본 테크닉을 배울 수 있습니다.
사운드라던가 좀 더 풍부한 리소스를 다루기 위해서는 기본적으로 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에서도 잘 돌아가네요.


--------------------------------------
업데이트 이력
2010-10-04 : 점수 아이템, 게임오버 적용
2010-10-05 : 실드 아이템/기능, 레벨, 이동속도조절, 일시정지, 적 캐릭터 공격 다양화 적용, 부제를 요시카 스크램블로 잠정 결정


댓글을 달아 주세요
댓글 RSS 주소 : http://www.modelisland.pe.kr/blog/rss/comment/220아웅~ 예쁜걸로 치면 확실히 맥이라능~
그런데 저 게임, 케릭이랑 배경 작업 혼자 다 하신거에요?
타이틀만 OVA판 타이틀 화면 캡처 가공한거고 나머지는 다 직접 만든거죠.
그림 몇 장 안돼요..
제가 소스를 이클립스에다가
클래스이름 W_Shooting 로되있어서 클래스만들고
실행햇는대
Education ver <<라는 글씨만뜨고 실행이안되요 ㅠㅠ
왜그런거죠 ㅠㅠㅠㅠㅠ???
저도 처음 보는 경우인데, JDK 문제가 아닌가 싶습니다..
펭귄님 ㅠㅠ 그러면은 펭귄님꼐서 실행하신방법좀
자세하게 설명해주시면안될까요?ㅠㅠㅠㅠ
뭐 이미지 폴더는 자바의 어느폴더에넣고...
이런것좀 알려주세요 ㅠㅠㅠㅠㅠㅠㅠㅠ
소스그대로 복사해서 막 넣엇다 이런거 ㅠㅠㅠ
부탁드립니다.!
압축을 풀면 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
이렇게 해도 됩니다.
관리자만 볼 수 있는 댓글입니다.
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 는 적당히 맞는 위치로 수정해 주세요.
관리자만 볼 수 있는 댓글입니다.
우선 라이프로 쓰실 그림을
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++; 이런 식으로요.
이렇게 하면 아예 게임 난이도 자체가 올라가질 않아서 많이 쉬워집니다.
관리자만 볼 수 있는 댓글입니다.
이건 얘기가 많이 길어지니까 아예 따로 포스팅을 준비하도록 하죠.. 언제 될지는 모르겠지만 ^_^;
관리자만 볼 수 있는 댓글입니다.
관리자만 볼 수 있는 댓글입니다.
주말이 끝나기 전까지는 될듯요.. 좋은 주말되세요~
오늘까지는 못 끝나겠네요. 내일 저녁 쯤 들러주세요
관리자만 볼 수 있는 댓글입니다.
관리자만 볼 수 있는 댓글입니다.
여기에 붙은 답글 말고 새로 올라온 글 확인해 보세요
저도 Education ver. 만 뜨고 실행이 안되용..ㅜㅜ
맥 쓰는데 맥에서 어떻게 실행하신거죠? 부탁드립니다 ㅜㅜ
Education ver. 까지 나왔다면 실행은 맞게 된 것 같습니다만..
아마 압축을 푼 폴더 이름이나 그래픽 데이타가 들어있는 폴더 위치에 문제가 있는건 아닐까 싶습니다.
지금 맥을 쓰고있지 않아서 자세한 확인은 어렵겠네요..
아이템 추가하는법좀 알려주세요......
http://www.modelisland.pe.kr/blog/331
위 포스팅을 참고해주세요.