このサイトについて

「七並べ名人戦」は、七並べの実力を競えるオンライン対戦サイトです。 勝敗だけでなく、継続的な実力を評価するためにレーティング制度を採用しています。

レーティングシステム

実力を測る指標として、以下のレーティングと段級位を設定しています。(あくまでこのサイト内での段位です。)

段級位レーティング
5級100
4級150
3級250
2級500
1級650
初段1000
二段1500
三段2000
四段2500
五段3000
六段3500
七段4000
八段4500
九段5000
レーティング初期値は 100 です。

レーティング計算方式

段級位 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;
    });
  }
}