사용자 삽입 이미지

졸업작품으로 만든 게임입니다.
원래 게임은 Wipi 휴대폰 이지만.. 여러 사정으로 NDS로 간략하게 만들었습니다.
게임 자체는 내용도 없고.. 벨런스 테스트도 안해서 형편없습니다..

그냥 제작하는 방법 파악정도가 목표였고 그 목표를 다했다고 생각합니다.

교육 하는 부분은.. 블랙켓(아이디어 팩토리)의 '이브' 교육하는걸 좀 모방했고요....
사운드 마지막에 우연히 넣는법을 알아서 어느정도 게임 프레임은 나오는거 같습니다.

실제 NDS는 올리지 않았습니다..(넣어서도 안되구요)
자세한건 게임 시작의 about 쪽을 봐주시기 바랍니다.

조작은.. 거의 터치 스크린으로 했습니다.
패드 조작도 넣긴 했는데 많이 하진 않았습니다 ;_;

  1. 극악 2008.10.25 03:40

    gba스테이션에서 보고 왔습니다~ 들어와보니 어디서 많이 본 블로그가 -_-;; rss등록 해놓은;;
    대단하신데요~ 저도 NDS로 만들어보고 싶은데^^; 실력이... 완성하셨으니 축하드립니다!!!

  2. Macapen 2008.12.03 13:26

    안녕하세요? 구글링 하다가 방문해봤는데 NDS용 게임을 만드셨다길래 너무 궁금하네요
    어떤 방식으로 개발하신건지 제가 알 수 있을까요?

    • 장미전쟁 2008.12.03 14:37 신고

      기본적인것은 Devkit 과 .net 2005로 프로그래밍 했습니다.
      자세한건 요 위에 "NDS 프로그래밍" 테그를 따라가시면 됩니다.

본 과제는 4학년 1학기 게임서버 프로그래밍 과목에서 했던 프로젝트 입니다.

환경은 아래와 같습니다.

OS

유분투 리눅스

Editer

Vi… 나중엔 Ultra Editer

System CPU

아마 펜티엄3 800Mhz 급으로 추정 ㅡ_ㅡ;;

SQL

MySQL

연결

Putty , Ultra Editer


과제의 요구사항

1. 가상의 2차원 공간에서 이동하며 서로 채팅 할 수 있는 시스템을 만든다
   가상공간의 크기는 x,y축 모두 -5000~ +5000 까지이며 meter 단위로 간주한다

2. 채팅서버는 telnet을 client로 이용한다 각 서버는 master mode와 slave mode로 실행이 가능하다

3. 한 채팅 서버 시스템에는 한 개의 마스터 모드 서버와 복수의 슬레이브 모드 서버가 존재한다.

4. 슬레이브 모드 서버는 클라이언트로부터의 telnet 연결을 처리하고, 마스터모드 서버와의 통신을 수행한다.

5. 마스터 모드 서버는 클라이언트로부터의 telnet연결을 처리하고, 필요한 DB access를 수행하며,
   슬레이브 모드 서버와의통신을 수행한다

6. 접속중인 전체 사용자의 모든 정보는 슬레이브 모드 서버에서도 유지되며, 접속중인 사용자에
   대한 중복 로그인 방지, /who 명령의 처리 등에 그 정보를 이용하여 마스터 – 슬레이브 모드 서버간
   통신량을 줄여야 한다.

7. 필요한 구체적 기능

  가. Login name/password를 DB에 저장(user table)
     telnet 연결후 로그인 / 패스워드 체크 후 일치할 경우만 입장 허용

  나. Login/logout 기록을 DB에 저장(log table)

  다. 중복된 로그인 체크/방지
     이미 로그인 한 사용자의 로그인 네임으로 로그인 할경우, 이미 사용중이란 메시지 띄우고 연결 해제.
     해당 로그인 클라이언트는 다른곳에서의 로그인 접속이 있다고 경고 메시지 보냄.
 
   라. 명령어.
      / 로 시작

명령어

기능

/user 

전체 사용자 목록

/who 

현재 접속중인 사용자 목록, 좌표등 관련 정보 표시

/who <login> 

특정 사용자의 정보
접속중 : 접속한시간, 현재 좌표 표시
접속중이 아닐 때 : 마지막 logout 시간, 그 좌표 표시

/passwd <password> 

패스워드 변경

/last <who> <num> 

사용자의 최근 사용내역 조회

/walk 

1m/s 속도로 전진. 3초마다 현재 위치 표시

/run 

10m/s 속도로 전진. 3초마다 현재 위치 표시

/stop 

현 위치에 정지

/toward <azimuth> 

방위각 전환(절대값)

/tleft <angle> 

왼쪽으로 <angle> 만큼 회전 (상대값)

/tright <angle> 

오른쪽으로 <angle> 만큼 회전(상대값)



   마. /toward, /tleft, /tright는 정지시에만 가능
  
   바. * '/'로 시작하지 않는 입력은 채팅 메시지로 간주

   사. 시야 내에 있던 상대방이 시야 밖으로 나가거나, 그 반대의 경우 이를 알려준다.

   아. 가시거리는 100m, 가청거리는 50m로 한다.

   자. 5분마다 현재 시간을 사용자에게 보여주도록 한다.
   
 8. 서버간 통신을 위한 패킷 구현 …

===========================================================================================
전 저기서 7번까지만 구현하구 GG 쳤습니다. ㅜㅜ
일정도 꼬였고.. visual studio로 소스 확인하면서 vi에 그대로 다시 치고.. make 하고…
어떻게 마스터 서버를 구현하고 슬레이브 만들려 하니... 좀 갈아 엎어야 하고..
기한 1주일 남았을 때.. ultra editer의 아주 편한 기능이 있었다는걸 알았을땐 ….
( http://rosagigantea.tistory.com/267 )


사용자 삽입 이미지

… 세상은 하얗더군요..

프로그램 자체는.. 정말 아주 단순한 심플한 게임서버 입니다.

제가 하는 에밀크로니클 온라인..(라그나로크 같은)처럼 3차원도 아니고
2차원에다가.. (아니.. 요즘 대다수 MMORPG 그래픽이 3D이지만 자세히 보면2D 좌표계…)
케릭터 뿌리는것도 없고
단지.. 이동만 가능. 그렇다고 케릭터 회전값이라던가 그런것도 없죠.
사거리에 따른 채팅 메시지 전달 (즉, 내 주변의 있는 클라이언트를 검출하는 알고리즘)
실시간 움직이고 있는 것을 예측하는 시스템(DRM)
DB와의 연동(MySQL)을 과부화 주지 말아야 하고(실시간 DB 저장보단 일정시간 후 저장)
네트워크 부하를 낮추기 위해 패킷을 한데 묶어 동시에 보내기(Queue)
사용자 감시를 위해 log table 따로 관리
중복 접속자 처리를 방지해야 하고..

음… 이런 복잡한 처리가 있는게 게임 서버 기술입니다 ;_;

학교에서 오우거 엔진 시간때... 턴프로젝트로 만든겁니다.
혼자 만들었고...
... 중간에 블루투스 동굴 꽂았다가 저 세상 가버린.. 노트북때문에.. (작업을 노트북에서 했습니다..)
(이번에도 역시 35만원 달라고 하는 H▼ A/S.. 전에도 35만이니 .. 70만원치인가.. 차라리 새로 사고 마는.. orz)
완성도는.. 그리 높지 않습니다.... (그마나 백업한게 있었으니 망정.. 조금 update가 늦은거지만.. orz)

이 게임은..... 배고파.org (http://onakasuita.org/) 에서 해킹한... Wii 리모트 컨트롤러를 활용한 게임입니다.

일단 집에 Wii 컨트롤러가 있고, 컴퓨터가 블루투스를 받을 준비 됬다면...
Wii 리모트를 컴퓨터와 연결한뒤 이 겜을 시작하면 리모트로 게임 할수 있습니다.

(없어도 됩니다..)
게임에서 만 Wii 리모트가 적용되고
사용키는... 눈챠크 연결해서...
이동(화살표),
카메라 회전(눈챠크 아날로그 컨트롤러 + C or Z 키),
낚시 시작 B키 로 되어있고, 낚시해서 물고기가 물리면 Wii 리모트가 진동하게 되고
이때 위아래로 흔들어 주면 물고기가 서서히 올라옵니다.

키보트는.... 마우스 왼쪽 버튼 누르면서 돌리면 이동 / 키보트 화살표도 이동...
마우스 오른쪽 버튼 누르면서 돌리면 카메라 회전...
낚시 모드 체인지는 휠버튼 클릭
이땐 위의 낚시 감도를 보고 있다가.. 숫자로 띄어지면...
Z 키를 연타하면 됩니다.....

말이 낚시지.. 3D쪽 모델링에 익숙하지 않아 텍스쳐도 씌어져 있지 않고... 낚이는것도
오우거 기본 모델링인.. 물고기, 닌자, 오우거 머리, 로봇 정도 입니다.. (물론 낚이는거에 따라 올라가는 돈(점수)도 다릅니다..)

<게임 프로그램>


처음 실행할때
사용자 삽입 이미지
이런식으로 뜨는데... 가능한 옵션을 많이 주는게 좋습니다.
프레임이 풀려있어서.. 성능 좋은곳에선 1000fps 도 나오더군요.. >_<;;;
이러면 물고기가 미끼를 물자 마자 도망가는 시간이 더 빨라서 못잡습니다..

기본 화면은...
사용자 삽입 이미지
음... 뒤에 .. 3D 평면을 세운뒤 거기에 텍스쳐 그림을 씌웠습니다.
그리고... CEGUI 를 써서 기본 버튼만 만들구요..

Game Start! 버튼을 누르면 아래와 같이 나옵니다..

사용자 삽입 이미지
사용자 삽입 이미지
이거 포함해서 맵은 총 3개입니다..
약간의 Overlay 와... CEGUI... 뒷 배경은 2D 매트리얼로 대충 넣었구요..
지구나.. 혹성은.. 3D 구체 띄운뒤 거기 텍스텨를 버튼을 돌릴때마다 바꾸게 하였습니다..

게임을 시작 하면..
사용자 삽입 이미지
이런 화면이 뜹니다...
음.. 검은건.. 텍스쳐가 안입혀진겁니다.... orz
배의 경우... 비스마르크 전함 구명 보트이고.. (....?)
저기 앞에 있는 흰배는... 되먹지 못한 3D맥스 실력으로 20분간 버텍스 땡겨서 나온거구요..
바다나.. 스카이 박스... 대강 돌렸습니다.

특히 바다 구현은.. http://starlike.cafe24.com/moniwiki/wiki.php/OgreOceanDemoAnalysis 의 강좌를 갖구왔구요 네이버 주바뤼님.. 정말 감사합니다... ㅠ_ㅠ.

밑의 사전은.. 다른 맵에서.. 낚시하고 있는 장면입니다.
모델링 자료가 없어서.. 오우거 샘플 예제의 기본.. 모델링.. 닌자와.. 물고기가 낚이고 있습니다 ㅋ
스카이 박스는... 목성 사진과.. 은하계 사진을 대강 포토샵으로 수정해서 만들어 냈습니다.
사용자 삽입 이미지
사용자 삽입 이미지

... 현재 풀 옵션에... 화면크기.. 1280x1024 급인데.. FPS 가.. 65 FPS 정도 나옵니다..
800x600 no 옵션하면... 제 컴퓨터 성능으로는 300fps 가 나오더군요.
(제 컴은.. 콘로 6300, 2GB, Radeon HD 2400 입니다..)


ps..
친구 노트북.. (D◎◇L) 사의 노트북에선 작동이 안된다는군요..
... 다음 노트북 구매는.. 일단 ☆P社와... □EL◇社는 제외해야 할꺼 같군요..

이전 만들어놓은 것을 이번 STL 강의 하면서 내부 소스 정리 (알고리즘 STL 변경)

및 term project 겸 겸사 겸사 해서 만들었습니다.

<프로그램 실행파일들>




Study는 제가. Note 부분은 저와 같은 팀원이 맡아서 했지만, 소스는 대부분 공유된 상태에서 공동 작업 진행됬습니다.  우선 실행화면은 아래와 같습니다.

<J-Study>

사용자 삽입 이미지

Talk 박스와 케릭터 창으로 구성되어 있습니다

위 그림은 커스텀으로 조정이 가능합니다.

압축파일 안에 있는 talk.png 파일과 backpic.png 파일의 그림을 다른것으로 교체 하시면

그것 모양대로 바뀜니다. 단 투명색은 RGB(0,255,0) 진녹색 입니다.

<케릭터 그림> 진녹색이 투명색으로 처리 됩니다.

사용자 삽입 이미지

그림은 니어리님 플레쉬에서 갖구 왔습니다. (http://niari.gaver.org/).. orz

메뉴는 케릭터에 마우스 오른쪽 버튼으로 호출할수 있습니다.

사용자 삽입 이미지

기능 메뉴

구분

메뉴

기능

화면조정

케릭터 윈도 숨기기

케릭터를 숨김니다.

단어창 위치 조정

단어창 위치와 단어창 투명도를 바꿈니다

언제나 위에 표시

단어창을 항상 위로 표시할수 있습니다.

사전 검색 기능

네이버 사전 띄우기

네이버 사전을 띄웁니다.

현재 창 단어 자동검색

네이버 사전을 띄워야 나오는 옵션입니다.

단어 조정

노트 불러오기

임의의 노트(.note) 파일을 로드합니다

난이도 조절

후리가나 / 단어 / 뜻등의 난이도 조절

단어 렌덤 출력

단어를 사전순이 아닌 렌덤 하게 출력합니다

다음 단어까지 시간

다음 단어까지 시간을 설정합니다.

이전단어

케릭터창을 클릭해야 됩니다. 케릭터 창을 더블클릭해도 됩니다

다음단어

다음단어로 넘김니다.

단어창은 투명하기 때문에 아무런 클릭이나, 키보드 반응에 응답하지 않습니다.

케릭터창을 닫으신후에는, 트레이 아이콘을 마우스 오른쪽 버튼을 눌러 메뉴를 호출해 주세요

<케릭터 창이 숨겨져 있을 때>

사용자 삽입 이미지

기본적으로 notebook.note 파일을 열게 하였습니다.

노트 불러오기 하시면 eng.note 란것도 있습니다.
그것은 영어 공부 하기 위함으로 테스트 할려고 만들어 봤는데.
별 이상은 없었습니다... (허나 버그 생길수도 있습니다.. >_<)

음.. 즉, 영어 단어장으로 활용하고 싶으실땐
아래 J-Notebook 으로 영어 단어장을 작성하시고 저장을 위의 notebook.note 파일로 저장하시면
영어로 출력이 됩니다.

J-Notebook

이 프로그램은 위 J-Study 에 들어가는 note 파일을 만드는 프로그램입니다.

원래 J-Study 는 txt 파일을 열고 닫았지만, 이걸 편집하는 것이 워낙 귀찮은 일이라

이번기회에 따로 제작 했습니다.

J-Notebook 을 실행하면 아래와 같은 것이 뜹니다

사용자 삽입 이미지

현재창은 기본에 있는 notebook.note 파일을 열었을때 입니다.

New로 새로 노트 파일을 만드시면 됩니다.

그 이후 J-Study 의 메뉴중 노트파일 로드로 불러오시면 됩니다.

뒤의 단어장과 앞에 있는 리모컨 구조로 되어있으며

버튼들의 설명은 아래와 같습니다.

버튼

기능

Note Load

Note 파일을 로드합니다.

Note Save

현재 Note를 저장합니다

New word

새 단어를 추가합니다. 이때 단어는 반드시 입력하셔야 합니다.

Find

단어를 기준으로 찾습니다

Modify

단어를 기준으로 해당 요미가나와 뜻을 수정합니다.

Delete

해당 단어를 삭제합니다.

Quit

프로그램을 종료합니다.

임시단어장

임시 단어장을 엽니다. 주로 신문이나 웹서핑중 번역의 맥을 끊지 않고, 일단 모르는거 계속 쌓아놓고, 나중에 사전으로 뜻을 검색하기 위해 만들어 놓았습니다.

추가적으로 네이버 사전도 띄울수 있습니다.


새로 노트를 만드실땐 반드시 File ->New 를 하시는게 좋습니다.
단어를 추가할때마다  자동 Save가 되는데,  만약, File->New를 안한 상태..
(즉 처음 노트프로그램 열고, 파일로드를 취소한상태에서 작업할때)
에서 단어를 추가하시면, 해당 단어장의 비휘발성을 보장받으실 수 없습니다.

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

ps.. 추가적으로.
원래 이 프로그램은 군대 갔다온뒤에 그곳에서 외웠던 일어를 복습할 차원 겸,
프로그래밍 공부할겸 만들었습니다.

그것을 이번 STL 강의들으면서 자료구조를 STL로 대거 바꿧습니다.
확실히.. 이전보다 안전성면에선 많이 좋아졌습니다..
프로그램 다루는것도 그렇고 소스도 깔끔해 졌고요.

앞으로도 친하게 될꺼 같네요 STL..
다만.. MFC의 문자열 다루는 방법... 같은건 아직 애매한거 같습니다.
내부 단어는 wstring 으로 저장하지만, 이걸 file I/O 할땐 MFC의 CString 을 사용하지 않으면
어째서인지 일어단어가 깨집니다..
Local로 잡고 별 짓을 했지만... GG..

소스는 STL 이 깔끔한데 비해 유니코드 문제는 아직 CString 보다는 사용하기 불편한거 같은 느낌입니다.

+ Recent posts