반응형

전체 글 109

2048 타일 병합 애니메이션과 이동 로직

오프라인 인디팩 · 개발일지 2048 타일 병합 애니메이션과 이동 로직 2026-06-08 · v1.0.10 · 퍼즐 게임 / 애니메이션 요약 — 타일마다 고유 id를 부여해 슬라이드 애니메이션을 자연스럽게 만들고, 이동을 "위치 계산(planMove)"과 "실제 병합 적용(applyMerges)" 두 단계로 분리했다. 같은 턴에 타일이 두 번 합쳐지는 고전적인 2048 버그도 Set으로 막았다. 타일에 고유 ID가 필요한 이유 4×4 격자를 2차원 배열로만 표현하면 이동할 때마다 위젯 트리가 통째로 재구성돼서 슬라이드 애니메이션이 끊긴다. 그래서 Tile마다 증가하는 id를 부여하고, 이 id를 AnimatedPositioned의 key로 써서 Flutter가 "같..

Flutter & Dart 2026.09.18

지뢰찾기 첫 클릭 안전 보장과 코드(Chord) 클릭 구현

오프라인 인디팩 · 개발일지 지뢰찾기 첫 클릭 안전 보장과 코드(Chord) 클릭 구현 2026-06-08 · v1.0.8 · 로직 게임 / 알고리즘 요약 — 첫 클릭이 항상 안전하도록 지뢰를 클릭 이후에 배치하고, 스택 기반 flood fill로 빈 칸을 한 번에 열었다. 데스크탑판 지뢰찾기의 코드(chord) 클릭까지 구현해 완성도를 높였다. 첫 클릭 후에 지뢰를 배치한다 보드를 만들자마자 지뢰를 심으면 첫 클릭에서 바로 지뢰를 밟는 불운이 생길 수 있다. firstClick 플래그로 첫 번째 reveal() 호출을 감지하고, 그 시점에 클릭한 좌표와 3×3 반경을 피해서 지뢰를 배치한다. void reveal(int r, int c) { if (firstCl..

Flutter & Dart 2026.09.18

수박게임 물리 엔진 직접 구현하기

오프라인 인디팩 · 개발일지 수박게임 물리 엔진 직접 구현하기 2026-06-12 · v1.0.9 · 물리 시뮬레이션 / 캐주얼 요약 — Box2D 같은 외부 물리 엔진 없이 중력, 감쇠, 원형 충돌, 회전을 직접 구현해서 수박게임 특유의 "굴러가는 느낌"을 만들었다. 서브스텝(sub-step) 적분으로 빠르게 떨어지는 과일이 서로를 뚫고 지나가는 터널링 현상도 막았다. 과일 등급 = enum + 반지름/색상 매핑 체리(반지름 12)부터 수박(반지름 100)까지 11단계를 enum 하나로 표현한다. next getter로 "이 과일 다음 단계가 뭔지"까지 enum 안에서 바로 조회한다. enum Fruit { cherry, strawberry, grape, ora..

Flutter & Dart 2026.09.18

[Flutter] Flutter로 체스 AI 만들기

오프라인 인디팩 · 개발일지 Flutter로 체스 AI 만들기 — 미니맥스 + 알파베타 가지치기 2026-06-02 · v1.0.12 · 보드게임 / AI 알고리즘 요약 — 캐슬링, 앙파상, 폰 프로모션, 체크/체크메이트/스테일메이트를 모두 구현한 표준 체스 + 미니맥스(알파베타 가지치기)로 3단계 난이도 AI. 탐색 깊이와 평가 함수 차이로 easy/medium/hard를 구분한다. 기물 표현 방식 8×8 int 배열로 보드를 표현한다. 부호로 진영을 구분 — 양수 = 백(플레이어), 음수 = 흑(AI). 값의 절댓값이 기물 종류다. class ChessPiece { static const int empty = 0; static const int pawn ..

Flutter & Dart 2026.07.02

[Flutter] 물 정렬 퍼즐 구현

오프라인 인디팩 · 개발일지 물 정렬 퍼즐 구현 — 결정론적 스테이지와 되돌리기 2026-06-08 · v1.0.14 · 퍼즐 게임 / 알고리즘 요약 — 스테이지 번호로 시드를 고정해 "같은 스테이지는 항상 같은 퍼즐"을 보장. 색깔 수를 스테이지에 따라 점진적으로 늘리고, 잠긴 시험관과 되돌리기(undo) 기능을 구현했다. 규칙 정리 각 시험관(tube)은 최대 4칸. 맨 위 색을 다른 시험관으로 옮길 수 있는 조건은: 목적지 시험관이 비었거나, 맨 위 색이 같고 자리가 남아 있을 때. 모든 시험관이 단색으로만 채워지면 클리어. 결정론적 시드 퍼즐을 완전 랜덤으로 생성하면 같은 스테이지를 두 번 플레이했을 때 다른 퍼즐이 나온다. 이건 레벨 기반 진행에서 불편하..

Flutter & Dart 2026.07.02

[Flutter] 외부 패키지 없이 순수 Dart + Flutter Canvas로 테트리스 구현

오프라인 인디팩 · 개발일지 Flutter로 테트리스 만들기 — 7-bag, 홀드, 유령 블록 2026-06-08 · v1.0.14 · 게임 개발 요약 — 외부 패키지 없이 순수 Dart + Flutter Canvas로 테트리스 구현. 7-bag 랜덤, 홀드, 유령 블록, 레벨별 낙하속도까지 표준 테트리스 규칙(Tetris guideline)을 최대한 따랐다. 게임 구조 로직과 UI를 완전히 분리했다. TetrisGame 클래스는 순수 Dart — Flutter 의존성 없음. 화면은 TetrisScreen이 Timer.periodic으로 틱을 보내고 setState로 리빌드한다. 로직을 UI에서 분리하니 단위 테스트도 쉽고 이후 다른 게임에도 같은 패턴을 반복할 수 ..

Flutter & Dart 2026.07.02

[Flutter] Android 15 대응

오프라인 인디팩 · 개발일지 Android 15 대응 및 글로벌 출시 준비 2026-07-02 · v1.0.15 · Android / 배포 요약 — Google Play Console의 Android 15 경고 2건 처리 + 런처 이름 6개 언어 현지화 적용. MainActivity.kt를 수정하고 res/values-xx/strings.xml 파일을 추가했다. 경고 1 — Edge-to-edge 미지원 Android 15(SDK 35)부터 targetSdk 35인 앱은 강제로 edge-to-edge 모드가 적용된다. Play Console에서 "일부 사용자에게 더 넓은 화면이 표시되지 않을 수 있습니다" 경고가 발생했다. 처음엔 enableEdgeToEdge(..

Flutter & Dart 2026.07.02

[Flutter] Flutter 다국어 현지화

오프라인 인디팩 · 개발일지Flutter ARB 방식으로 6개 언어 현지화 구현하기2026-06-12 · v1.0.15 · i18n / l10n요약 — flutter_localizations + ARB 파일 방식으로 한·영·중·일·독·스 6개 언어를 지원. 앱 내 모든 문자열(UI 문구, 게임 45개 타이틀/설명, 티어 5개 라벨)을 번역 키로 추출하고 폰 언어 설정에 따라 자동 전환되도록 구현했다.왜 ARB 방식인가Flutter 공식 i18n 방식. ARB(Application Resource Bundle) 파일은 JSON 기반 번역 파일이고, flutter gen-l10n 커맨드 하나로 타입 안전한 AppLocalizations 클래스가 자동 생성된다. 런타임 에러 없이 컴파일 타임에 누락된 ..

Flutter & Dart 2026.07.02

[Flutter] 테트리스 구현기 —로직 설계와 게임 루프

게임 개발 일지 | Flutter · Firebase · Google AdsEpisode 02테트리스 구현기 —로직 설계와 게임 루프02. 어떻게 만들었나 — 실제 코드로 보는 테트리스2026년 5월 · Flutter Dart 게임 구조 개발일지01 구조 설계로직과 화면을 파일로 분리했다모든 게임을 같은 패턴으로 만들었습니다. tetris.dart에는 순수 Dart 게임 로직만, tetris_screen.dart에는 Flutter 위젯과 렌더링만 담았습니다. Flutter를 import하지 않는 로직 파일은 단독으로 테스트하기 쉽고, 화면 디자인을 바꿀 때 게임 규칙을 건드릴 필요가 없습니다.tetris.dart순수 로직TetrisGame 상태 관리보드 충돌 감지조각 회전 · 이동라인 클리어 · 점수 계..

Flutter & Dart 2026.06.30

[Flutter] Flutter로 미니게임 37개앱 만들기

게임 개발 일지 | Flutter · Firebase · Google AdsEpisode 01Flutter로 미니게임 37개앱 만들기01. 시작 — 왜 만들었나, 무엇으로 만드나2026년 5월 · Flutter Firebase 1인 개발 개발일지01 왜 만들었나깨끗한 미니게임 모음 앱이 없었다오래전부터 클래식 미니게임을 아무 방해 없이 즐길 수 있는 앱이 있으면 좋겠다고 생각했습니다. 앱스토어에는 비슷한 앱들이 있지만, 대부분 광고가 지나치게 많거나, 게임 하나에 앱 하나씩이거나, UI가 너무 복잡하게 꾸며져 있었습니다.그래서 직접 만들기로 했습니다. 심플하고, 빠르고, 한 앱 안에 게임이 잔뜩인 앱을요. 처음엔 두세 개만 넣을 생각이었는데, 어느 순간 보니 37개가 되어 있었습니다.02 어떤 앱인가클래..

Flutter & Dart 2026.06.30
반응형