first commit
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
const B="http://localhost:3000";
|
||||
const api=async(a,u,n,x={})=>{const r=await fetch(B+"/api",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a,uid:u,name:n,...x})});const d=await r.json();if(!r.ok)throw new Error(a+": "+d.error);return d};
|
||||
(async()=>{
|
||||
const c1=await api("create",null,"Ana",{roomName:"Flow",addBot:false});
|
||||
const c2=await api("join",null,"Bil",{roomId:c1.room});
|
||||
console.log("create OK:",c1.room,"players:",c1.snap.players.map(p=>p.name).join(","));
|
||||
// wrong turn should be rejected
|
||||
try{await api("roll",c2.uid,"Bil");console.log("ERR: roll allowed out of turn!");}catch(e){console.log("turn guard OK:",e.message)}
|
||||
const st=await api("start",c1.uid,"Ana");
|
||||
console.log("start OK. phase:",(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap.phase);
|
||||
// Ana = starter. roll->peek->declare low (honest)
|
||||
const r1=await api("roll",c1.uid,"Ana");
|
||||
const r2=await api("peek",c1.uid,"Ana",{revealed:true});
|
||||
const st2=(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap;
|
||||
console.log("Ana dice (private):",JSON.stringify(st2.myDice),"turn:",st2.turnName);
|
||||
const d1=st2.myDice[0],d2=st2.myDice[1];
|
||||
// rank mirror
|
||||
const C=[[1,2],[1,3],[6,6],[5,5],[4,4],[3,3],[2,2],[1,1],[6,5],[6,4]],D=[[6,3],[6,2],[5,4],[5,3],[5,2],[4,3],[4,2],[3,2]];
|
||||
const rank=(a,b)=>{const x=Math.min(a,b),y=Math.max(a,b);for(let i=0;i<C.length;i++)if(C[i][0]===y&&C[i][1]===x)return i;const i=D.findIndex(c=>c[0]===y&&c[1]===x);return i>=0?10+i:-1};
|
||||
const truth=rank(d1,d2);
|
||||
const dec=await api("declare",c1.uid,"Ana",{rank:truth});
|
||||
const st3=(await api("rejoin",c2.uid,"Bil",{roomId:c1.room})).snap;
|
||||
console.log("declare OK. now phase:",st3.phase,"pending challenger:",st3.pending&&st3.pending.challenger===c2.uid,"lastClaim:",st3.lastClaim&&st3.lastClaim.label);
|
||||
// Bil trusts -> claim stands, Ana's turn again
|
||||
const p=await api("pass",c2.uid,"Bil");
|
||||
const st4=(await api("rejoin",c1.uid,"Ana",{roomId:c1.room})).snap;
|
||||
console.log("pass OK. turn now:",st4.turnName,"lastClaim persists:",st4.lastClaim&&st4.lastClaim.label);
|
||||
// chat
|
||||
await api("chat",c2.uid,"Bil",{text:"godt spil! 🍺"});
|
||||
console.log("FLOW COMPLETE ✅");
|
||||
})().catch(e=>{console.error("FLOW FAIL:",e.message);process.exit(1)});
|
||||
Reference in New Issue
Block a user