2026년 2월 22일 일요일

DCSS AI 개발일지 #2

 

📌 DCSS AI 개발일지 #2

콘솔 버퍼 직접 읽기 구현

오늘은 콘솔 기반 구조를 실제로 구현했다.
이전까지는 방향을 정하는 단계였다면, 오늘은 “동작하는 코드”를 만든 날이다.


스크린샷 방식에서 완전히 벗어나기

초기 구조는 화면 캡처 기반이었다.

  • 스크린샷 캡처

  • HP 색상 감지

  • 특정 이벤트 발생 시 LLM 호출

  • pydirectinput으로 입력

기능적으로는 가능했지만, 신뢰도가 낮았다.

  • 색상 오탐

  • 메뉴 오버레이 문제

  • --more-- 처리 취약

  • 해상도 의존성

장기적으로 유지 가능한 구조가 아니라고 판단했다.

그래서 아예 방향을 바꿨다.


crawl-console은 “문자열 덩어리”다

Windows 콘솔은 단순 출력창이 아니다.
내부적으로 텍스트 버퍼를 유지한다.

즉, 화면에 보이는 모든 내용은
메모리 상에 문자열로 존재한다.

이걸 직접 읽으면 된다.

OCR도 필요 없고
로그 파일도 필요 없다.


구현 과정

사용 기술:

  • Python 3.11

  • psutil (프로세스 탐색)

  • pywin32 (콘솔 API 접근)

구현 흐름:

  1. psutil로 crawl-console 프로세스 탐색

  2. AttachConsole()로 대상 콘솔에 연결

  3. CreateFile("CONOUT$")로 콘솔 버퍼 핸들 획득

  4. ReadConsoleOutputCharacter()로 화면 전체 읽기

  5. 텍스트를 console_dump.txt에 저장

핵심 부분:

coord = win32console.PyCOORDType(0, 0)
text = sb.ReadConsoleOutputCharacter(width * height, coord)

이 시점에서 AI는
게임 화면을 이미지가 아닌 “순수 문자열”로 받게 되었다.


첫 상태 파싱: HP

텍스트 덤프가 안정적으로 생성되는 것을 확인한 뒤,
정규식으로 HP를 파싱했다.

re.search(r"Health:\s*(\d+)/(\d+)", text)

결과 로그:

HP parsed: (22, 22)

이제 AI는

  • 현재 HP

  • 최대 HP

  • HP 비율

을 계산할 수 있다.

이건 단순한 숫자 추출이 아니라,
“위험 판단의 기반 데이터”를 확보한 것이다.


실시간 루프 구성

1초 간격 루프를 구성하여
콘솔 버퍼를 지속적으로 읽도록 했다.

HP parsed: (19, 22)
HP parsed: (19, 22)
HP parsed: (19, 22)

테스트 결과:

  • 콘솔 화면 지연 없음

  • 입력 간섭 없음

  • CPU 부하 낮음

방송 환경에서도 사용 가능한 수준이라고 판단된다.


구조적으로 달라진 점

이전 구조:

이미지 → 분석 → 추정 → 판단

현재 구조:

텍스트 → 파싱 → 계산 → 판단

중간 단계가 사라졌다.

노이즈가 줄었고
정확도가 올라갔다.

이건 단순한 개선이 아니라
아키텍처 레벨 변경이다.


현재 상태

  • 콘솔 버퍼 직접 읽기 성공

  • 화면 텍스트 파일 생성

  • HP 파싱 성공

  • 1초 루프 안정화 완료

Phase 1 – 기반 안정화 단계 진행 중.


다음 단계

  1. HP% 계산

  2. 임계치 기반 후퇴 로직 구현

  3. 적 등장 메시지 파싱

  4. 위험 점수 시스템 설계

이제부터는 읽는 단계에서
행동을 설계하는 단계로 넘어간다.


오늘의 한 줄

화면을 보는 AI가 아니라,
상태를 읽는 AI로 전환했다.