성공지식백과 로고성공지식백과
ReplitClaude Opus 4.7Vibe Coding게임개발튜토리얼

Replit과 Claude Opus 4.7로 스트리트 파이터 스타일 2D 격투 게임 만들기

공유:

타임스탬프

  • 0:00오락실 추억 스트리트파이터2를 클로드로 만드는 여정 소개
  • 0:22레플릿 파워 모드 세팅 및 클로드 오퍼스 4.7 50% 할인 크레딧 활용법
  • 0:55마스터 프롬프트로 게임 기획서 한 번에 자동 생성
  • 1:30초기 데모 확인, 애니메이션 없는 기본 골격 상태 점검
  • 1:58나노바나나 프로로 2D 캐릭터 스프라이트 시트 제작 및 배경 제거
  • 3:05스프라이트 매핑 웹사이트로 프레임 순서 정렬하여 애니메이션 완성
  • 4:15레플릿 업로드 후 점프·필살기 버그 발견 및 수정 프롬프트 입력
  • 5:01구글 리리아3로 스트리트파이터 풍 레트로 BGM 생성
  • 5:30최종 결과물 점검, 점프·아도겐·효과음까지 완성된 2D 격투 게임 확인
  • 6:15레플릿 연간 10% 할인 플랜 및 마스터 프롬프트 공유 안내

남자라면 누구나 한 번쯤 해봤을 게임, 스트리트 파이터 2. 오늘은 AI를 사용해서 춘리 스타일의 캐릭터와 싸우는 격투 게임을 레플릿(Replit) 위에서 Claude Opus 4.7로 만들어 봅니다. 코드 한 줄 직접 타이핑하지 않고, 기획서만 잘 짜 두면 어디까지 그럴듯한 결과물이 나오는지 단계별로 확인해 보겠습니다.

이 튜토리얼을 그대로 따라 하시면 코인 투입, 캐릭터 선택, 기본 공격, 필살기, 효과음과 배경음까지 포함된 2D 격투 게임 데모가 완성됩니다. 바로 아래에는 전체 기획을 한 번에 입력할 수 있는 마스터 프롬프트도 함께 제공합니다.

이 튜토리얼로 무엇을 만들까

영상에서 만든 완성본은 대략 이런 구성입니다. 게임 기획이나 도트 그래픽을 전혀 모르는 상태에서도 클로드가 기획·디자인·코드 전반을 맡아서 진행하기 때문에, 우리는 방향만 잡아 주면 됩니다.

완성본에 들어가는 요소
  1. 코인 투입과 캐릭터 선택이 있는 아케이드 스타일 인트로
  2. 캐릭터 로스터 화면에서 각 캐릭터의 특성 확인
  3. 기본 펀치·킥, 점프, 강공격, 에너지파(아도겐) 같은 필살기
  4. 승리 포즈와 상대가 쓰러지는 연출
  5. 스트리트 파이터 풍 배경음과 타격 효과음

사전 준비

본격적으로 시작하기 전에 준비해 둘 것들입니다. 모두 웹 기반 도구라서 Windows든 WSL이든 운영체제 상관없이 브라우저만 있으면 따라갈 수 있습니다.

필요한 계정과 도구

0/5 완료

레플릿 계정은 아래 링크에서 바로 만드실 수 있습니다. 제대로 된 프로젝트로 이어 가실 계획이라면 Core나 Pro 플랜도 고려해 보시는 것이 좋습니다. 연간 결제 시 할인이 적용되며, 정확한 조건은 공식 요금제 페이지에서 확인하실 수 있습니다.

Replit 요금제

Starter(무료) / Core / Pro / Enterprise 플랜별 월·연간 가격과 포함 크레딧을 확인할 수 있는 공식 페이지입니다.

replit.com

마스터 프롬프트

위의 모든 기획 과정을 한 번에 끝내고 싶은 분들을 위한 마스터 프롬프트입니다. Power 모드로 설정된 레플릿 Agent에 그대로 붙여 넣으면, 기획서 생성부터 아케이드 UI, 캐릭터 데이터, 전투 시스템 명세, Canvas 기반 플레이어블 데모까지 한 번에 나옵니다.

사용 순서

0/4 완료

master-prompt.md복사
📋 STREET DUEL FIGHTER — 풀 마스터 프롬프트

# STREET DUEL FIGHTER (SDF) — 격투 게임 기획서 웹사이트 + 플레이어블 데모

스트리트 파이터 II 오마주 격투 게임 기획서 사이트를 만들어줘.
모든 텍스트는 한국어, CRT 아케이드 미학, 8명 캐릭터, 카피라이트 안전 리브랜드.
플레이 가능한 1대1 격투 데모 포함.

═══════════════════════════════════════════════════════
## 1. 기술 스택 (반드시 이대로)
═══════════════════════════════════════════════════════
- React 18 + TypeScript + Vite
- Tailwind CSS v4 (HSL CSS 변수 기반)
- Wouter (가벼운 라우터)
- HTML5 Canvas API (게임 렌더링)
- Lucide React (아이콘, 옵션)

폴더 구조:
src/
  App.tsx              ← 라우트 정의
  main.tsx             ← React 18 createRoot
  index.css            ← Tailwind v4 + 커스텀 변수 + CRT 효과
  components/layout.tsx ← 헤더/푸터/메인 래퍼 (라우트별 분기)
  pages/
    overview.tsx       ← /
    characters.tsx     ← /characters
    combat.tsx         ← /combat
    demo.tsx           ← /demo (풀스크린)
  assets/
    characters/        ← 8 PNG (kazuo, riku, mei-lin, cole, volt, boris, ravi, goro)
    stages/            ← 6 PNG (japan, china, india, russia, usa, brazil)

═══════════════════════════════════════════════════════
## 2. 디자인 토큰 (index.css)
═══════════════════════════════════════════════════════
@import "tailwindcss";

:root {
  --background: 220 30% 5%;        /* 깊은 검정-블루 */
  --foreground: 0 0% 95%;
  --primary: 0 80% 55%;            /* 강렬한 빨강 */
  --primary-foreground: 0 0% 100%;
  --secondary: 200 90% 50%;        /* 시안 */
  --accent: 50 100% 55%;           /* 형광 노랑 */
  --muted: 220 10% 25%;
  --muted-foreground: 220 10% 65%;
  --card: 220 20% 10%;
  --destructive: 0 100% 50%;
}

@font-face {
  font-family: 'Press Start 2P';
  src: url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
}

.font-pixel { font-family: 'Press Start 2P', monospace; letter-spacing: 0.05em; }
.font-sans  { font-family: 'Inter', system-ui, sans-serif; }

@keyframes blink { 0%,50%,100%{opacity:1} 25%,75%{opacity:.3} }
.blink { animation: blink 1.5s infinite; }
@keyframes slide { from{transform:translateX(-100%)} to{transform:translateX(100%)} }

/* CRT 스캔라인 오버레이 */
.crt-overlay {
  position: fixed; inset: 0; pointer-events: none; z-index: 100;
  background: repeating-linear-gradient(
    0deg, rgba(0,0,0,.15) 0, rgba(0,0,0,.15) 1px,
    transparent 1px, transparent 3px);
  mix-blend-mode: multiply;
}
.crt-vignette {
  position: fixed; inset: 0; pointer-events: none; z-index: 99;
  background: radial-gradient(ellipse at center, transparent 50%, rgba(0,0,0,.6) 100%);
}

═══════════════════════════════════════════════════════
## 3. 캐릭터 8명 (정확한 데이터 — 그대로 사용)
═══════════════════════════════════════════════════════
배열 그대로 코드에 박아주세요:

const ROSTER = [
  { id: "kazuo",  name: "KAZUO",  origin: "JAPAN",  height: "175cm", weight: "68kg",  style: "Karate",                move: "Shockwave",          stats: { hp:7, atk:7, spd:7,  stun:7, reach:6 } },
  { id: "riku",   name: "RIKU",   origin: "USA",    height: "175cm", weight: "72kg",  style: "Karate",                move: "Flame Upper",        stats: { hp:7, atk:7, spd:8,  stun:7, reach:6 } },
  { id: "mei-lin",name: "MEI-LIN",origin: "CHINA",  height: "169cm", weight: "Secret",style: "Chinese Martial Arts",  move: "Lightning Kick",     stats: { hp:6, atk:5, spd:10, stun:5, reach:7 } },
  { id: "cole",   name: "COLE",   origin: "USA",    height: "182cm", weight: "86kg",  style: "Martial Arts",          move: "Sonic Boom",         stats: { hp:8, atk:7, spd:6,  stun:8, reach:7 } },
  { id: "volt",   name: "VOLT",   origin: "BRAZIL", height: "192cm", weight: "98kg",  style: "Feral Movement",        move: "Electric Thunder",   stats: { hp:8, atk:8, spd:8,  stun:6, reach:6 } },
  { id: "boris",  name: "BORIS",  origin: "USSR",   height: "214cm", weight: "115kg", style: "Pro Wrestling",         move: "Spinning Piledriver",stats: { hp:10,atk:10,spd:3,  stun:10,reach:8 } },
  { id: "ravi",   name: "RAVI",   origin: "INDIA",  height: "176cm", weight: "48kg",  style: "Yoga",                  move: "Yoga Fire",          stats: { hp:6, atk:6, spd:4,  stun:5, reach:10 } },
  { id: "goro",   name: "GORO",   origin: "JAPAN",  height: "185cm", weight: "137kg", style: "Sumo",                  move: "Tidal Slap",         stats: { hp:9, atk:9, spd:4,  stun:9, reach:6 } },
];

캐릭터 이미지는 AI 이미지 생성으로 별도 제작 — 한 명당 풀바디 일러스트 1장
(kazuo.png, riku.png 등으로 src/assets/characters/ 에 저장)

═══════════════════════════════════════════════════════
## 4. 레이아웃 컴포넌트 (components/layout.tsx)
═══════════════════════════════════════════════════════
헤더(상단 sticky):
- 좌측 로고: "SDF" (빨강 픽셀폰트, 광원효과) + "STREET DUEL FIGHTER" + "DESIGN DOCUMENT" 부제
- 우측 네비: OVERVIEW / ROSTER / COMBAT / PLAY (활성탭은 시안색 밑줄+글로우)

메인 콘텐츠:
- /demo 라우트일 때만 max-width 제거하고 풀스크린
- 다른 라우트는 max-w-7xl mx-auto p-6 md:p-12

푸터:
- "INSERT COIN" 깜빡이는 빨강 픽셀텍스트
- 파랑/노랑/빨강 작은 막대 3개 (CRT 색채조정 모티브)
- 하단 "© KOMBAT FORGE STUDIOS — A FAN-MADE TRIBUTE - GAME DESIGN DOCUMENT V1.0"

전체 화면에 .crt-overlay와 .crt-vignette 항상 표시

═══════════════════════════════════════════════════════
## 5. /overview 페이지 (overview.tsx)
═══════════════════════════════════════════════════════
세 섹션:

(A) 히어로 섹션 (rounded-xl, border-4 border-primary/50, aspect-21/9):
- 배경: japan.png 스테이지 (opacity-50, mix-blend-luminosity)
- 중앙 큰 타이틀: "STREET DUEL FIGHTER" (text-7xl, 노랑→빨강 그라데이션)
- 부제 한국어: "대전 격투 게임의 장르를 확립하고 아케이드 시장의 르네상스를 이끌어낼 혁명적인 프로젝트. 8명의 개성 넘치는 전사들이 최강의 자리를 놓고 격돌합니다."
- 하단에 캐릭터 4명 이미지가 줄지어 서있음 (Kazuo flipped, Mei-Lin 가운데 강조, Cole, Riku)

(B) CORE USP (3-grid):
- "01 — 4-BUTTON SYSTEM" — "약/강 펀치와 약/강 킥, 단순하지만 깊이 있는 4버튼 체계로 누구나 쉽게 시작하고 깊이 있게 마스터할 수 있습니다."
- "02 — COMBO MECHANIC" — "연속적인 공격이 히트하는 콤보 시스템을 통해 숙련도에 따른 확실한 보상과 화려한 연출을 자랑합니다."
- "03 — DIVERSE CAST" — "각기 다른 체형, 스피드, 고유 필살기를 가진 8명의 매력적인 캐릭터로 전 세계 유저의 취향을 만족시킵니다."

(C) MATCHUP SIMULATOR:
- "INSERT COIN" 큰 버튼 클릭하면 8명 중 무작위 두 명 P1/P2로 대결구도
- 양쪽에서 슬라이드 인, 가운데 "VS" → 2초 후 "FIGHT!" 큰 텍스트 (노랑→빨강 그라데이션, bounce)
- "NEXT MATCH" 버튼으로 재시도

═══════════════════════════════════════════════════════
## 6. /characters 페이지 (characters.tsx)
═══════════════════════════════════════════════════════
페이지 타이틀: "SELECT YOUR FIGHTER" (빨강 픽셀, 노랑 하단 라인)
부제: "세계를 무대로 싸울 8명의 전사. 각각의 고유한 격투 스타일과 필살기를 마스터하여 최강의 자리에 오르십시오."

12-그리드 분할 (lg:grid-cols-12):

좌측 7컬럼 — 캐릭터 4x2 격자 셀렉트:
- 8명 카드 격자, 각 셀: 이미지 + 하단 이름
- 마우스 호버/클릭으로 선택, 선택된 카드: border-accent, scale-105, 흰색 펄스 테두리
- 비선택 카드는 grayscale-50%

우측 5컬럼 — 디테일 카드:
- 선택 안 됨: "WAITING FOR PLAYER..." 점선 테두리 깜빡임
- 선택 됨:
  - 상단 큰 캐릭터 이미지 (배경에 origin 텍스트 회전)
  - 하단 좌측에 이름(픽셀폰트, 빨강 그림자) + 국적
  - 데이터 그리드: HEIGHT, WEIGHT, STYLE, SIGNATURE MOVE
  - 스탯바 5개 (hp/atk/spd/stun/reach), 빨강→노랑 그라데이션, 0~10 기준

═══════════════════════════════════════════════════════
## 7. /combat 페이지 (combat.tsx)
═══════════════════════════════════════════════════════
(A) 헤더 섹션:
- 타이틀 "COMBAT SYSTEM" (시안 픽셀)
- 부제: "격투 게임의 진수를 4버튼 체계와 캔슬 기반의 콤보 시스템으로 풀어냅니다."

(B) 2컬럼 — 4-BUTTON LAYOUT / SPECIAL COMMANDS:
좌측: 4-BUTTON LAYOUT
- LP 약펀치 → J (파랑 테두리)
- HP 강펀치 → K (진파랑)
- LK 약킥 → N (빨강)
- HK 강킥 → M (진빨강)

우측: SPECIAL COMMANDS (순차 입력 800ms 이내)
- SHOCKWAVE: S → D → J
- FLAME UPPER: D → S → K
- CYCLONE KICK: S → A → M

(C) COMMAND TRAINER (실시간 인터랙티브):
- 키보드 S, D, J 입력을 순서대로 화면에 누적 표시 (최근 3키)
- 정확히 "SDJ" 시퀀스 완성 시:
  - Kazuo 일러스트 잠깐 스케일 변형
  - 화면 가운데서 시안 에너지볼이 발사되어 우측으로 슬라이드 (1초)
  - "SHOCKWAVE!" 텍스트 출현
  - 시안 플래시 오버레이
  - 콤보 카운터 "N HITS!" 우상단에 펄스
- 800ms 이내 키 안 누르면 입력 리셋

═══════════════════════════════════════════════════════
## 8. /demo 페이지 (demo.tsx) — 풀스크린 게임
═══════════════════════════════════════════════════════
레이아웃은 layout.tsx에서 /demo일 때만 max-width 해제됨.

구조:
- 상단 HP UI (absolute):
  - 좌: "KAZUO" + 빨강→노랑→초록 HP바 (gradient-to-r)
  - 가운데: 큰 "99" 카운터 (노랑, 깜빡임)
  - 우: "RIKU" + 동일 HP바 (반대방향, gradient-to-l)
- 중앙 게임 캔버스:
  - 내부 해상도 800x400, CSS는 풀화면 (height: calc(100vh - 220px), object-contain)
  - 배경 japan.png
  - P1 (Kazuo), P2 (Riku) — 풀바디 일러스트로 그려짐
  - 그림자 타원 (검정 50% 알파)
- 하단 컨트롤 가이드: WASD / J / K 키 표시
- 게임 종료 시 INSERT COIN TO CONTINUE 버튼 (페이지 새로고침)

게임 로직:
const GRAVITY = 0.8;
const JUMP_FORCE = -15;
const SPEED = 5;
const GROUND_Y = 210;

type Player = {
  x: number; y: number; w: 100; h: 180;
  vy: number; hp: number;
  state: "idle"|"walk"|"jump"|"punch"|"kick"|"guard"|"hit"|"ko";
  dir: 1|-1; imgObj: HTMLImageElement|null;
};

규칙:
- 양쪽 100 HP 시작
- P1 키 입력: A=좌, D=우, W=점프, S=가드, J=펀치, K=킥
- P1은 항상 상대방 쪽으로 자동 face (dir 자동 설정)
- P2는 단순 AI: 거리>120이면 접근(walk), 가까우면 5% 확률 punch / 2% kick
- 충돌: 펀치 reach=80 / 데미지=5, 킥 reach=100 / 데미지=8
- 가드 성공 시 데미지 무효 (방향 일치 시)
- 피격 시 30px 넉백, "hit" 상태 400ms 후 idle 복귀
- HP 0이면 KO, 회전+낙하 표시, 화면 중앙에 "K.O." + "PLAYER N WINS"

캐릭터 그리기 (Canvas 변환):
- drawW = w * 2, drawH = h * 1.5
- 바닥 중심 기준 회전/스케일
- punch: rotate 0.1, scale(1.1, 0.95)
- kick: rotate -0.1, scale(1.2, 0.9)
- guard: rotate -0.1, scale(0.9, 1)
- hit: rotate -0.2, translate(-10,-10), filter brightness 200% hue-rotate 90
- ko: rotate -1.5, translate(-50, 50)
- walk: translateY(sin(time/100) * 5) — 보빙
- jump: scale(0.9, 1.1)
- dir == -1이면 ctx.scale(-1,1) + translate(-800,0)으로 좌우 반전

히트 이펙트:
- 피격 시 충돌 지점에 노랑+흰색 원 (랜덤 크기), 매 프레임 다시 그려짐

═══════════════════════════════════════════════════════
## 9. AI로 따로 만들어야 할 이미지 (Midjourney/DALL-E/Imagen 등)
═══════════════════════════════════════════════════════
캐릭터 일러스트 공통 베이스:
"Hand-painted 16-bit arcade fighting game character art, full body standing
fighting stance, side view facing right, transparent background PNG,
no text, no UI, no shadows. Detailed pixel-painting style."

각 캐릭터 추가 묘사:
- KAZUO: Japanese karateka, white headband, sleeveless white karate gi torn at edges, black belt, red fingerless gloves, barefoot, athletic muscular build, short black spiky hair.
- RIKU: American karateka, long red wavy hair tied with red headband, orange karate gi, black belt, red fingerless gloves, barefoot, athletic muscular build, confident grin.
- MEI-LIN: Young Chinese woman martial artist, red sleeveless qipao with gold dragon embroidery, black silk pants, white cloth wraps on hands and feet, long black hair in single high ponytail with red ribbon, athletic slim curvaceous build.
- COLE: American military fighter, blonde flat-top hair, green camo pants, white tank top, red dog tags, black combat boots, athletic build, serious expression.
- VOLT: Brazilian feral fighter, wild green-tinted skin, long orange wild hair, torn brown shorts, bare feet with claws, hunched athletic build, sharp teeth.
- BORIS: Russian wrestler giant, completely bald, huge muscular bodybuilder physique, red wrestling tights, big leather boots, scarred chest, thick mustache.
- RAVI: Indian yoga master, lean wiry physique, bald head with fire markings, yellow loincloth and skirt, white jewelry, long stretchy limbs, calm serene face.
- GORO: Japanese sumo wrestler, traditional mawashi belt, topknot hair, massive heavy build, broad shoulders, intimidating stance.

스테이지 배경 공통:
"Pixel art 16-bit fighting game stage background, horizontal landscape
2:1 aspect ratio (1280x640), atmospheric lighting, no characters, no UI."

각 스테이지:
- japan.png: Japanese temple at sunset, cherry blossoms, torii gate, stone lanterns, red architecture
- china.png: Chinese marketplace, hanging red lanterns, pagoda
- india.png: Ancient temple with elephants, sandstone columns
- russia.png: Industrial factory in snow, smokestacks, brutalist
- usa.png: American military base, fighter jet, hangar
- brazil.png: Amazon jungle clearing, ruins, vines

═══════════════════════════════════════════════════════
## 10. 구현 순서 권장
═══════════════════════════════════════════════════════
1. Vite + React + TS + Tailwind v4 프로젝트 셋업
2. index.css에 디자인 토큰 + 폰트 + CRT 효과 추가
3. layout.tsx (헤더/푸터/네비, /demo 분기)
4. 빈 4개 페이지 라우트 연결
5. AI로 8 캐릭터 + 6 스테이지 이미지 생성, src/assets/ 에 저장
6. characters.tsx — 그리드 + 디테일 카드
7. overview.tsx — 히어로 + USP + 매치업 시뮬레이터
8. combat.tsx — 키 입력 트레이너
9. demo.tsx — Canvas 게임 루프 + 충돌 + HP

═══════════════════════════════════════════════════════
## 11. 톤앤매너
═══════════════════════════════════════════════════════
- 모든 UI 텍스트는 한국어
- 시스템 라벨/버튼은 영문 픽셀폰트 (KAZUO, FIGHT!, INSERT COIN, K.O.)
- 설명문은 한국어 본문 폰트(Inter 등)
- 색감: 깊은 검정 배경 + 네온 빨강/시안/노랑 강조
- 모든 패널에 border (보통 border-4) + glow (drop-shadow)
- 픽셀폰트는 항상 letter-spacing 넓게
- 깜빡임/펄스 효과 적극 사용 (.blink, animate-pulse)
- CRT 스캔라인은 화면 전체에 지속 표시

이 명세대로 만들어줘. 막히면 단계별로 끊어서 진행해.
전체 보기

Step 1: 기획서 먼저 만들기

아무 설명 없이 "스트리트 파이터 스타일 게임 만들어 줘"라고만 던지면 결과물이 허술하게 나옵니다. 영상에서도 첫 번째 데모는 배경도 캐릭터도 없이 네모난 사각형이 움찔거리는 수준이었습니다. 이 차이를 만드는 것이 바로 기획서입니다.

기획서는 게임의 목적, 세계관, 캐릭터 구성, 핵심 메커니즘, UI 레이아웃을 한 문서에 정리한 설계도입니다. 레플릿에서는 별도 페이지로 만들어 두고 앱 개발 프롬프트 본문에 붙여 넣는 방식으로 사용합니다. 기획서에 최소한으로 들어가야 하는 항목은 다음과 같습니다.

기획서 필수 항목
  1. 게임 컨셉 한 줄 요약
  2. 아트 스타일 (예: 스트리트 파이터 같은 2D 픽셀/도트 아케이드)
  3. 핵심 기능 목록 (코인 투입, 캐릭터 선택, 전투, 필살기, 승패 판정)
  4. 캐릭터 로스터와 각 캐릭터의 특성
  5. 화면 구성 (인트로, 캐릭터 선택, 매치 시뮬레이터, 전투, 승리)
  6. 사운드 요구사항
💡이 과정이 번거롭다면

위에 있는 마스터 프롬프트를 그대로 복사해서 사용하시면 동일한 구조의 기획서가 바로 생성됩니다. 아래 단계는 그대로 따라갈 수 있습니다.

Step 2: Replit에서 파워 모드로 초기 데모 만들기

기획서가 준비되었다면 레플릿에 접속해서 새 앱을 만듭니다. 여기서 가장 먼저 확인해야 하는 것이 Agent 모드입니다. 기본값으로 시작하면 덜 강력한 모델이 붙어 결과물이 훨씬 단순해집니다.

채팅 입력창 왼쪽 하단에서 Agent modes 드롭다운을 열면 세 가지 옵션이 보입니다.

모드용도사용 모델 특성
Lite간단한 수정, 짧은 대화가장 가벼운 모델
Economy일반 작업, 비용 효율 우선중간 성능 모델
Power복잡한 기능, 긴 빌드, 프로덕션 수준가장 강력한 모델 (Claude Opus 4.7 포함)
Replit Agent 모드 비교

이번 튜토리얼에서는 Power 모드를 반드시 선택합니다. Power 모드로 설정하면 Agent 뒤에서 현재 레플릿이 제공하는 가장 강력한 모델인 Claude Opus 4.7이 동작합니다. 영상 촬영 당시 레플릿은 Opus 4.7 파워 모드에 대해 크레딧 약 50% 할인 프로모션 문구를 표시하고 있었습니다. 프로모션 조건은 시점에 따라 달라지므로, 현재 상태는 아래 공식 문서에서 확인하시기 바랍니다.

⚠️영상 초반 데모가 허접했던 이유

영상 초반 "그래픽이 없는 허접한 데모"는 아직 Power 모드를 켜지 않은 상태로 요청했기 때문입니다. 모드를 Power로 바꾼 뒤부터 입력하는 내용이 Claude Opus 4.7 기준으로 처리된다는 점을 잊지 마세요.

Step 3: 스트리트 파이터 스타일로 기획서 업그레이드

초기 데모가 나왔다면 실제 스트리트 파이터 감성이 나도록 기획서를 한 번 더 업그레이드합니다. 요청 핵심은 두 가지입니다. 아케이드 스타일로 전체 UI를 다시 잡아 달라는 것, 그리고 각 화면마다 필요한 이미지 자리를 미리 잡아 달라는 것입니다.

영상에서는 이 업그레이드를 거친 뒤 로딩 화면, 캐릭터 로스터, 매치 시뮬레이터 같은 구성이 깔끔한 도트 아케이드 감성으로 다시 짜여서 나왔습니다. 이 시점까지는 실제 캐릭터 그림이 비어 있어도 괜찮습니다. 뼈대만 확실히 잡아 두고, 캐릭터 애니메이션은 다음 단계에서 채워 넣을 것이기 때문입니다.

Step 4: 스프라이트 시트 이미지 생성하기

지금까지 만든 데모에서 가장 큰 아쉬움은 캐릭터가 움찔움찔 거리는 수준이라는 점입니다. 이걸 진짜 격투 게임처럼 보이게 하려면 캐릭터의 동작별 이미지를 여러 장 만들어 붙여야 합니다. 이것을 스프라이트 시트라고 합니다.

스프라이트 시트는 한 캐릭터의 동작 하나를 여러 프레임으로 쪼개 놓은 이미지 묶음입니다. 예를 들어 발차기라면 준비 자세 → 다리를 올리는 중간 → 가장 뻗은 자세 → 되돌아오는 자세 순으로 4~6 프레임으로 나눠서 그려 둡니다. 이 프레임을 빠르게 이어 보여 주면 애니메이션처럼 보입니다.

영상에서는 Nano Banana Pro로 이미지를 생성했고, 다음 액션 단위로 스프라이트를 만들었습니다.

캐릭터당 만들어 둘 스프라이트 액션

0/9 완료

💡이미지 프롬프트도 Opus에 맡기기

"이 게임에 사용할 캐릭터 스프라이트 시트를 프레임별로 생성할 수 있는 프롬프트를 액션별로 만들어 줘"라고 Agent에게 요청하면, 캐릭터 디자인부터 액션별 프롬프트까지 필요한 모든 텍스트를 Opus가 만들어 줍니다. 그걸 그대로 이미지 생성 모델에 넣기만 하면 됩니다.

⚠️배경 제거는 필수

이미지 생성이 끝났다면 PNG 파일을 다운로드하고 배경을 투명으로 만듭니다. 배경이 남아 있으면 게임 화면에서 캐릭터 주위에 흰 사각형이 보여 몰입이 깨집니다. remove.bg, Photoroom, Pixlr 같은 온라인 무료 도구 중 아무거나 사용하시면 됩니다.

Step 5: 스프라이트 매핑으로 애니메이션 순서 지정

이제 스프라이트 시트 각각에 순서 정보를 붙여야 합니다. 이미지만 있고 순서가 없으면 레플릿의 Agent가 어느 프레임을 먼저 보여 줘야 하는지 판단할 수 없습니다. 스프라이트 매핑 웹사이트에 접속해서 이미지를 업로드하면, 툴이 자동으로 각 프레임을 인식해 잘라 줍니다.

매핑 진행 순서

1

빈 프레임 삭제

오른쪽 스프라이트 프리뷰에서 아무것도 나오지 않는 빈 프레임(여백만 잡힌 경우)은 삭제합니다.

2

프레임 순서 바로잡기

캐릭터 동작만 정확히 남았다면 1, 2, 3, 4, 5, 6 순서에 맞게 이름을 바꿉니다.

3

이름 중복 회피

원하는 번호로 바로 바꾸면 중복 오류가 납니다. 일단 22, 33 같은 임시 이름으로 바꾸고, 나머지 이름을 다 정리한 뒤 원래 숫자로 되돌립니다.

4

매핑 정보 저장

JSON 포맷으로 저장해 두면 레플릿 Agent가 읽기 편합니다. 포맷이 텍스트여도 무방하지만 JSON을 권장합니다.

5

모든 액션에 반복

캐릭터별, 액션별로 같은 과정을 반복합니다. 하나라도 빠지면 해당 동작은 애니메이션이 없는 상태로 남습니다.

Step 6: Replit에 스프라이트와 매핑 업로드

매핑까지 끝났다면 다시 레플릿으로 돌아와서 스프라이트 시트 PNG와 매핑 파일을 업로드하고, Agent에게 애니메이션으로 연결해 달라고 요청합니다. 올릴 때마다 "이 스프라이트와 매핑을 기존 애니메이션에 연결해 줘" 정도로만 말하면 Agent가 알아서 붙여 줍니다.

⚠️한 번에 20개 업로드 제한

레플릿에서는 한 번에 20개까지만 파일 업로드가 됩니다. 액션과 캐릭터가 많으면 몇 번에 걸쳐 순차적으로 올려야 합니다.

업로드가 끝나면 게임이 훨씬 그럴듯해집니다. 영상 기준으로는 이 시점에서 이미 기본 펀치, 강펀치, 강킥, 승리 포즈, 쓰러지는 모션이 자연스럽게 이어지는 수준까지 나옵니다.

Step 7: 버그 잡기 — 점프, 시간, 필살기, 캐릭터 크기

스프라이트까지 붙여도 몇 가지 버그는 반드시 남습니다. 영상에서 실제로 나왔던 대표적인 문제와 Agent에게 바로 복사해 쓸 수 있는 수정 요청 문구를 정리했습니다.

증상Agent에게 보낼 수정 요청
전투 타이머가 줄어들지 않음전투 제한 시간 타이머가 매초 감소하도록 고쳐 줘.
점프가 상대를 넘어갈 만큼 뜨지 않음점프 높이와 체공 시간을 늘리고, 점프 중에 좌우 이동이 가능하도록 수정해 줘.
CPU 상대가 필살기를 쓰지 않음CPU가 일정 확률로 필살기를 사용하도록 AI 로직을 보완해 줘.
쓰러질 때 캐릭터가 확대되어 보임모든 프레임에서 캐릭터 크기가 일정하게 유지되도록 스프라이트 스케일을 고정해 줘.
자주 남는 버그와 수정 요청 프롬프트

각자 프로젝트에서는 조금씩 다른 버그가 나올 수 있습니다. 증상을 짧게 설명하고 원하는 동작을 한 문장으로 덧붙이는 방식이 가장 빠르게 고쳐집니다. 예를 들어 "쓰러진 뒤 캐릭터가 바닥에서 떠 있음 → 바닥 y좌표에 맞춰 정렬해 줘" 같은 식입니다.

Step 8: 배경음과 효과음 추가

마지막으로 사운드를 붙입니다. 배경음은 AI 음악 생성 모델로 바로 만들 수 있습니다. 영상에서는 구글 Lyria 3로 "스트리트 파이터 2 같은 아케이드 격투 게임에 어울리는 배경음악"을 요청해서 결과물을 받았습니다. 다른 모델을 쓰셔도 무방합니다.

만들어진 오디오 파일을 다운로드해서 레플릿에 업로드한 뒤, Agent에게 "이 오디오를 메인 전투 화면의 배경음악으로 설정해 줘"라고 요청합니다. 효과음도 같은 방식으로 추가합니다. 펀치, 킥, 에너지파, 피격, 쓰러짐 같은 구간마다 짧은 효과음을 붙여 달라고 Agent에게 말하면 됩니다. 별도 오디오 파일이 없으면 "기본 효과음 라이브러리에서 적절한 것을 붙여 줘"라고 요청해도 어느 정도 자동으로 처리됩니다.

최종 결과 확인

이 단계까지 마치면 영상 마지막에 나온 완성본과 유사한 결과물이 나옵니다. 게임 디자인을 전혀 모르는 상태에서 시작했음에도, 레플릿과 Claude Opus 4.7을 조합하면 기획부터 디자인, 코드, 버그 수정까지 거의 전 과정을 AI가 맡아서 처리해 준다는 것을 확인할 수 있습니다.

완성본에서 확인할 수 있는 것
  1. 점프가 정상적으로 되고 상대를 넘어갈 수 있다
  2. 강공격으로 거리를 벌린 뒤 에너지파를 쏘면 제대로 날아간다
  3. 효과음과 배경음이 전투 리듬에 맞게 들어간다
  4. 모든 프레임에서 캐릭터 크기가 일정하게 유지된다

자주 막히는 문제

결과물이 여전히 허접합니다
Agent 모드가 Power로 되어 있는지 다시 확인합니다. Lite나 Economy 상태로 작업하면 결과물 수준이 확연히 떨어집니다.
스프라이트가 움직이지 않습니다
매핑 파일이 업로드되지 않았거나, 이름 규칙이 Agent가 인식하지 못하는 형태일 수 있습니다. JSON 포맷으로 통일해서 다시 올립니다.
이미지가 사각형 테두리와 함께 보입니다
배경 제거가 빠졌습니다. 저장한 PNG가 실제로 투명 배경인지 다시 확인합니다.
크레딧이 빨리 소진됩니다
Power 모드에 Turbo까지 켜면 요청당 비용이 최대 6배까지 올라갑니다. Turbo는 속도가 꼭 필요할 때만 켭니다. Turbo는 Pro 플랜 이상에서만 사용할 수 있습니다.
한 번에 업로드가 안 됩니다
파일 업로드는 회당 20개가 한계입니다. 나눠서 순차적으로 올립니다.

다음 단계

여기까지 따라 오셨다면 2D 격투 게임의 핵심 골격은 모두 만들어진 상태입니다. 좀 더 욕심을 내고 싶다면 다음 방향을 추천합니다.

확장 아이디어
  1. 캐릭터 로스터에 3~4명 추가해 선택 화면 풍성하게 만들기
  2. 전투 배경을 캐릭터별로 다르게 지정해 스테이지 다양화
  3. 난이도별로 CPU 필살기 사용 빈도를 조절하는 난이도 시스템
  4. 단일 기기에서 두 명이 플레이하는 로컬 대전 모드

무료 Starter 플랜으로도 기본 빌드는 충분하지만, 본격적으로 이어 나가실 계획이라면 Core나 Pro 플랜으로 넉넉한 크레딧을 확보하는 쪽이 편합니다. 연간 결제 시 할인이 함께 적용되니 자세한 조건은 Replit 요금제 페이지에서 확인해 주세요.

여러분도 자신만의 아이디어가 있다면 레플릿과 클로드를 활용해서 한번 만들어 보시고, 결과물을 댓글로 공유해 주세요.