ð ã²ãŒã ãããã§ã¹ã仿§æž
æ¬ããã¥ã¡ã³ãã¯ãã²ã€ãŸã¶ãïŒOmoshiroGamePortalïŒ ã«ã²ãŒã ãæ²èŒã»é£æºããã¯ãªãšã€ã¿ãŒåãã«ãåã²ãŒã ã®æè¡ç¹æ§ã宣èšããããã® ãã²ãŒã ãããã§ã¹ãïŒmanifest.jsonïŒã ã®å
¬åŒä»æ§ãå®çŸ©ããŸãã
1. æŠèŠãšç®ç
ããŒã¿ã«ãµã€ãã§ã¯ãæ¥åžžã®ã¯ã€ãã¯å¯ŸæŠïŒã·ã³ãã«ãã¬ã€ïŒã«å ããŠãã倧äŒã¢ãŒãïŒ1on1ããŒãã¡ã³ãã1on1ç·åœãããç·åé äœã°ã©ã³ããªïŒã ãæäŸããŠããŸãã
åã²ãŒã ãã«ãŒãURLçŽäžã« manifest.json ãå
¬éããããšã§ãããŒã¿ã«åŽã¯ïŒ
- åå 人æ°ãéžæããã倧äŒãã©ãŒãããã«å¿ãã ãå®å šã«éã¹ãã²ãŒã ã®èªåãã£ã«ã¿ãªã³ã°ã ãè¡ããŸãã
- ããŒã æŠã²ãŒã ãæ€åºãããããŒç»é¢ã§ã®ããŒã ã¹ãããé
眮ã
teamIdã®èªåæ³šå ¥ãè¡ããŸãã - 察æŠçµæïŒåè ãé äœïŒãå ±éãšã³ãžã³ã§ååŸãããã©ã±ããé²è¡ãç·åé äœãã€ã³ãéèšãè¡ããŸãã
- äœè
ïŒ
creatorïŒããã«ã¿ãã°ç»é²ã®åæå€ã«äœ¿ããŸããäœè ããšã®ãã¬ã€å®çžŸã¯ãã«ã¿ãã°ã«ç»é²ãããäœè ã§éèšããŸãã
åããŠã®æ¹ã¯ Getting Started ããèªãããšãããããããŸããSDKæ¬äœã®API㯠Hitsumabushi SDK æè¡ä»æ§æž ãåç §ããŠãã ããã
ð¡ ã«ã¿ãã°å°åž³ãšã®éã:
manifest.jsonã¯ã¯ãªãšã€ã¿ãŒãã²ãŒã åŽã«é 眮ããæè¡ãããã§ã¹ãã§ããããŒã¿ã«äžèЧç»é¢ã§ã®è¡šç€ºããã¹ãããããžã»ããŒãã«ã©ãŒã»å ¬éç¶æ ïŒactive/draftïŒãªã©ã®ããŒã¿ã«åŽã¡ã¿ããŒã¿ã¯ãéå¶åŽã管çããã²ãŒã ã«ã¿ãã°ïŒCloud Firestoregamesã³ã¬ã¯ã·ã§ã³ïŒã«ãŠç®¡çã»èšå®ãããŸããå€éšã¯ãªãšã€ã¿ãŒãããŒã¿ã«ãžã²ãŒã ãæ²èŒããéã¯ãããŒã¿ã«éå¶è ã«ã²ãŒã URLïŒããã³manifest.jsonïŒãæåºããã ããããŒãšãªããŸãã
2. ãããã§ã¹ãã®é 眮ãšãã£ã¬ã¯ããªæ§æ
åã²ãŒã ã®ã«ãŒããã£ã¬ã¯ããªïŒå ¬éURLçŽäžïŒã«éçãã¡ã€ã«ãšããŠé 眮ããŠãã ããã
- URL:
https://<game-domain>/manifest.json - CORSèŠä»¶: ããŒã¿ã«ããã®
fetch()ãèš±å¯ãããããAccess-Control-Allow-Origin: *ãèšå®ããŠãã ããã
ãªããžããªå ã®çœ®ãå Žæ
my-games/
âââ package.json â éçºçšãæåºç©ã«ã¯å«ãŸããªã
âââ .claude/ â åäž
âââ games/
âââ my-first-game/
â âââ index.html
â âââ manifest.json
â âââ guide.md
â âââ game.test.js
âââ my-second-game/
âââ ...
1ãªããžããªã«äœã²ãŒã 眮ããŠãæ§ããŸããã ã²ãŒã ã1åãè€æ°ãã¯ãgames/ ã®äžã®ãã£ã¬ã¯ããªã1åãNåãã®éãã§ãããããŸããã
CLI㯠games/*/manifest.json ãæ¢ããŠå¯Ÿè±¡ã決ããŸãã1åããç¡ããã°äœãæå®ããå¿
èŠã¯ãªããè€æ°ãããšãã ã --game <gameId> ã§éžã³ãŸãïŒverify ã¯æå®ãç¡ããã°å
šã²ãŒã ãæ€æ»ããŸãïŒã
ãã£ã¬ã¯ããªå㯠manifest.json ã® gameId ãšäžèŽãããŠãã ããããã£ã¬ã¯ããªåããã®ãŸãŸå
¬éURLã«ãªãäžæ¹ãããŒã¿ã«ã®ã«ã¿ãã°ã¯ gameId ã§åŒããããããããšããããã€ã¯ã§ããŠããã®ã«ã«ã¿ãã°ãã蟿ããªããç¶æ
ã«ãªããŸãïŒverify ãæ€æ»ããŸãïŒã
ã«ãŒãç»åïŒthumbnail.pngïŒ
ããŒã¿ã«ã®ã²ãŒã äžèЧãšãããŒã®ã«ãŒãã«ã¯ãmanifest.json ãšåããã£ã¬ã¯ããªïŒgames/<gameId>/ïŒã® thumbnail.png ã衚瀺ãããŸãã
- 圢åŒ: PNGããã¡ã€ã«åã¯
thumbnail.pngåºå®ã§ãã»ãã®åœ¢åŒã»ãã¡ã€ã«åã¯èªãŸããŸããã - 瞊暪æ¯: 16:9ïŒæšå¥š 640Ã360ïŒãã«ãŒã㯠16:9 ã®æ ã§è¡šç€ºãããã¯ã¿åºããéšåã¯åãåãããŸãã
- ãã¡ã€ã«ãµã€ãº: 500KB 以äžã
- ç¡ãå Žå: ã«ãŒãã«ã¯ã²ãŒã ã®ããŒãã«ã©ãŒã䜿ã£ã代ããã®ã¢ã€ã³ã³ã衚瀺ãããŸããã²ãŒã ã¯åããŸãããäžèЧã§èŠåãã«ãããªããŸãã
3. ãããã§ã¹ã JSON ã¹ããŒã
ð åã»å¿ é ã»åæå€ã»ããã©ã«ãã®æ£æ¬ã¯ JSON Schema ã§ãã
https://milightpartner.jp/schemas/game-manifest-1.jsonæ¬æžã¯ãã®æå³ãšéçšã«ãŒã«ã説æãããã®ã§ãããã£ãŒã«ãã®åãåãåŸãå€ã«ã€ããŠæ¬æžãšSchemaãé£ãéãå Žåã¯ãSchemaãæ£ãšããŸãã
èšè¿°äŸïŒãã®ãŸãŸã³ããŒããŠäœ¿ããŸãïŒ
{
"$schema": "https://milightpartner.jp/schemas/game-manifest-1.json",
"gameId": "neon-target-rush",
"title": "ããªã³ã»ã¿ãŒã²ããã©ãã·ã¥",
"version": "1.0.0",
"players": {
"min": 2,
"max": 4,
"type": "variable",
"allowCpuFill": true
},
"teamBattle": {
"supported": true,
"mode": "two_teams"
},
"resultModel": {
"type": "single_winner",
"allowTie": false
}
}
åãã£ãŒã«ãã®æå³ã¯ §4 ãåç
§ããŠãã ãããå人æŠå°çšã®ã²ãŒã 㯠teamBattle ãçç¥ã§ããŸãã
3.1 ãšãã£ã¿ã§æ€èšŒããïŒæšå¥šïŒ
1è¡ç®ã® "$schema" ãæžããŠãããšãVS Codeçã®ãšãã£ã¿ãå
¥åè£å®ãšæ€èšŒãè¡ããŸãïŒè¿œå ã®èšå®ã»ããã±ãŒãžã¯äžèŠïŒããã£ãŒã«ãåã®ã¿ã€ããåæå€ã®èª€ãã人æ°ã®ç¯å²å€ãversion ã®åœ¢åŒäžæ£ãªã©ããããŒã¿ã«ã«æåºããåã«ãã®å Žã§åãããŸãã
npmããã±ãŒãžããããŒã«ã«åç §ããå Žåã¯ãã€ã³ã¹ããŒã«æžã¿ã®å®äœãæå®ã§ããŸãã
{
"$schema": "./node_modules/@milightpartner/hitsumabushi-sdk/schemas/manifest.schema.json"
}
CIã§æ€èšŒãããå Žåã¯ãä»»æã®JSON SchemaããªããŒã¿ïŒajvçïŒã«åããã¡ã€ã«ãæž¡ããŠãã ããã
4. ããããã£å®çŸ©
4.1 playersïŒãã¬ã€äººæ°ä»æ§ïŒ
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
min | number | Yes | æå°ç·ãã¬ã€ã€ãŒäººæ°ïŒ1ã8ïŒ |
max | number | Yes | æå€§ç·ãã¬ã€ã€ãŒäººæ°ïŒ1ã8ïŒ |
type | string | Yes | "fixed"ïŒåºå®äººæ°ïŒ ãŸã㯠"variable"ïŒå¯å€äººæ°ïŒ |
allowCpuFill | boolean | No | ã²ãŒã ãBotïŒCPUïŒæèããžãã¯ããµããŒãããŠãããïŒããã©ã«ã: falseïŒãtrue ã®å Žåããã¹ãã空ãã¹ãããã«CPUã远å å¯èœã |
CPUæèããžãã¯ã®åå:
allowCpuFill: trueã®å ŽåãCPUæèããžãã¯ã¯è©Šåé²è¡åœ¹ïŒP1ïŒã®ãã©ãŠã¶å ã§å®è¡ããŠãã ããïŒã¯ãªãšã€ã¿ãŒã¯if (Hitsumabushi.isGameMaster())ã®1è¡åå²ã§å¶åŸ¡ïŒãé²è¡åœ¹åææã¯ããŒã²ãŒã æ±ããšãªããããä»ãã¬ã€ã€ãŒãžã®åŒãç¶ãåŠçã¯äžèŠã§ãã
4.2 teamBattleïŒããŒã æŠä»æ§ïŒ
å人æŠå°çšã²ãŒã ã®å Žåã¯çç¥ããŸã㯠null ãæå®ããŠãã ããã
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
supported | boolean | Yes | ããŒã æŠããµããŒãããŠãããïŒtrueïŒ |
mode | string | Yes | ããŒã æŠã®åœ¢æ
ïŒ"two_teams" / "pairs" / "both" / "other" |
ããŒã æŠãšåå 人æ°ã®ã«ãŒã«ïŒããŒã¿ã«å ±éïŒ
- 奿°äººæ°ïŒ3, 5, 7人ïŒ: å人æŠã®ã¿éžæå¯èœïŒCPU远å ã§å¶æ°ç¹°ãäžããæã¯ããŒã æŠå¯èœïŒã
- å¶æ°äººæ°ïŒ2, 4, 6, 8人ïŒ:
4人: åäººæŠ / 2人Ã2ããŒã (2v2)6人: åäººæŠ / 2人Ã3ããŒã (2v2v2) / 3人Ã2ããŒã (3v3)8人: åäººæŠ / 2人Ã4ããŒã (2v2v2v2) / 4人Ã2ããŒã (4v4)
- å
¬åŒããŒã ID仿§:
team_a/team_b/team_c/team_d- â»è©Šåã«åºã
teamIdã®çµã¿åããã¯æ±ºãŸã£ãŠããŸããïŒ2ããŒã ã®è©Šåã§ãteam_aãšteam_bãšã¯éããŸããïŒãã²ãŒã ã§ã®ããŒã ã®åãæ¹ã¯ API ãªãã¡ã¬ã³ã¹ §3INIT_GAMEãèŠãŠãã ããã
- â»è©Šåã«åºã
4.3 resultModelïŒè©Šåçµæã®åïŒ
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
type | string | Yes | "single_winner" / "ranked" / "score" / "other" |
allowTie | boolean | No | åç¹ã»åŒãåãã蚱容ãããïŒããã©ã«ã: falseïŒ |
-
"single_winner": 1åïŒãŸãã¯1ããŒã ïŒã®åè ãè¿ãã²ãŒã ã -
"ranked": 1äœãNäœã®é äœé åãè¿ãã²ãŒã ïŒ4人察æŠããŒãã²ãŒã ãªã©ïŒã -
"score": åèªã®ç²åŸã¹ã³ã¢ãè¿ãã²ãŒã ã -
"other": åæãé äœãååšããªãã²ãŒã ïŒååãã¬ã€ã»ã³ãã¥ãã±ãŒã·ã§ã³ç³»ãªã©ïŒã- â»å€§äŒã¢ãŒãã§ã¯èªåçã«éžæè¢ããé€å€ãããŸãããã·ã³ãã«ãã¬ã€ïŒåçºã«ãŒã ïŒã§ã¯éåžžéããã¬ã€å¯èœã§ãã
-
allowTie: trueã宣èšããã²ãŒã ã¯ãåŒãåãã®å ±åã«Hitsumabushi.sendGameOver({ isTie: true, winnerPlayerId: null, ... })ã䜿çšããŠãã ããïŒSDKæè¡ä»æ§æž ã®sendGameOveråç §ïŒã
4.4 å®çžŸïŒachievementsïŒâ çŸç¶ãããã§ã¹ãã§ã¯å®£èšããŸãã
ð§ å®çžŸã宣èšãããã£ãŒã«ãã¯ãçŸåšã®ãããã§ã¹ãã¹ããŒãã«ã¯ååšããŸããã远å ããªãã§ãã ããïŒããŒã¿ã«ã¯æªç¥ã®ãã£ãŒã«ããç¡èŠããŸãããŸãJSON Schemaã¯æªç¥ã®ãã£ãŒã«ããæ€èšŒãšã©ãŒãšããŠå ±åããŸãïŒã
SDKã«ã¯ Hitsumabushi.unlockAchievement(achievementId) ãšããAPIãååšããŸãããããŒã¿ã«åŽã«åãå£ãå®è£
ãããŠããªããããçŸç¶ãã®APIã¯äœãè¡ããŸããããããã£ãŠå®çžŸIDã»è¡šç€ºåã»ã¢ã€ã³ã³ãããŒã¿ã«ãžç»é²ããææ®µãçŸç¶ãããŸããã
å®çžŸæ©èœãå®è£
ããæ®µéã«ãªã£ãæç¹ã§ãæ¬ä»æ§æžã« achievements ãã£ãŒã«ãã远å ããŸãïŒãããŸã§ã¯æªãµããŒãïŒã詳现㯠SDKæè¡ä»æ§æž ã® unlockAchievement ãåç
§ããŠãã ããã
4.5 creatorïŒäœè
ïŒ
| ãã£ãŒã«ã | å | å¿ é | 説æ |
|---|---|---|---|
creator | string | NoïŒã³ãã¥ããã£æ ã®æ°èŠã²ãŒã ã§ã¯å¿ é ïŒ | äœè ã®GitHubãŠãŒã¶ãŒåã |
äœè ã衚ãå€ã§ããã©ã®æ²èŒçµè·¯ã§ãæžããŠãã ããã
- ããŒã¿ã«: ã«ã¿ãã°ã«ã²ãŒã ãç»é²ãããšãã®äœè
ã®åæå€ã«äœ¿ããŸããäœè
ããšã®ãã¬ã€å®çžŸïŒè©Šåæ°ã»ãã¬ã€æéã»éãã äººã®æ°ïŒã¯ãã«ã¿ãã°ã«ç»é²ãããäœè
ã§éèšããŸãã倧äŒã®é©åå€å®ãã«ã¿ãã°ã®è¡šç€ºã«ã¯äœ¿ããŸããïŒè¡šç€ºåã¯
manifest.jsonã«ã¯æžããŸããïŒã - ã³ãã¥ããã£æ : æ°èŠã²ãŒã ã§ã¯å¿
é ã§ããPRäœæè
ãšã®ç
§åãªã©ãæžããŠããå€ã®èŠçŽã¯
hitsumabushi-community-gamesã® CONTRIBUTING.md ãæ£æ¬ã§ããããŒã åïŒäŸ:milightpartnerïŒã§æžãæ¹æ³ã¯ãåãªããžããªã® README.md ã®ãããŒã ã§ã®æçš¿ (creators.json)ãã«ãããŸãã
æ§åã®
creatorGithubã¯å»æ¢ããŸããïŒ#618ïŒãæžããšã¹ããŒãéåã«ãªããŸãã
4.6 åãã£ãŒã«ãã誰ãèªãã
| ãã£ãŒã«ã | èªãåŽ |
|---|---|
$schema | ãšãã£ã¿ïŒè£å®ã»æ€èšŒïŒ |
gameId | ããŒã¿ã«ïŒmanifest ã®ãã£ãã·ã¥ïŒãverifyãã³ãã¥ããã£ã®PRæ€èšŒ |
title | ããŒã¿ã«ã®ã«ã¿ãã°ç»é²ïŒæ°ããã²ãŒã ã®ååã®åæå€ïŒ |
version | ã¹ããŒãæ€èšŒã®ã¿ïŒããŒã¿ã«ã¯èªã¿ãŸããïŒ |
players.min / players.max | ãããŒã倧äŒã®é©åå€å®ãã«ã¿ãã°ç»é²ïŒäººæ°è¡šèšã®åæå€ïŒ |
players.type | ãããŒïŒããŒã ã¹ãããã®é çœ®ïŒ |
players.allowCpuFill | ãããŒïŒCPU远å ïŒã倧äŒã®é©åå€å® |
teamBattle | ãããŒïŒããŒã ç·šæïŒã倧äŒã®é©åå€å® |
resultModel.type | 倧äŒã®é©åå€å®ãçµæè¡šç€º |
resultModel.allowTie | verifyïŒåŒãåãã®æ€æ»ïŒ |
creator | ããŒã¿ã«ã®ã«ã¿ãã°ç»é²ïŒäœè
ã®åæå€ãèšæž¬ã¯ã«ã¿ãã°ã®äœè
ã䜿ãïŒãã³ãã¥ããã£ã®PRæ€èšŒãverify |
5. æ¢åã®ã²ãŒã ãã manifest.json ãèµ·ãã
ãã§ã«åãã²ãŒã ãããããããããããã§ã¹ããäœãå Žåã®ææããã§ãã
ð€ AIã«è§£æãããå Žåã®å€æåºæº
- 人æ°å€å® (
players):
- ãã¬ã€ã€ãŒç®¡çããžãã¯ïŒé åé·ã
p1/p2ãconfig.playersã®åç §ïŒããmin/maxãç¹å®ãããmin === maxãªã"type": "fixed"ãå¹ ãããã°"type": "variable"ã- ã³ãŒãå ã«CPU/Botæèããžãã¯ã
allowCpuFillãããåŠçããªãå Žåã¯ãå®å šã®ããäžæŠallowCpuFill: falseãšããã- çµæåå€å® (
resultModel):
Hitsumabushi.sendGameOver()ã®åŒæ°ã調ã¹ãïŒ
winnerPlayerIdãæž¡ããŠãã â"single_winner"rankingsïŒé äœé åïŒãæž¡ããŠãã â"ranked"scoresïŒåŸç¹ïŒã®ã¿ã§åè æå®ãªã â"score"sendGameOverèªäœããªãïŒååã»äœæ¥ã²ãŒ â"other"- åŒãåãåŠçïŒ
isTie,winnerPlayerId: null,drawïŒã®æç¡ããallowTieãå€å®ã- ããŒã æŠå€å® (
teamBattle):
teamIdãããŒã ã¹ã³ã¢ãæ±ã£ãŠããã°"supported": trueãšããããŒã æ§æããmodeïŒtwo_teams/pairs/both/otherïŒãå€å®ãå人æŠãªãçç¥ãŸãã¯nullãgameId&title:
<title>ã¿ã°ã宿°åããã¡ã€ã«åãªã©ããæšæž¬ãç¹å®å°é£ãªå Žåã¯ä»®ã®ååãå ¥ãã確èªãä¿ããcreator:
- ã³ãŒãããã¯çµ¶å¯Ÿã«åãããŸããã åæã«åãããäœè ã®GitHubãŠãŒã¶ãŒåããŠãŒã¶ãŒã«ç¢ºèªããŠãã ããã
çæãã
manifest.jsonã«ã¯å¿ ã"$schema"ãå«ãããšãã£ã¿ã§æ€èšŒããŠãã ããïŒÂ§3.1ïŒã
6. 倧äŒãã©ãŒããããšã®é©åé¢ä¿
倧äŒã®è©Šåã®çš®ç®ã«åºããã®ã¯ãããŒã¿ã«ãäœã詊åã®åžã®åœ¢ã§éã¹ãŠãåæãé äœãè¿ãã²ãŒã ã ãã§ããããŒã¿ã«ã¯ããããããã§ã¹ãã ãããæ±ºããŸãïŒãããã§ã¹ããç¡ãããŸãã¯åããªãã²ãŒã ã¯åè£ã«åºããŸããïŒãæ¬ç¯ããã®èŠåã®æ£æ¬ã§ãã
6.1 ããŒã¿ã«ãäœã詊åã®åžã®åœ¢
N ã¯å€§äŒã®åå è ã®æ°ïŒãœãã¯äººæ°ããã¢ã¯ãã¢ã®æ°ïŒã§ãã
| ããŒãã¡ã³ãã»ç·åœãã | ç·åé äœïŒã°ã©ã³ããªïŒ | |
|---|---|---|
| ãœã | å人æŠã»2人 | å人æŠã»N 人 |
| ã㢠| 2ããŒã à 2人 | N ããŒã à 2人ããŸã㯠å人æŠã»2N 人 |
- ãã¢ã§å人æŠã®ã²ãŒã ãéã¶ãšããããã¢ã®å šå¡ãåžã«åº§ããŸãã1on1 ã®ã²ãŒã ãåãã¢ã®ä»£è¡šè ãæäœããçžæ¹ãçžè«ããåœ¢ã¯æªå®è£ ã§ãïŒ#744ïŒã
6.2 ã²ãŒã ããã®åœ¢ã§éã¹ãæ¡ä»¶
| åžã®åœ¢ | æ¡ä»¶ïŒãããã§ã¹ãïŒ |
|---|---|
| å人æŠã»k 人 | players.min †k †players.maxãã〠ããŒã æŠå°çšã§ãªã |
| c ããŒã à s 人 | teamBattle.supported ã trueãã〠players ãš teamBattle.mode ãã c ããŒã à s 人ãçµããïŒÂ§4.2 ã®åå²ã«ãŒã«ïŒ |
| å ±é | resultModel.type ã "other" ã§ãªã |
- ããŒã æŠå°çšãšã¯ã
teamBattle.supportedãtrueã§modeã"other"ã§ãªããplayers.minã4以äžã§players.typeã"fixed"ã®ã²ãŒã ã§ãããããŒãåãå®çŸ©ã§ããã®ã²ãŒã ãããŒã æŠã§å§ããŸããteamBattle.supportedã¯ãããŒã æŠãã§ããããšããæå³ãªã®ã§ãããã ãã§ã¯å人æŠã®åè£ããå€ããŸããã - CPU ã§è£ã: ãœãã®ã°ã©ã³ããªã ãã¯ãN ã
players.minã«å±ããªããŠããallowCpuFill: trueãªãåè£ã«åºãŸããããŒã¿ã«ã¯è¶³ããªãåžã« CPU ã座ãããŠmin人ã«ããCPU ãåã£ãé äœç¹ã¯æšãŠãŸããããŒãã¡ã³ãã»ç·åœããïŒ1察1ã®åœ¢åŒïŒãšããã¢ã®ã°ã©ã³ããªã§ã¯ CPU ãè¶³ããŸããã - ããŒã ã®æ°ãšäººæ°ïŒ
teamCount/teamSizeïŒã¯ãã¯ãªãšã€ã¿ãŒã宣èšãããã£ãŒã«ãã§ã¯ãããŸãããããŒã¿ã«ãplayers.minãmaxãšteamBattle.modeããå°ããŸãïŒå®è£ :packages/hitsumabushi-sdk/src/teamComposition.tsïŒã
äŸ
| ã²ãŒã | ãœãã®ããŒãã¡ã³ã | ãœãã®ã°ã©ã³ããªïŒ3äººïŒ | ãã¢ã®ããŒãã¡ã³ã | ãã¢ã®ã°ã©ã³ããªïŒ2ãã¢ïŒ |
|---|---|---|---|---|
| 2人ã»åäººæŠ | â | ÃïŒ3人ã座ããªãïŒ | à | à |
| 2ã4人ã»åäººæŠ | â | â | à | âïŒå人æŠã»4äººïŒ |
4人åºå®ã»allowCpuFill | à | âïŒCPU 1äººïŒ | à | âïŒå人æŠã»4äººïŒ |
4人åºå®ã»ããŒã æŠå°çšïŒtwo_teamsïŒ | à | à | â | âïŒ2ããŒã à 2äººïŒ |
7. ã¯ãªãšã€ã¿ãŒåãïŒã¹ã¿ã³ãã¢ãã³èµ·åãšããŒã¿ã«èµ·åã®äž¡ç«æ¹æ³
ã²ãŒã ã¢ããªãèªåWebãµã€ããGitHub Pagesçã§åäœïŒã¹ã¿ã³ãã¢ãã³ïŒå ¬éããå Žåã§ããã³ãŒãã1è¡ãã©ãŒã«ããã¯ãããã ãã§ãããŒã¿ã«é£æºãšå®å šäž¡ç«ã§ããŸãã
Hitsumabushi.init({
onStartMatch: (config) => {
// â ããŒã¿ã«ãã teamId ãæž¡ãããŠããã°ããã䜿ãïŒïŒããŒã¿ã«èµ·åæïŒ
const myPlayer = config.players?.find(p => p.id === config.localPlayerId);
if (myPlayer?.teamId) {
setMyTeam(myPlayer.teamId);
startGameDirectly();
return;
}
// â¡ åäœèµ·åæããããŒã æªæå®æã¯ã²ãŒã èªåã®UIã衚瀺ïŒ
showLocalTeamSelectUI();
}
});