반응형

전체 글 151

반응속도 테스트 — 5회 평균과 성급한 탭 감지

오프라인 인디팩 · 개발일지반응속도 테스트 — 5회 평균과 성급한 탭 감지2026-05-29 · v1.0 · 두뇌 트레이닝요약 — 빨간 화면이 초록으로 바뀌는 순간 탭하는 반응속도 게임. 5회 시행의 평균을 최종 기록으로 삼고, 초록으로 바뀌기 전에 탭하면 "너무 빠름"으로 그 시행을 무효 처리한다.무작위 대기시간으로 예측 탭 방지대기 시간을 1.2~3.5초 사이 무작위로 잡아서, 사용자가 박자를 외워 타이밍만으로 탭하는 걸 막는다. 이 범위 자체가 게임의 핵심 밸런스 포인트다.int randomWaitMs() => minWaitMs + _random.nextInt(maxWaitMs - minWaitMs);상태 기반 부정 탭 처리waiting(빨강) 상태에서 탭하면 markTooEarly()가 호..

숫자 기억 게임 — 자릿수 비례 표시 시간과 상태 머신

오프라인 인디팩 · 개발일지숫자 기억 게임 — 자릿수 비례 표시 시간과 상태 머신2026-06-08 · v1.0 · 두뇌 트레이닝요약 — 점점 길어지는 숫자를 외웠다가 그대로 입력하는 게임. 라운드가 올라갈수록 자릿수가 늘고, 보여주는 시간도 자릿수에 비례해서 늘어난다.5가지 상태를 명시적으로 관리idle → showing → inputting → result → gameOver로 이어지는 상태 머신이다. 각 메서드가 자기 상태에서만 동작하도록 가드를 걸어두면, 화면(UI) 쪽에서 실수로 잘못된 타이밍에 호출해도 조용히 무시된다.enum NumberMemoryState { idle, showing, inputting, result, gameOver }Duration get showDuration ..

피아노 타일 — 실제 악보 기반 타일 생성

오프라인 인디팩 · 개발일지피아노 타일 — 실제 악보 기반 타일 생성2026-06-08 · v1.0 · 리듬 게임요약 — 내려오는 검은 타일을 순서대로 탭하는 리듬 게임. 절차적 무작위 생성 대신, 실제 동요/클래식 악보 데이터를 순서대로 재생하며 타일을 만드는 "곡 모드"가 기본이다.악보 노트를 컬럼에 매핑곡 데이터의 각 음(note)을 note % 열개수로 컬럼에 매핑한다. 짧은 음은 일반 타일, 긴 음(len > 1)은 눌러서 유지해야 하는 롱 노트가 된다. 곡이 끝나면 다음 곡을 무작위로 골라 이어붙인다.PianoSongNote _nextSongNote() { if (_currentSong == null || _songNoteIndex >= _currentSong!.notes.length..

15퍼즐 — 풀이 가능성을 보장하는 셔플 방식

오프라인 인디팩 · 개발일지15퍼즐 — 풀이 가능성을 보장하는 셔플 방식2026-06-08 · v1.0 · 퍼즐 게임 / 알고리즘요약 — 4×4 슬라이딩 퍼즐. 타일을 완전 무작위로 배치하면 절반의 확률로 풀 수 없는 배치가 나오기 때문에, 항상 완성 상태에서 시작해 유효한 이동만 반복해서 섞는다.완성 상태에서 거꾸로 섞기15퍼즐은 무작위 순열의 절반이 풀이 불가능하다(치환의 우기성 때문). 이걸 수학적으로 검증하는 대신, 애초에 항상 풀 수 있는 완성 상태에서 시작해 빈 칸과 인접한 타일을 400번 무작위로 교환한다 — 실제 게임처럼 손으로 섞는 것과 같은 원리다.for (int i = 0; i n != lastSwapped).toList(); final pick = neighbors[_ra..

[C# WPF] DesktopPet: 원하는 이미지를 항상 맨 위에 띄우는 프로그램

DesktopPet 소스 코드 다운로드아래 ZIP 파일에서 DesktopPet의 C# 소스를 내려받을 수 있습니다. Program.cs, 프로젝트 파일, 아이콘 리소스, README, .gitignore를 포함했습니다.실행 파일이 아닌 소스 공유용 ZIP입니다. Windows와 .NET 8 SDK가 필요하며, 압축을 푼 DesktopPet 폴더에서 dotnet build -c Release로 빌드하세요. 자세한 사용법과 자동 실행 주의 사항은 ZIP 안의 README.md에 정리했습니다. 빌드 결과물, 백업 파일, 개인 설정은 제외했습니다.개인 프로젝트 · 프로그램 소개DesktopPet: 원하는 이미지를 항상 맨 위에 띄우기Windows · C# · WPF · .NET 8요약 : DesktopPet은 ..

C# 2026.10.20

스택볼 — 12시 방향 세그먼트 판정과 각도 정규화

오프라인 인디팩 · 개발일지스택볼 — 12시 방향 세그먼트 판정과 각도 정규화2026-06-12 · v1.0 · 아케이드 / 각도 계산요약 — 회전하는 원판을 부수며 아래로 내려가는 게임. 공은 항상 화면 12시 방향에서 부딪히고, 그 순간 원판의 어느 세그먼트가 12시에 있는지를 역산해서 안전/위험을 판정한다.월드 각도에서 로컬 세그먼트 인덱스로12시 방향의 월드 각도(3π/2)에서 현재 회전값을 빼면 원판 기준 로컬 각도가 나온다. 이걸 세그먼트 하나의 각도 폭으로 나누면 인덱스가 나오는데, 음수가 나올 수 있어서 2π를 더한 뒤 다시 모듈로 연산으로 양수 범위로 맞춘다.final local = (worldAtTop - rotation) % (2 * pi);final positive = (lo..

계단 오르기 — 시간 게이지와 좌우 입력 매칭

오프라인 인디팩 · 개발일지계단 오르기 — 시간 게이지와 좌우 입력 매칭2026-05-29 · v1.0 · 아케이드 / 리듬요약 — 캐릭터가 좌/우로 번갈아 나오는 계단을 정확한 방향으로 밟아 올라가는 게임. 시간 게이지가 계속 줄어들고, 계단을 밟을 때마다 조금 회복된다.큐(queue) 기반 계단 관리앞으로 나올 계단들을 미리 생성해서 큐에 쌓아두고, 한 칸 오를 때마다 맨 앞을 빼고 뒤에 새 계단을 추가한다. 항상 일정 개수(12개)의 다음 계단을 미리 볼 수 있어서 UI가 예측 가능한 애니메이션을 그릴 수 있다.bool tap(StairDir input) { final next = nextDir; if (input != next) { gameOver = true; return false;..

스틱 히어로 — 상태 머신으로 표현한 막대 던지기

오프라인 인디팩 · 개발일지스틱 히어로 — 상태 머신으로 표현한 막대 던지기2026-06-08 · v1.0 · 아케이드 / 정밀 타이밍요약 — 탭을 누르고 있으면 막대가 자라고, 떼면 쓰러져서 다리가 되는 게임. ready → growing → falling → walking으로 이어지는 5단계 상태 머신으로 전체 흐름을 관리한다.5단계 phase로 나눈 전체 흐름각 단계는 update(dt) 안의 switch문에서 자기 역할만 담당한다. growing은 길이만 늘리고, falling은 각도만 90도까지 회전시키고, walking은 목표 x까지 이동만 시킨다. 단계 전환은 각 단계의 완료 조건에서만 일어난다.case StickHeroPhase.falling: stickAngle += (fallS..

스트룹 테스트 — 색상/글자 불일치로 인지 부하 만들기

오프라인 인디팩 · 개발일지스트룹 테스트 — 색상/글자 불일치로 인지 부하 만들기2026-06-02 · v1.0 · 두뇌 트레이닝 / 인지심리요약 — "빨강"이라는 글자가 파란색으로 쓰여 있을 때 색을 답할지 글자를 답할지 묻는 스트룹 효과 게임. 색상 모드, 글자 모드, 매 문제 무작위로 바뀌는 혼합 모드를 제공한다.30% 확률로 일치하는 쉬운 문제 섞기매번 색과 글자가 다르면 너무 어렵기만 하니, 30% 확률로 일부러 일치하는 문제(빨강이라 쓰고 빨간색)를 섞어 완급을 조절한다. 나머지 70%는 do-while로 일치하지 않을 때까지 재추첨한다.if (_random.nextDouble() 혼합 모드는 매 문제 질문 대상이 바뀜mixed 모드에서는 이번 문제가 "색을 맞히는 문제"인지 "글자를 ..

대리점 전용 API를 별도 패키지로 분리하기 — 같은 서버, 다른 권한 경계

실무 프로젝트 · 개발일지 대리점 전용 API를 별도 패키지로 분리하기 — 같은 서버, 다른 권한 경계 Spring Boot · 멀티 테넌트형 API 요약 — 일반 사용자/파트너 API와 완전히 분리된 패키지에 대리점(지사) 관리자 전용 API를 모아뒀다. 지역 코드 하나로 그 지사 소속 데이터만 조회되도록 파라미터 경계를 명확히 뒀다. 1. 지역 코드를 모든 조회의 필수 파라미터로 지사 홈 화면의 "우수 영업자 조회", "가입수 조회" 같은 API는 전부 {jisa_code}를 경로 파라미터로 받는다. 이 코드가 없으면 조회 자체가 불가능한 구조라, 다른 지사의 데이터를 실수로 노출할 여지를 API 설계 단계에서부터 차단한다. @RequestMapping("/jisa_v..

SpringBoot (JAVA) 2026.10.11
반응형