NARCER BETA 投稿する

Guide

つくって、出すまで。

プログラムが書けなくても大丈夫です。下の文を ChatGPT や Claude に貼ると、そのまま NARCER に出せる形のゲームができます。できたファイルを投稿ページに落とすだけ。つくりかけでも出していい場所です。

STEP 1AI につくってもらう

ChatGPT・Claude・Gemini など、どれでも構いません。下の文をまるごとコピーして、最後の2行だけ自分の言葉に書き換えて貼ってください。

そのまま貼る文(基本)これだけで出せる形になります
ブラウザで遊べる小さなゲームを、HTML 1ファイルだけで作ってください。
NARCER(https://narcer.com/)という投稿サイトに出すので、次の決まりを必ず守ってください。

【つくりの決まり】
- HTML・CSS・JavaScript を、すべて1つの .html ファイルに入れる
- 外部のファイルを読み込まない(画像・音・フォント・ライブラリを外から持ってこない)。絵は canvas で描くか、色と形で表す
- 外へ通信しない(fetch / XMLHttpRequest / WebSocket / sendBeacon を使わない)
- 親ページを触らない(window.top / parent.location / parent.document を使わない)
- Cookie を使わない。保存が要るときは localStorage をそのまま使ってよい(NARCER 側で動くようにしてあります)
- キーボードでもタッチでも遊べるようにする。操作の説明は画面の中に短く書く
- 1〜3分で1回遊べる長さ。スコアかクリアの区切りをつける

【 に必ず入れる】


ゲームの題名










【スマホの操作(おすすめの形)】
- 十字キーの絵は描かない。画面の左半分をなぞって動かす(触った所が中心・指をずらした方向へ進む・離すと止まる)
- 画面の右半分をタップで決定。強く払う(24px 以上動かす)と「戻る」
- ボタンを置くなら画面の端から 44px 以上離す(iPhone の端は OS が取ってしまう)

【できあがり】
完成した HTML の全文を、そのままコピーできる形で1つ出してください。説明は最後に3行だけ。

つくってほしいゲーム:(ここに書く。例:雪原で獣を狩って料理するサバイバル)
雰囲気:(ここに書く。例:ドット絵・静かな音・寒色)
絵や音のファイルを使いたいときは。 フォルダごと ZIP にして送れます(中に index.html を入れてください)。NARCER が受け取ったときに1つのファイルにまとめます。three.js・p5.js・Phaser など有名なライブラリも、決められた配布元(cdnjs・jsDelivr・unpkg)から読む書き方ならそのまま使えます。くわしくは下の表。

スマホしか無い場合

ChatGPT や Claude のアプリでも同じ文が使えます。できあがった HTML は次の手順でファイルにします。

Roblox・Unity で作ったゲームも出せます

NARCER が預かるのは HTML のゲームだけですが、ほかの作品も「作品ページ」を作れます。ゲーム本体は送りません。遊べる URL と画像があれば十分です。

よそで遊べる

Roblox・Steam・App Store・Google Play・自分のサイトなど。NARCER の作品ページから、その場所へ送ります。

まだ遊べない

町だけ作った、戦闘だけ試した、でも出せます。開発中として並び、フォローした人に更新が届きます。

作ったものは何でも

制作環境(Unity・Godot・Unreal・ツクールなど)と、遊ぶ場所は別々に選びます。配る先が変わっても作品ページはそのままです。

出し方:投稿ページで「外で遊ぶゲーム」を選ぶだけ。制作環境 → 遊ぶ場所 → 情報 → 送る、の4手順です。

STEP 2ファイルにする

AI が書いた HTML を、拡張子 .html のファイルとして保存します。うまくいかないときは、保存せずに次の手順で「貼り付け」でも出せます。

パソコン(Windows)

AI の答えのコードをコピー → メモ帳を開いて貼り付け → 「名前を付けて保存」→ ファイルの種類を「すべてのファイル」にして、名前を game.html、文字コードを UTF-8 にして保存。

Mac

テキストエディットを開き、メニューの「フォーマット → 標準テキストにする」を選んでから貼り付け。game.html という名前で保存します。

iPhone・Android

保存しなくて大丈夫です。コードをコピーしたまま次の手順へ進み、投稿ページの「貼り付けて送る」欄に貼ってください。

ダウンロードできる AI もあります。 ChatGPT でファイルとして出してもらった場合は、その .html をそのまま使えます。ZIP で受け取った場合も、そのまま送れます。

STEP 3出す

投稿ページを開く

narcer.com の「投稿する」を開きます。登録はしなくても出せます。

ファイルを落とす、または貼る

枠の中に .html(または ZIP)を落とすか、スマホなら下の欄にコードを貼ります。落とした瞬間に自動検査が走り、10項目の結果が出ます。

その場で試し遊びする

次の画面で、本当に narcer.com で動く形のまま遊べます。ここで動けば、出したあとも同じように動きます。カバー画像を選ばなければ、この時の画面が自動でカバーになります。

題名などを書いて送る

題名・作者名・一言。あとは「投稿する」を押すだけ。人が中身を見てから並びます(ふつう1日以内)。

自分のものにする(おすすめ)

送ったあとの画面から登録すると、その投稿があなたのものになります。セーブが効くようになり、次からは送った瞬間に並び、あとから新しい版に差し替えられます。

AI に送信までやってもらう

Claude Code や Codex のように、パソコンの中でファイルを扱える AI を使っている場合は、この文だけで投稿まで終わります。ふつうのチャット AI では実行できないので、上の手順で出してください。

ファイルを扱える AI に貼る文投稿まで代わりにやってもらう
このゲームのファイルを NARCER に投稿して。やり方は https://narcer.com/llms.txt に書いてある。
読めないなら次を実行して(元のファイルを送ること。畳んだ後のファイルではなく):
curl -sS -F "file=@game.html" https://narcer.com/api/submit
返ってきた JSON の id と state と message を教えて。
自動検査(checks)で ng があれば、その項目を直してからもう一度送って。

できること・できないこと

投稿されたゲームは、NARCER 本体から切り離した「砂場」の中で動きます。遊ぶ人を守るための決まりなので、ここだけは緩められません。

項目いまの上限おぼえかた
HTML 1ファイル10,000 KBまとめたあとの大きさ。ふつうのゲームなら余裕があります
ZIP で送る12,000 KB中身は 400 ファイル・展開して 24 MB まで。index.html を入れる
カバー画像300 KB大きくても送るときに自動で縮みます。選ばなければゲーム画面が使われます
投稿の回数10分に3回書き込みは10分に12回まで
セーブ64 KB登録した作者のゲームだけ、遊ぶ人の端末に残ります
できる

canvas・WebGL・音

2D も 3D も動きます。音はコードで鳴らすか、ZIP に入れてください。

できる

保存(localStorage)

そのまま書いて大丈夫です。砂場では NARCER が肩代わりします。

できる

決まった配布元のライブラリ

cdnjs・jsDelivr・unpkg・Google Fonts。送るときに中に取り込みます。版は URL に固定してください。

できない

外への通信

fetch・XMLHttpRequest・WebSocket。順位や対戦は下の仕組みを使います。

できない

それ以外の外部ファイル

よそのサイトの画像・音・スクリプト。中に入れるか ZIP で送ってください。

できない

親ページを触ること

window.top・parent.location など。遊ぶ人を守るための線です。

守ってほしいこと

  • 自分が作った(AI といっしょに作った)ものだけ。他人の作品やキャラクターをそのまま使わない。
  • 遊ぶ人の情報を集めない、外へ送らない。
  • 成人向けは受け付けていません。
  • つくりかけは歓迎です。status を wip にしておけば、そういう作品として並びます。

セーブ・順位・通信対戦

どれも「外へ通信しない」まま使えます。ゲームは NARCER のページに頼むだけで、NARCER が代わりにやります。使いたいものだけ、AI への文に足してください。

セーブ(続きから遊べるように)

登録した作者のゲームでは、遊ぶ人の端末に記録が残ります。この関数を使うと、NARCER の外(自分のパソコンで開いたとき)でも同じように動きます。

セーブAI への文に足す
保存には次の関数を使ってください(NARCER のセーブの橋。外では localStorage に落ちます):
var NS={save:function(k,v){try{localStorage.setItem(k,JSON.stringify(v));}catch(e){}try{parent.postMessage({narcer:'save',key:k,value:v},'*');}catch(e){}},
  load:function(k,cb){var v=null;try{v=JSON.parse(localStorage.getItem(k));}catch(e){}var done=false;function fin(x){if(done)return;done=true;cb(x==null?v:x);}
    try{var h=function(e){if(e.data&&e.data.narcer==='load'&&e.data.key===k){removeEventListener('message',h);fin(e.data.value);}};addEventListener('message',h);
    parent.postMessage({narcer:'load',key:k},'*');setTimeout(function(){removeEventListener('message',h);fin(null);},300);}catch(e){fin(null);}}};
使い方: NS.load('hi', function(v){ hi = v || 0; });   NS.save('hi', hi);
1ゲームあたり 64 KB まで。

順位表(みんなの点数)

ゲームごと・モードごとの順位を NARCER が持ちます。1人1行で、その人の最高点だけが残ります。作者本人の点は順位に入りません。

ランキングAI への文に足す
得点は NARCER の順位表に送ってください(fetch は使わない):
var NR={send:function(mode,score,pid){try{parent.postMessage({narcer:'score',mode:mode,score:score,pid:pid},'*');}catch(e){}},
        get:function(mode,pid){try{parent.postMessage({narcer:'ranking',mode:mode,pid:pid},'*');}catch(e){}},
        on:function(cb){addEventListener('message',function(e){if(e.data&&e.data.narcer==='ranking')cb(e.data);});}};
使い方: NR.on(function(r){ 順位表を描く(r.top, r.me); });   NR.send('main', score, pid);
pid は端末ごとの合言葉(英数6〜40字)を自分で作ってセーブに残す=同じ人だと分かるようにするため。
返事は {top:[{name,score,me}], me:{rank,score}, total}。

通信対戦・通信交換

合言葉(6桁)で部屋を作り、友達とつながります。同じ部屋の全員に同じ「乱数の種」が配られるので、両方の端末で同じ計算をすれば結果がぴったり合います。相手の手を待つターン制に向いています。

ネット対戦AI への文に足す
通信対戦は NARCER の中継を使ってください(ゲームは外へ通信しない):
var NS=NS||{}; NS.net={_h:{},on:function(ev,fn){(this._h[ev]=this._h[ev]||[]).push(fn);},
  create:function(max){parent.postMessage({narcer:"net",op:"create",max:max||2},"*");},
  join:function(code){parent.postMessage({narcer:"net",op:"join",code:String(code)},"*");},
  send:function(data,to){parent.postMessage({narcer:"net",op:"send",data:data,to:to},"*");},
  leave:function(){parent.postMessage({narcer:"net",op:"leave"},"*");}};
addEventListener("message",function(e){var d=e.data;if(!d||d.narcer!=="net")return;(NS.net._h[d.ev]||[]).forEach(function(f){f(d);});});

届く出来事:
  room {code,seed,host,players,you}  部屋の姿。code を画面に出して相手に伝える。seed は全員同じ乱数の種
  joined {player} / left {pid}       誰かが入った/出た
  away {pid} / back {pid}            相手の回線が切れた/戻った(120秒以内なら同じ人として戻る)
  msg {from,data,seq}                相手から届いたデータ
  error {code,message}               no_room(合言葉が違う)/ room_full など
つくり:「部屋を作る」で code を表示 → 相手が「部屋に入る」で入力 → 手番ごとに自分の手だけ send →
両方が相手の手を受け取ってから、同じ seed で同じ計算をする。1通 4,096 バイト・1秒に20通まで。
交換もできます。 同じ部屋で「渡すもの」を送り合い、両方が「これでいい」を押したら成立、という作りにしてください。途中で相手が切れたら(away か left)何も動かさないのが安全です。

止まったときは

自動検査で赤が出ても、壊れたわけではありません。ほとんどは書き方を少し変えるだけで通ります。投稿ページには「直し方を AI に頼む文」が自動で作られるので、それを貼るのが一番早い方法です。

外へ通信するコードがあります
fetch や XMLHttpRequest が入っています。データを外から読む代わりに、JavaScript の中に直接書いてください。順位表を作りたい場合は、上の「ランキング」の関数を使います。
外部のファイルを読み込んでいます
よそのサイトの画像・音・スクリプトを読んでいます。ZIP にまとめて送るか、コードの中に入れてください。cdnjs・jsDelivr・unpkg・Google Fonts なら、そのままで大丈夫です。
親ページを触っています
window.top や parent.location が入っています。取り除いてください。セーブ・順位・対戦のための parent.postMessage は使えます。
大きすぎます
音や画像が重いのが原因です。曲は短いループにする、画像は小さくする、または ZIP で送ってください(サーバがまとめます)。
「ソースを見る」で保存したものを送ったら止まった
NARCER が中にまとめたライブラリが、あなたのコードとして検査されるためです。元のファイル(自分が作った HTML か ZIP)を送ってください。
スマホで画面が小さい/全画面にならない
作品ページの ▶ を押すと、その場で全画面で始まります。iPhone の Safari で検索バーが残る場合は、共有 → 「ホーム画面に追加」から開くと消えます。narcer:size(例 640x360)を書いておくと、画面いっぱいに広げやすくなります。

出したあと

新しい版に差し替える

作品ページの「持ち主の道具」から。前の版も残るので、戻すこともできます。

カバーを変える

画像を上げるか、「いまのゲーム画面をカバーにする」を押すだけ。

開発ログを書く

フォローしている人に届きます。つくりかけの経過も作品のうちです。

よその作品も紹介する

マイページのプロフィールから「外の作品」に5つまで。Roblox・アプリ・Steam など、NARCER に載せられない作品もリンクで見せられます。

取り下げる

いつでも一覧から外せます。消えるわけではないので、また戻せます。

困ったことがあれば フォーラムか、support@narcer.com まで。技術的な決まりの全文は llms.txt にあります(AI に読ませる用の1枚です)。

投稿ページを開く ほかの人の作品を見る

コピーしました