| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- FirebaseV9
- 사이드프로젝트
- 머신러닝
- python
- DeepMind
- clone coding
- 데이터분석
- React
- ReactNative
- 음성합성
- pandas
- TTS
- 전국국밥
- selenium
- 논문리뷰
- 딥러닝
- expo
- 클론코딩
- TeachagleMachine
- 앱개발
- Instagrame clone
- coding
- Reinforcement Learning
- 강화학습
- 카트폴
- App
- 강화학습 기초
- Ros
- JavaScript
- Ai
- Today
- Total
목록2026/04/29 (9)
qcoding
이 글은 qcoding 블로그의 콘텐츠 색인입니다. Flutter + Flame 게임 개발, MBTI 히어로 운영, depense_game 타워디펜스 개발기를 한곳에서 찾을 수 있도록 정리했습니다.이 블로그는 무엇을 다루나요?Flutter와 Flame으로 2D 게임을 만드는 과정, Android/Web 배포, AdMob/AdSense 수익화 준비, Supabase 리더보드, 타워디펜스 밸런싱과 에셋 파이프라인을 다룹니다.MBTI 히어로 시리즈는 어떤 순서로 읽으면 좋나요?Flutter + Flame으로 MBTI 생존 게임을 만든 이유16개 MBTI 캐릭터를 데이터 구조로 설계한 방법Flame 웨이브 서바이벌 게임 루프 만들기적 스폰과 30웨이브 난이도 곡선 설계Flutter 게임에서 저장, 해금, 업그레..
MBTI 히어로: 직장인 생존기는 MBTI 캐릭터를 골라 직장 몬스터 웨이브를 버티는 2D 생존 게임입니다. 설치 없이 Web에서 먼저 해볼 수 있고, Android에서는 Google Play로 플레이할 수 있습니다.어떤 게임인가요?직장인 생존기라는 테마를 MBTI 캐릭터와 웨이브 서바이벌로 풀었습니다. 캐릭터마다 공격 방식과 리듬이 다르고, 동료 캐릭터 조합으로 한 판의 느낌이 바뀝니다.처음 플레이할 때 무엇을 보면 좋나요?처음에는 내 MBTI와 가까운 캐릭터를 고르고, 다음 판에서는 전혀 다른 공격 타입을 골라보면 차이가 잘 보입니다. 보스 웨이브가 오는 타이밍에는 무리하게 공격하기보다 생존 동선을 먼저 확보하는 편이 좋습니다.어디서 플레이할 수 있나요?Web 즉시 플레이: https://mbti-h..
Flutter Web 게임을 운영하려면 빌드 결과물을 올리는 것만으로 끝나지 않습니다. Firebase Hosting 라우팅, ads.txt, app-ads.txt, 플레이 링크 CTA까지 준비해야 검색과 광고 심사에서 덜 흔들립니다.Firebase Hosting 설정은 어떻게 단순화했나요?{ "hosting": { "public": "build/web", "rewrites": [ { "source": "**", "destination": "/index.html" } ] }}Flutter Web은 SPA이므로 모든 경로를 index.html로 돌려주는 rewrite가 필요합니다. 이렇게 해야 새로고침이나 직접 링크 접근에서 404가 줄어듭니다.ads.txt와 app-ads.t..
Flutter 게임에 AdMob을 붙일 때 핵심은 “모바일에서는 광고 SDK를 초기화하고, Web에서는 같은 코드를 안전하게 건너뛰는 것”입니다. MBTI 히어로는 kIsWeb 분기로 광고 흐름을 보호했습니다.왜 Web에서는 AdMob 초기화를 건너뛰나요?google_mobile_ads는 모바일 앱용 SDK입니다. Web 빌드에서 같은 초기화 경로를 타면 불필요한 오류가 생길 수 있습니다.Future init() async { if (_isInitialized) return; if (kIsWeb) { _isInitialized = true; return; } await MobileAds.instance.initialize(); _isInitialized = true; _createI..
Supabase 리더보드는 Flutter 게임에서 빠르게 온라인 기록 시스템을 붙이는 좋은 방법입니다. MBTI 히어로는 RPC 함수로 점수를 제출하고, 네트워크 실패 시 로컬 리더보드로 fallback하는 구조를 사용했습니다.Supabase 초기화는 어떻게 안전하게 처리하나요?Web과 앱에서 환경값이 없을 수 있으므로, 설정이 없으면 온라인 기능만 비활성화합니다.class SupabaseBootstrap { static bool get isConfigured => _supabaseUrl.isNotEmpty && _supabaseAnonKey.isNotEmpty; static Future initializeIfConfigured() async { if (!isConfigured) ret..
작은 Flutter 게임도 저장 구조를 초반에 잡아두면 운영이 편해집니다. MBTI 히어로는 한 판의 진행 데이터와 전체 해금 데이터를 나눠서 관리하고, 게임 시작 시 저장값을 주입하는 방식으로 확장성을 확보했습니다.저장 데이터는 왜 두 종류로 나누나요?런 중 데이터는 현재 웨이브, 체력, 업그레이드 상태처럼 이어하기에 필요합니다. 글로벌 데이터는 해금 캐릭터, 누적 재화, 최고 기록처럼 앱 전체에서 유지됩니다. 둘을 섞으면 이어하기 삭제가 전체 진행도 삭제로 이어지는 실수가 생길 수 있습니다.게임 시작 시 저장값은 어디로 들어가나요?로비에서 게임 객체를 만들 때 저장 데이터를 주입합니다.final game = MbtiGame( saveManager: saveManager, loadedSave: sa..
30웨이브 난이도 설계는 적을 많이 넣는 문제가 아니라, 플레이어가 배운 대응법을 조금씩 다시 시험하는 문제입니다. MBTI 히어로는 3웨이브마다 보스, 5웨이브마다 MBTI 보스, 30웨이브 최종 보스라는 리듬을 사용했습니다.웨이브 숫자는 어떻게 증가시키나요?단순 선형 증가만 쓰면 후반부가 지루하거나 불가능해집니다. 그래서 총 적 수, 보스 수, 스폰 간격, 적 종류 비율을 함께 조정합니다.for (int i = 1; i = 21) { totalEnemies -= (6 + (i - 21)).clamp(6, 12); } final enemies = {}; // stage number decides enemy mix, boss timing, and spawn interval.}보스 웨이브는 왜 ..
MBTI 히어로의 캐릭터 설계 핵심은 “성격 유형을 숫자와 행동으로 번역하는 것”입니다. 16개 캐릭터를 각각 코드로 분기하지 않고 CharacterData 목록으로 관리해 밸런싱과 UI 표시를 동시에 해결했습니다.왜 enum과 데이터 클래스를 분리했나요?enum은 저장값과 식별자를 안정적으로 유지하고, 데이터 클래스는 게임에 필요한 설명과 수치를 담습니다.enum CharacterType { estj, entp, infp, istp, enfj, intj, esfp, isfj, enfp, entj, esfj, estp, infj, intp, isfp, istj,}class CharacterData { final CharacterType type; final String mbti; final do..