「七並べ名人戦」は、七並べの実力を競えるオンライン対戦サイトです。 勝敗だけでなく、継続的な実力を評価するためにレーティング制度を採用しています。
実力を測る指標として、以下のレーティングと段級位を設定しています。(あくまでこのサイト内での段位です。)
| 段級位 | レーティング |
|---|---|
| 5級 | 100 |
| 4級 | 150 |
| 3級 | 250 |
| 2級 | 500 |
| 1級 | 650 |
| 初段 | 1000 |
| 二段 | 1500 |
| 三段 | 2000 |
| 四段 | 2500 |
| 五段 | 3000 |
| 六段 | 3500 |
| 七段 | 4000 |
| 八段 | 4500 |
| 九段 | 5000 |
| 段級位 | 1位 | 2位 | 3位 | 4位 |
|---|---|---|---|---|
| 5~3級 | +40 | +10 | -10 | -20 |
| 2~1級 | +40 | +10 | -10 | -30 |
| 初段~二段 | +40 | +10 | -10 | -40 |
| 三段~五段 | +40 | +10 | -10 | -50 |
| 六段以上 | +40 | +10 | -10 | -60 |
月が替わる瞬間にレーティングが最も高いユーザーを、名人位とします。
パスワードは bcrypt によりハッシュ化して保存しています。 元のパスワードを復元することは不可能です。
接続人数が足りない場合は、CPUが対戦相手になることがあります。 なるべく、人間のプレイヤーとマッチングするように努力はしますが...
カード配布は完全ランダムで行われ、 すべてサーバー側で処理されるため、不正や改ざんはできません。
initGame() {
const deck = [];
const suits = ["H", "S", "D", "K"];
for (const s of suits) {
for (let n = 1; n <= 13; n++) {
deck.push(s + n);
}
}
deck.sort(() => Math.random() - 0.5);
this.players.forEach(p => {
this.hands[p] = [];
this.passes[p] = 0;
});
this.players.forEach((p, i) => {
this.hands[p] = deck.slice(i * 13, (i + 1) * 13);
});
// 7を即出し
for (const p of this.players) {
this.hands[p] = this.hands[p].filter(card => {
const suit = this.suitName(card[0]);
const num = Number(card.slice(1));
if (num === 7) {
this.table[suit][6] = card;
return false;
}
return true;
});
}
}