1. DiceRoller ¶
- 01학번 이선호
- 01학번 이재성
1.1. 제작동기 ¶
- 주사위의잔영 - 소프트맥스의 온라인 커뮤니티 4LEAF에서 서비스중인 게임이다.
- 주사위를 굴려서 골까지 가는 게임으로 게임을 종료하면 소정의 GP를 얻을 수 있다.
- 그러나 이 GP를 얻기가 매우 귀찮은(ㅡㅡ;) 관계로 자동 롤러를 구상중에 있다. 거기에 시간제한까지 있어서 타이머도 붙이게 되었다.
- 윈도우즈 메세지와 창의 인스턴스/핸들 등을 공부하기에 좋은 것 같다. (창의 계층같은것도..?)
1.2.1. 04월 10일 ver 0.8 ¶
현재 상태
- 타이머를 분리하여.. 타이머는 항상 작동.
- 스타트/레디 버튼도 분리.
- 유저 인터페이스의 개선. 조금 더 편해졌다.
- DOA, 감옥에 걸렸을 때에도 Roll
- 맵의 추가 : 워프게이트, 한반도(좌/우) 추가.
- 채팅이 가능하다.ㅡ.ㅡa
- 게임 중에 카드를 쓰는 것이 가능해 졌다. ( 예 : 크루거와 만났을 때 발창 쓰기 )
- EXIT버튼 누르기 : Shift+Enter를 Roll로 사용하지 않았기 때문에 종료시 빠져나가는 루틴이 필요하다. 그래픽대조를 통해 Exit버튼을 누르자.
추가/고쳐야 할 점
- Shift+Enter가 안된다. -> 원래 불가능 하다는 결론..(발생시킬수는 있어도 창을 끌러올려야 한다.)
- 그러나.. 그래픽 대조를 하였는데 그래픽 카드별로 색이 틀리다. (대략 두가지 정도로 압축.)
- 자동 복구 루틴(방이 깨졌을 경우에)를 구현한다.
- 새로운 의뢰가 들어왔다. 키보드를 눌렀을 때 그에 상응하는 마우스 좌표를 클릭하는 것. (이것..은 보류)
- 프로젝트를 하나로 합쳐야 할 것 같다. 목적이 같지만 서로 관심분야가 달라서 결국 프로그램이 서로 달라지고 있다.
- 프로그램을 키고 오래 사용하면 스타트/레디 부분이 실행되지 않는다.
- 창을 내린 상태에서 주사위를 굴릴 때, 이동, 전투 이외에는 모든 상황에서 오토롤이 되버린다.
- 게임이 끝나고 나갈 때 가끔식 이유를 알수 없는 오류가 발생하곤 한다. 아마도 창을 찾은 상태에서 실제로는 없는 게 되버려서 그런 것 같다.
1.2.2. 04월 25일 ver 0.55 ¶
현재 상태
VS.NET을 새로 깔고 다시 제작에 들어갔다
전에 있던 코드를 좀 뜯어 고쳐서..ㅡ.ㅡ 어케어케 만들고는 있지만..
타이머는 항상 작동
숙원사업 HOTKEY를 도입(이제 아무렇게나 눌러도 된다..>.<);
추가/고쳐야 할점
Shift+Enter 어떻게든 넣고 말겠다.
그래픽 대조루틴을 통한 카드의 자동사용
Start / Ready의 자동 Click
추가/고쳐야 할점
1.2.3. 05월 01일 ver 0.63 ¶
또 여러가지를 고치며 레벨 업!! 아하하.. 이제 완성이 얼마 남지 않았다.
개선한 점은 History.txt를 만들며 남겨놓고 있다.
앞으로 고칠 점은 >.<
SHIFT+ENTER : 이상하게 그 창에서만 듣지 않는다.. 무언가 문제가 있는듯.. Direct Input를 사용해 볼까 고려중이다.
ㅡ.ㅡ 위의 문제를 해결하면 자동으로 해결되는 DOA와 감옥.
혹시 메모리상의 값을 얻어와서 해결 할 수 있지 않을까를 생각해 보고 있다. 메모리에 접근 하는 방법은 없을까..ㅡ.ㅡ?
개선한 점은 History.txt를 만들며 남겨놓고 있다.
앞으로 고칠 점은 >.<
1.2.4. 05월 08일 Nightmare Ver 0.05 ¶
현재 상태
결국 프로젝트(?)를 합쳐버렸다. 후훗. MSN 을 통해 노가다를 하고는 있지만 결국 한 자리에서 해야할듯 하다.
물론 합치는 과정에서 이름이 새로 나왔다.
가장 기본적인 것들은 해결. 카드 쓰는 부분은 전혀 구현되지 않았지만 그래도 대충은 돌아간다.
앞으로 고칠 점
SHIFT+ENTER 가 실질적으로 구현은 되지만 쓸모가 없다는 점이 발견되면서 그 쪽은 아예 보류. (화면을 보면서 Shift + Enter 는 쓸모가 없단 말이닷!)
역시나 카드 쓰는 걸 해결하면 일단은 거의 완성이다. (누워서 아무것도 안하고 게임을 할수 있을 정도다)
메모리상의 값을 얻어와서 해결할 방법은 아직은 먼 훗날의 이야기인 듯 하지만, 만약 가능하다면 모든 문제들이 해결되다시피한다.
즉, 메모리 상의 값을 얻어와서 해결할 방법을 알게 되는 순간 여태까지 해온 우리의 노가다는 모조리 꽝.
메모리 상의 값을 얻을 방법을 알게 된다면, 주사위를 예측하는 것도 가능할 것 같다. (완전 게임핵이로구만)
결국 프로젝트(?)를 합쳐버렸다. 후훗. MSN 을 통해 노가다를 하고는 있지만 결국 한 자리에서 해야할듯 하다.
물론 합치는 과정에서 이름이 새로 나왔다.
가장 기본적인 것들은 해결. 카드 쓰는 부분은 전혀 구현되지 않았지만 그래도 대충은 돌아간다.
앞으로 고칠 점
1.3. 배운 점들 ¶
- 윈도우의 메세지 체계를 조금 더 알 수 있었다.
- SPY++를 조금 더 잘 사용할 수 있게 되었다.
- 윈도우의 구조(메인프레임 -> 차일드 윈도우) 에 대해서 조금 더 공부할 수 있었다.
- 현재는 윈도우 메세지 Hooking에 대해서 보고 있다. // 이건 좀 보류..ㅡ.ㅡ;;
1.4. 필요한 Source ¶
프로세스와 주소를 알때 그 주소의 값을 얻어오는 함수
~cpp HWND hWnd = FindWindow("My Process Caption Name", NULL); if(hWnd) { DWORD ProcessId; GetWindowThreadProcessId(hWnd, &ProcessId); // hWnd로 프로세스 ID를 얻음.. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId); if(hProcess) { DWORD ReadBytes; char buffer[100]; ReadProcessMemory(hProcess, (LPCVOID)0x400000, buffer, 100, &ReadBytes); // WriteProcessMemory를 이용하면 쓰기... CloseHandle(hProcess); } }buffer부분에 char형태로 저장이 된다. atoi 함수로 정수로 컨버전하자.
오.. 재밌는거 하고 있네~ 근데 주사위의 잔영을 제대로 안봐서 그런데, 창 모드로 게임이 실행되나 보지? DirectX 를 쓴다면 일반 윈도우 메세지 방식으로 처리하기 힘들지 않을까 함. (근데 해당 기능들 잘 되는 것 보니까 뭐.. 별 문제 없는 듯 하군~) --석천
ㅡㅡ; 전체화면이구요 DX쓰는거 맞아요.. 그래도 잘 먹히는 기능은 잘 먹히네요.^^ -- 선호
ㅡㅡ; 전체화면이구요 DX쓰는거 맞아요.. 그래도 잘 먹히는 기능은 잘 먹히네요.^^ -- 선호