<!doctype html><html lang="ko"><head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>SONIC PHP – PHP로 다시 만든 마스터 시스템 소닉, 무료 온라인 플레이</title> <meta name="description" content="마스터 시스템 소닉을 PHP로 다시 만들어 브라우저에서 무료로 즐기세요. 여섯 개의 존, 보스, 스페셜 스테이지, 최고 기록, 봇과의 레이스를 담았습니다. 키보드, 게임패드, 터치 화면 지원." /> <link rel="canonical" href="https://{{DOMAIN}}/ko/" /> <link rel="alternate" hreflang="fr" href="https://{{DOMAIN}}/" /> <link rel="alternate" hreflang="en" href="https://{{DOMAIN}}/en/" /> <link rel="alternate" hreflang="es" href="https://{{DOMAIN}}/es/" /> <link rel="alternate" hreflang="de" href="https://{{DOMAIN}}/de/" /> <link rel="alternate" hreflang="it" href="https://{{DOMAIN}}/it/" /> <link rel="alternate" hreflang="pt" href="https://{{DOMAIN}}/pt/" /> <link rel="alternate" hreflang="nl" href="https://{{DOMAIN}}/nl/" /> <link rel="alternate" hreflang="pl" href="https://{{DOMAIN}}/pl/" /> <link rel="alternate" hreflang="ru" href="https://{{DOMAIN}}/ru/" /> <link rel="alternate" hreflang="uk" href="https://{{DOMAIN}}/uk/" /> <link rel="alternate" hreflang="tr" href="https://{{DOMAIN}}/tr/" /> <link rel="alternate" hreflang="ja" href="https://{{DOMAIN}}/ja/" /> <link rel="alternate" hreflang="zh" href="https://{{DOMAIN}}/zh/" /> <link rel="alternate" hreflang="ko" href="https://{{DOMAIN}}/ko/" /> <link rel="alternate" hreflang="x-default" href="https://{{DOMAIN}}/" /> <meta name="robots" content="index, follow, max-image-preview:large" /> <meta name="theme-color" content="#00aaff" /> <link rel="icon" type="image/png" sizes="32x32" href="../images/favicon.png" /> <link rel="apple-touch-icon" href="../images/apple-touch-icon.png" /> <meta property="og:type" content="website" /> <meta property="og:locale" content="ko_KR" /> <meta property="og:site_name" content="SONIC PHP" /> <meta property="og:title" content="SONIC PHP – 마스터 시스템 소닉, 온라인 플레이" /> <meta property="og:description" content="마스터 시스템 소닉(1991)을 PHP로 다시 만들었습니다. 여섯 개의 존, 보스, 스페셜 스테이지, 봇과의 레이스를 브라우저에서 무료로 즐기세요." /> <meta property="og:url" content="https://{{DOMAIN}}/ko/" /> <meta property="og:image" content="https://{{DOMAIN}}/images/og.png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="og:image:alt" content="게임 로고 옆에서 그린 힐을 뛰어오르는 소닉" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="SONIC PHP – 마스터 시스템 소닉, 온라인 플레이" /> <meta name="twitter:description" content="여섯 개의 존, 보스, 스페셜 스테이지, 봇과의 레이스를 브라우저에서." /> <meta name="twitter:image" content="https://{{DOMAIN}}/images/og.png" /> <script type="application/ld+json"> { "@context": "https://schema.org", "@graph": [ { "@type": "VideoGame", "@id": "https://{{DOMAIN}}/ko/#game", "name": "SONIC PHP", "alternateName": "Sonic the Hedgehog (마스터 시스템) – PHP 리메이크", "url": "https://{{DOMAIN}}/ko/", "image": "https://{{DOMAIN}}/images/og.png", "screenshot": [ "https://{{DOMAIN}}/images/level-1.png", "https://{{DOMAIN}}/images/level-7.png", "https://{{DOMAIN}}/images/special.png", "https://{{DOMAIN}}/images/versus.png" ], "description": "마스터 시스템 소닉의 팬 리메이크로, PHP로 작성되어 브라우저에서 플레이할 수 있습니다. 여섯 개의 존과 보스, 스페셜 스테이지, 엔딩, 고스트가 있는 최고 기록, 봇과의 레이스를 담았습니다.", "genre": ["플랫포머", "액션", "레트로"], "gamePlatform": ["웹 브라우저", "컴퓨터", "모바일"], "applicationCategory": "Game", "operatingSystem": "최신 브라우저 어디서나", "playMode": ["SinglePlayer", "MultiPlayer"], "numberOfPlayers": {"@type": "QuantitativeValue", "minValue": 1, "maxValue": 1}, "inLanguage": ["ko"], "isAccessibleForFree": true, "offers": {"@type": "Offer", "price": "0", "priceCurrency": "EUR", "availability": "https://schema.org/InStock"}, "codeRepository": "https://github.com/davidnurdin/sonic-jumphp", "sameAs": "https://sonic.mimichat.fr/", "potentialAction": {"@type": "PlayAction", "target": "https://{{DOMAIN}}/play/"} }, { "@type": "FAQPage", "mainEntity": [ {"@type": "Question", "name": "플레이하려면 따로 설치해야 하나요?", "acceptedAnswer": {"@type": "Answer", "text": "아니요. 게임은 컴퓨터와 스마트폰 모두 브라우저에서 실행됩니다. 처음 불러올 때 약 25MB(WebAssembly용 PHP, 레벨, 그래픽, 음악)를 내려받고, 이후에는 모두 캐시에 저장됩니다."}}, {"@type": "Question", "name": "정식 버전과 무엇이 다른가요?", "acceptedAnswer": {"@type": "Answer", "text": "sonic.mimichat.fr의 정식 버전에는 최대 6명까지 즐기는 온라인 멀티플레이(공개·비공개 방, 채팅)와 리플레이가 더해집니다. 이 버전은 같은 게임을 JumPHP 엔진으로 옮긴 것으로, 혼자 또는 봇과 즐길 수 있습니다."}}, {"@type": "Question", "name": "어떻게 플레이하나요?", "acceptedAnswer": {"@type": "Answer", "text": "방향키로 달리고, 위를 보고, 공처럼 몸을 말 수 있고, 스페이스바로 점프하며, 엔터 키로 메뉴와 일시정지, Esc 키로 타이틀로 돌아갑니다. 게임패드도 사용할 수 있고, 스마트폰에서는 방향 패드와 버튼이 화면에 나타납니다."}} ] } ] } </script> <style> :root { --sky: #00aaff; --night: #000055; --night-deep: #00002a; --ink: #f2f6ff; --muted: #b4c4f0; --panel: #0a1470; --line: #2a3fb0; --yellow: #ffd800; --red: #e00000; --cyan: #55ffff; --blue: #0055ff; --earth: #ffaa00; --earth-dark: #aa5500; --grass: #00aa00; } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; background: var(--night-deep); background-image: linear-gradient(180deg, var(--night) 0, var(--night-deep) 1400px); color: var(--ink); font: 17px/1.6 system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, sans-serif; } img { image-rendering: pixelated; image-rendering: crisp-edges; max-width: 100%; height: auto; display: block; } img.smooth { image-rendering: auto; } a { color: var(--cyan); } .wrap { max-width: 1080px; margin: 0 auto; padding: 0 16px; } .pixel { font-family: ui-monospace, "Cascadia Mono", "DejaVu Sans Mono", Menlo, Consolas, monospace; letter-spacing: .08em; text-transform: uppercase; } /* the ground of Green Hill: grass over a checkerboard */ .ground { height: 30px; border-top: 6px solid var(--grass); background: conic-gradient(var(--earth) 25%, var(--earth-dark) 0 50%, var(--earth) 0 75%, var(--earth-dark) 0) 0 0 / 24px 24px; } header.hero { padding: 40px 0 48px; text-align: center; background: linear-gradient(180deg, #0088ee 0, var(--sky) 55%, #55ccff 100%); } .hero h1 { font-size: clamp(38px, 8vw, 72px); line-height: 1.05; margin: 0; color: var(--yellow); text-shadow: 4px 4px 0 var(--blue), 8px 8px 0 #00226a; } .hero .sub { margin: 16px auto 0; max-width: 700px; font-size: clamp(17px, 2.2vw, 20px); color: #fff; text-shadow: 0 2px 0 #0050a0; } .actions { margin-top: 28px; display: flex; flex-wrap: wrap; justify-content: center; gap: 16px 22px; } .cta { display: inline-block; padding: 18px 34px; background: var(--yellow); color: #111; text-decoration: none; font-weight: 800; font-size: 22px; border: 4px solid #111; box-shadow: 6px 6px 0 var(--red); transition: transform .08s; } .cta:hover, .cta:focus-visible { transform: translate(-2px, -2px); box-shadow: 8px 8px 0 var(--red); } .cta.alt { background: #fff; font-size: 17px; padding: 14px 22px; box-shadow: 6px 6px 0 var(--blue); align-self: center; } .cta.alt:hover, .cta.alt:focus-visible { box-shadow: 8px 8px 0 var(--blue); } .hero .note { margin-top: 18px; font-size: 14px; color: #ecf8ff; text-shadow: 0 1px 0 #0050a0; } .hero .screen { margin: 36px auto 0; width: 100%; max-width: 840px; border: 6px solid #111; box-shadow: 0 0 0 4px #fff, 0 20px 50px rgba(0, 0, 40, .45); } section { padding: 56px 0; } section + section { border-top: 2px solid var(--line); } h2 { font-size: clamp(22px, 3.4vw, 32px); margin: 0 0 18px; color: var(--yellow); } h3 { margin: 0 0 6px; font-size: 18px; color: var(--cyan); } p { margin: 0 0 14px; } .lead { color: var(--muted); max-width: 760px; } .grid { display: grid; gap: 18px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); } figure { margin: 0; background: #000; border: 4px solid #000; box-shadow: 0 0 0 3px var(--line); } figcaption { background: var(--panel); padding: 8px 12px; font-size: 14px; color: var(--muted); } figcaption b { color: var(--ink); } .cards { display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); } .card { background: var(--panel); border: 3px solid var(--line); padding: 18px; } kbd { display: inline-block; min-width: 1.8em; padding: 1px 7px; background: var(--ink); color: #111; border-radius: 3px; border-bottom: 3px solid #888; font: 600 14px/1.5 ui-monospace, monospace; text-align: center; } .split { display: grid; gap: 32px; grid-template-columns: 1fr 1fr; align-items: center; } @media (max-width: 760px) { .split { grid-template-columns: 1fr; } } .full { background: linear-gradient(135deg, #10207e, #000a40); border: 3px solid var(--yellow); box-shadow: 8px 8px 0 var(--red); padding: 26px; } .full ul { margin: 0 0 18px; padding-left: 20px; } .full li { margin: 4px 0; } details { background: var(--panel); border: 3px solid var(--line); padding: 14px 18px; margin-bottom: 12px; } summary { cursor: pointer; font-weight: 700; } details p { margin: 10px 0 0; color: var(--muted); } footer { padding: 32px 0 48px; font-size: 14px; color: var(--muted); text-align: center; } footer p { margin: 6px 0; } nav.langs { background: var(--night-deep); border-bottom: 2px solid var(--line); padding: 8px 0; } nav.langs ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 4px 6px; } nav.langs a { display: block; padding: 3px 9px; font-size: 14px; line-height: 1.5; color: var(--muted); text-decoration: none; border: 2px solid transparent; } nav.langs a:hover, nav.langs a:focus-visible { color: var(--ink); border-color: var(--line); } nav.langs a[aria-current="true"] { color: #111; background: var(--yellow); font-weight: 700; } </style></head><body> <nav class="langs" aria-label="언어"> <ul> <li><a href="../" hreflang="fr" lang="fr">Français</a></li> <li><a href="../en/" hreflang="en" lang="en">English</a></li> <li><a href="../es/" hreflang="es" lang="es">Español</a></li> <li><a href="../de/" hreflang="de" lang="de">Deutsch</a></li> <li><a href="../it/" hreflang="it" lang="it">Italiano</a></li> <li><a href="../pt/" hreflang="pt" lang="pt">Português</a></li> <li><a href="../nl/" hreflang="nl" lang="nl">Nederlands</a></li> <li><a href="../pl/" hreflang="pl" lang="pl">Polski</a></li> <li><a href="../ru/" hreflang="ru" lang="ru">Русский</a></li> <li><a href="../uk/" hreflang="uk" lang="uk">Українська</a></li> <li><a href="../tr/" hreflang="tr" lang="tr">Türkçe</a></li> <li><a href="../ja/" hreflang="ja" lang="ja">日本語</a></li> <li><a href="../zh/" hreflang="zh" lang="zh">中文</a></li> <li><a href="../ko/" hreflang="ko" lang="ko" aria-current="true">한국어</a></li> </ul> </nav> <header class="hero"> <div class="wrap"> <h1 class="pixel">Sonic PHP</h1> <p class="sub"><strong>마스터 시스템</strong> 소닉(1991)을 PHP로 다시 만들어 브라우저에서 무료로 즐기세요. <strong>여섯 개의 존, 보스, 스페셜 스테이지</strong>, 그리고 봇과의 레이스까지.</p> <div class="actions"> <a class="cta pixel" href="../play/?back=../ko/">▶ 플레이</a> <a class="cta alt" href="https://sonic.mimichat.fr/" target="_blank" rel="noopener">정식 버전, 온라인 멀티플레이 ↗</a> </div> <p class="note">컴퓨터, 스마트폰, 게임패드 · 설치 필요 없음 · 가입 필요 없음</p> <img class="screen" src="../images/level-1.png" width="840" height="426" alt="그린 힐의 링 옆에서 공처럼 몸을 만 소닉, 길을 가로막은 게" /> </div> </header> <div class="ground"></div> <main> <section id="jeu"> <div class="wrap split"> <div> <h2>8비트 소닉을 통째로</h2> <p>달리고, 점프하고, 링을 모으고, 보너스 모니터를 부수며 각 액트 끝의 표지판에 도착하세요. <strong>세 액트씩 여섯 개의 존</strong>, 존마다 마지막에 나오는 보스, 링과 스프링이 가득한 <strong>스페셜 스테이지</strong>, 그리고 엔딩까지 담았습니다.</p> <p>게임은 <strong>최고 기록</strong>과 최고 기록 레이스의 <strong>고스트</strong>를 저장하니, 다음에 도전해 보세요. 옵션에는 브라운관 화면 필터, PAL/NTSC 속도, 프랑스어/영어, 음악 주크박스가 있습니다.</p> </div> <figure> <img src="../images/map.png" width="840" height="426" loading="lazy" class="smooth" alt="그린 힐 이전의 섬 지도와 소닉의 남은 목숨" /> <figcaption><b>섬 지도</b>, 존과 존 사이에 나옵니다.</figcaption> </figure> </div> </section> <section id="zones"> <div class="wrap"> <h2>여섯 개의 존</h2> <p class="lead">존마다 고유한 배경과 함정, 보스가 있습니다. 브라우저에서 실행되는 그대로의 게임 화면입니다.</p> <div class="grid"> <figure><img src="../images/level-1.png" width="840" height="426" loading="lazy" alt="Green Hill: 체크무늬 언덕, 야자수, 링" /><figcaption><b>Green Hill</b> · 액트 1</figcaption></figure> <figure><img src="../images/level-4.png" width="840" height="426" loading="lazy" alt="Bridge: 절벽과 물 위의 통나무 다리" /><figcaption><b>Bridge</b> · 액트 1</figcaption></figure> <figure><img src="../images/level-7.png" width="840" height="426" loading="lazy" alt="Jungle: 숲 한가운데의 폭포와 발판" /><figcaption><b>Jungle</b> · 액트 1</figcaption></figure> <figure><img src="../images/level-10.png" width="840" height="426" loading="lazy" alt="Labyrinth: 물속의 조각된 초록색 블록" /><figcaption><b>Labyrinth</b> · 액트 1</figcaption></figure> <figure><img src="../images/level-13.png" width="840" height="426" loading="lazy" alt="Scrap Brain: 노을 지는 도시 앞의 공장" /><figcaption><b>Scrap Brain</b> · 액트 1</figcaption></figure> <figure><img src="../images/level-16.png" width="840" height="426" loading="lazy" alt="Sky Base: 밤하늘의 파란 철골" /><figcaption><b>Sky Base</b> · 액트 1</figcaption></figure> <figure><img src="../images/boss.png" width="609" height="309" loading="lazy" alt="Green Hill 끝에서 소닉 위를 나는 비행 기계에 탄 박사" /><figcaption><b>첫 번째 보스</b> · Green Hill, 액트 3</figcaption></figure> <figure><img src="../images/special.png" width="840" height="426" loading="lazy" alt="스페셜 스테이지: 별, 링, 스프링" /><figcaption><b>스페셜 스테이지</b> · 링과 스프링</figcaption></figure> </div> </div> </section> <section id="versus"> <div class="wrap split"> <figure> <img src="../images/versus.png" width="840" height="426" loading="lazy" class="smooth" alt="그린 힐에서 벌이는 4인 레이스, 오른쪽 위에 표시된 순위" /> <figcaption>봇 세 명과 벌이는 <b>4인 레이스</b>.</figcaption> </figure> <div> <h2>봇과 대결</h2> <p><b>MULTIPLAYER</b>에서는 게임의 존에서 컴퓨터가 조종하는 1~4명(깃발은 최대 5명)과 네 가지 규칙으로 대결합니다.</p> <p><b>레이스</b>: 가장 먼저 표지판에 도착하기. <b>깃발</b>: 가장 오래 들고 있기. <b>링</b>: 가장 많이 모으기. <b>데스매치</b>: 마지막까지 살아남기.</p> <p>진짜 플레이어와 겨루고 싶다면 <a href="#complete">정식 버전</a>에서 가능합니다.</p> </div> </div> </section> <section id="complete"> <div class="wrap"> <div class="full"> <h2>정식 버전: sonic.mimichat.fr</h2> <p>이 게임은 <strong>Sonic PHP</strong>에서 나왔으며, 원래의 정식 버전은 <a href="https://sonic.mimichat.fr/" target="_blank" rel="noopener">sonic.mimichat.fr</a>에서 즐길 수 있습니다. 여기 있는 모든 것에 더해 다음이 있습니다.</p> <ul> <li><strong>최대 6명의 온라인 멀티플레이</strong>: 레이스, 깃발, 링, 데스매치</li> <li>공개 방, 또는 4글자 코드로 들어가는 비공개 방. 빈자리는 봇이 채웁니다</li> <li>방과 게임 중 채팅</li> <li>모든 경기의 <strong>리플레이</strong></li> <li>브라우저와 같은 방에 들어가는 데스크톱 버전(네이티브 PHP)</li> </ul> <a class="cta pixel" href="https://sonic.mimichat.fr/" target="_blank" rel="noopener">온라인 플레이 ↗</a> </div> </div> </section> <section id="commandes"> <div class="wrap"> <h2>조작법</h2> <div class="cards"> <div class="card"> <h3>키보드</h3> <p><kbd>←</kbd> <kbd>→</kbd> 달리기<br /> <kbd>↑</kbd> 위 보기, <kbd>↓</kbd> 공처럼 몸 말기<br /> <kbd>스페이스</kbd> 점프<br /> <kbd>엔터</kbd> 메뉴와 일시정지<br /> <kbd>Esc</kbd> 타이틀로 돌아가기</p> </div> <div class="card"> <h3>게임패드</h3> <p>방향키 또는 스틱으로 달리고, <b>A</b>, <b>B</b>, <b>X</b>, <b>Y</b>로 점프하며, <b>Start</b>로 메뉴와 일시정지, <b>Select</b>로 타이틀로 돌아갑니다.</p> </div> <div class="card"> <h3>스마트폰</h3> <p>왼쪽의 방향 패드로 달리고, 오른쪽의 <b>JUMP</b>로 점프, <b>ROLL</b>로 공 모양, <b>START</b>로 일시정지, <b>MENU</b>로 타이틀로 돌아갑니다. 스마트폰은 가로로 잡으세요.</p> </div> </div> <p style="margin-top: 28px; text-align: center"><a class="cta pixel" href="../play/?back=../ko/">▶ 지금 플레이</a></p> </div> </section> <section id="fabrication"> <div class="wrap split"> <div> <h2>제작 이야기</h2> <p><strong>Sonic PHP</strong>는 물리, 오브젝트, 적, 보스, 카메라, 봇까지 전부 PHP로 작성되었습니다. 레벨과 그래픽, 색상 순환은 원본 카트리지에서 해독했고, 음악은 게임의 Z80 사운드 프로그램을 에뮬레이터에서 실행해 얻었습니다.</p> <p>이 버전은 <a href="https://github.com/davidnurdin/jumPhp" target="_blank" rel="noopener">JumPHP</a> 엔진으로 옮겨졌습니다. 같은 코드가 컴퓨터의 창에서도, PHP를 <strong>WebAssembly</strong>로 컴파일한 브라우저에서도 실행됩니다. 게임 로직은 원본 그대로이며, 화면, 소리, 조작, 저장만 JumPHP를 거칩니다.</p> <p>코드: <a href="https://github.com/davidnurdin/sonic-jumphp" target="_blank" rel="noopener">sonic-jumphp</a>(이 버전)와 <a href="https://github.com/davidnurdin/sonicGamePhp" target="_blank" rel="noopener">sonicGamePhp</a>(정식 버전).</p> </div> <figure> <img src="../images/title.png" width="840" height="426" loading="lazy" class="smooth" alt="로고와 START, MULTIPLAYER, OPTIONS, BEST TIMES 메뉴가 있는 타이틀 화면" /> <figcaption><b>타이틀 화면</b>과 메뉴.</figcaption> </figure> </div> </section> <section id="questions"> <div class="wrap"> <h2>자주 묻는 질문</h2> <details> <summary>따로 설치해야 하나요?</summary> <p>아니요. 게임은 컴퓨터와 스마트폰 모두 브라우저에서 실행됩니다. 처음 불러올 때 약 25MB(WebAssembly용 PHP, 레벨, 그래픽, 음악)를 내려받고, 이후에는 모두 캐시에 저장됩니다.</p> </details> <details> <summary>정식 버전과 무엇이 다른가요?</summary> <p><a href="https://sonic.mimichat.fr/" target="_blank" rel="noopener">정식 버전</a>에는 최대 6명의 온라인 멀티플레이, 방, 채팅, 리플레이가 더해집니다. 이 버전은 같은 게임을 JumPHP로 옮긴 것으로, 혼자 또는 봇과 즐길 수 있습니다.</p> </details> <details> <summary>내 기록이 저장되나요?</summary> <p>네. 최고 기록, 고스트, 옵션은 브라우저에 저장됩니다.</p> </details> <details> <summary>브라우저 밖에서도 플레이할 수 있나요?</summary> <p>네, JumPHP와 Docker로 가능합니다. <code>bin/jumphp run sonic</code>을 실행하면 소리와 함께 창에서 게임이 열립니다. <a href="https://github.com/davidnurdin/sonic-jumphp" target="_blank" rel="noopener">GitHub 저장소</a>를 참고하세요.</p> </details> </div> </section> </main> <div class="ground"></div> <footer> <div class="wrap"> <p>광고 없는 무료 팬 리메이크, <a href="https://github.com/davidnurdin/jumPhp" target="_blank" rel="noopener">JumPHP</a>로 제작.</p> <p>Sonic the Hedgehog © SEGA 1991. 마스터 시스템 버전은 Ancient가 개발했습니다. 이 프로젝트는 SEGA나 Ancient와 관련이 없으며, 캐릭터, 그래픽, 레벨, 음악의 권리는 각 제작자에게 있습니다.</p> </div> </footer></body></html>