Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

DiceRoller

From ZeroWiki
Revision as of 05:23, 7 February 2021 by imported>Unknown
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

DiceRoller

  • 01학번 이선호
  • 01학번 이재성

제작동기

  • 주사위의잔영 - 소프트맥스의 온라인 커뮤니티 4LEAF에서 서비스중인 게임이다.
  • 주사위를 굴려서 골까지 가는 게임으로 게임을 종료하면 소정의 GP를 얻을 수 있다.
  • 그러나 이 GP를 얻기가 매우 귀찮은(ㅡㅡ;) 관계로 자동 롤러를 구상중에 있다. 거기에 시간제한까지 있어서 타이머도 붙이게 되었다.
  • 윈도우즈 메세지와 창의 인스턴스/핸들 등을 공부하기에 좋은 것 같다. (창의 계층같은것도..?)

제작 일지

=== 04월 10일 ver 0.8 ===
현재 상태
  • 타이머를 분리하여.. 타이머는 항상 작동.
  • 스타트/레디 버튼도 분리.
  • 유저 인터페이스의 개선. 조금 더 편해졌다.
  • DOA, 감옥에 걸렸을 때에도 Roll
  • 맵의 추가 : 워프게이트, 한반도(좌/우) 추가.
  • 채팅이 가능하다.ㅡ.ㅡa
  • 게임 중에 카드를 쓰는 것이 가능해 졌다. ( 예 : 크루거와 만났을 때 발창 쓰기 )
  • EXIT버튼 누르기 : Shift+Enter를 Roll로 사용하지 않았기 때문에 종료시 빠져나가는 루틴이 필요하다. 그래픽대조를 통해 Exit버튼을 누르자.
추가/고쳐야 할 점
  • Shift+Enter가 안된다. -> 원래 불가능 하다는 결론..(발생시킬수는 있어도 창을 끌러올려야 한다.)
  • 그러나.. 그래픽 대조를 하였는데 그래픽 카드별로 색이 틀리다. (대략 두가지 정도로 압축.)
  • 자동 복구 루틴(방이 깨졌을 경우에)를 구현한다.
  • 새로운 의뢰가 들어왔다. 키보드를 눌렀을 때 그에 상응하는 마우스 좌표를 클릭하는 것. (이것..은 보류)
  • 프로젝트를 하나로 합쳐야 할 것 같다. 목적이 같지만 서로 관심분야가 달라서 결국 프로그램이 서로 달라지고 있다.
  • 프로그램을 키고 오래 사용하면 스타트/레디 부분이 실행되지 않는다.
  • 창을 내린 상태에서 주사위를 굴릴 때, 이동, 전투 이외에는 모든 상황에서 오토롤이 되버린다.
  • 게임이 끝나고 나갈 때 가끔식 이유를 알수 없는 오류가 발생하곤 한다. 아마도 창을 찾은 상태에서 실제로는 없는 게 되버려서 그런 것 같다.
=== 04월 25일 ver 0.55 ===
 현재 상태 
  • VS.NET을 새로 깔고 다시 제작에 들어갔다
  • 전에 있던 코드를 좀 뜯어 고쳐서..ㅡ.ㅡ 어케어케 만들고는 있지만..
  • 타이머는 항상 작동
  • 숙원사업 HOTKEY를 도입(이제 아무렇게나 눌러도 된다..>.<);
 추가/고쳐야 할점 
  • Shift+Enter 어떻게든 넣고 말겠다.
  • 그래픽 대조루틴을 통한 카드의 자동사용
  • Start / Ready의 자동 Click
=== 05월 01일 ver 0.63 ===
또 여러가지를 고치며 레벨 업!! 아하하.. 이제 완성이 얼마 남지 않았다.
개선한 점은 History.txt를 만들며 남겨놓고 있다.
앞으로 고칠 점은 >.<
  • SHIFT+ENTER : 이상하게 그 창에서만 듣지 않는다.. 무언가 문제가 있는듯.. Direct Input를 사용해 볼까 고려중이다.
  • ㅡ.ㅡ 위의 문제를 해결하면 자동으로 해결되는 DOA와 감옥.
  • 혹시 메모리상의 값을 얻어와서 해결 할 수 있지 않을까를 생각해 보고 있다. 메모리에 접근 하는 방법은 없을까..ㅡ.ㅡ?
=== 05월 08일 Nightmare Ver 0.05 ===
 현재 상태 
결국 프로젝트(?)를 합쳐버렸다. 후훗. MSN 을 통해 노가다를 하고는 있지만 결국 한 자리에서 해야할듯 하다.
물론 합치는 과정에서 이름이 새로 나왔다.
가장 기본적인 것들은 해결. 카드 쓰는 부분은 전혀 구현되지 않았지만 그래도 대충은 돌아간다.
앞으로 고칠 점
  • SHIFT+ENTER 가 실질적으로 구현은 되지만 쓸모가 없다는 점이 발견되면서 그 쪽은 아예 보류. (화면을 보면서 Shift + Enter 는 쓸모가 없단 말이닷!)
  • 역시나 카드 쓰는 걸 해결하면 일단은 거의 완성이다. (누워서 아무것도 안하고 게임을 할수 있을 정도다)
  • 메모리상의 값을 얻어와서 해결할 방법은 아직은 먼 훗날의 이야기인 듯 하지만, 만약 가능하다면 모든 문제들이 해결되다시피한다.
  • 즉, 메모리 상의 값을 얻어와서 해결할 방법을 알게 되는 순간 여태까지 해온 우리의 노가다는 모조리 꽝.
  • 메모리 상의 값을 얻을 방법을 알게 된다면, 주사위를 예측하는 것도 가능할 것 같다. (완전 게임핵이로구만)

배운 점들

  1. 윈도우의 메세지 체계를 조금 더 알 수 있었다.
  2. SPY++를 조금 더 잘 사용할 수 있게 되었다.
  3. 윈도우의 구조(메인프레임 -> 차일드 윈도우) 에 대해서 조금 더 공부할 수 있었다.
  4. 현재는 윈도우 메세지 Hooking에 대해서 보고 있다. // 이건 좀 보류..ㅡ.ㅡ;;

필요한 Source

프로세스와 주소를 알때 그 주소의 값을 얻어오는 함수

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쓰는거 맞아요.. 그래도 잘 먹히는 기능은 잘 먹히네요.^^ -- 선호


프로젝트분류