Skip to content

xcd0/uno

Repository files navigation

UNO

ちょっと遊べるUNO

モチベーション

  • コマンドラインからUNOを遊びたい。
    • 操作も単純なためそんなに難しくないと思われる。
    • いい感じのCUIを作るのはそこそこ大変。
    • 最小UIといい感じのTUIを両方作る。
  • スマホからも遊べたら尚良し。
    • 公式アプリは、ギャンブル性が強い。ポイントが無くなったら課金が必要になる。課金誘導が強い。そのため安心して長時間遊びにくい。
    • ポイント制自体はダメではない。ポイントがマイナスになったら遊べないのがダメ。
    • ポイントが無くなって遊べなくなる不安が欲しいユーザーは公式アプリへ。
    • ネイティブ対応は面倒なのでPWAアプリにしたい。
  • とりあえず遊べればよい。リッチなUIは追々。

実装進捗

下記の実装予定を参考にtodoリストにしている。

  • 最小実装
    • とりあえず実装
    • サーバーの雛形実装
    • クライアントの雛形実装
    • 複数ルール定義
    • 基本エラーハンドリング実装
    • WebSocket導入
    • 最小限のREST APIを設計
    • 簡易的な認証の実装
    • サーバーの簡易実装
    • クライアントの簡易実装
    • クライアントのCUIとりあえず実装
    • クライアントのTUIとりあえず実装
      • コード整理。コア部分、サーバー部分、クライアント部分にパッケージを分ける。
    • クライアントのGUIとりあえず実装
    • 複数セッション対応
    • ルール実装 名前は適当。 [-] はとりあえず実装見送り項目。
      • 公式ルール
        • 公式基本ルール
          • [-] R.official.01 人数は2-10人程度を許容。4-6人を最適とする。
        • 新公式ルール
          • R.official.02 シャッフルワイルドカードの追加枚数
          • [-] R.official.03 ホワイトワイルドカードの追加枚数
        • 公式アプリクラシックルール
          • [-] R.official-app.01 ワイルドドロー4のチャレンジルールの際に、手札を見せて判定するのではなく、システムが判定する。
          • [-] R.official-app.02 1ターンの制限時間(秒)。0の時制限しない。
          • [-] R.official-app.03 1ゲームの制限時間(秒)。0の時制限しない。
          • [-] R.official-app.04 UNOコールを不要とする。 「ウノ」と叫ぶのを忘れた人が最後から2枚目のカードを捨てた瞬間から、次の人がカードを捨てる瞬間までの間に指摘されたら、罰になります。
          • R.official-app.05 2対2の対戦モードを有効にする
        • 公式アプリワイルドルール
          • R.official-app.06 公式アプリのワイルドルールを使用する。カード枚数が増える。
          • R.official-app.07 ドロー2にドロー2やドロー4、ドロー4にドロー4を重ねることができる。
          • R.official-app.08 ディスカードオールカードの追加枚数。各色枚数。
        • 公式アタックエクストリームルール
          • R.official-attack.01 公式アプリのアタックエクストリームルールを使用する。
          • R.official-attack.02 引札の数をランダムにする。
          • R.official-attack.03 引札の最大枚数。5枚くらい?
          • R.official-attack.04 ヒット2カードの追加枚数。
          • R.official-attack.05 ワイルドヒット4の追加枚数。
          • R.official-attack.06 ワイルドアタックアタックカードの追加枚数。
      • 日本UNO協会競技ルール
        • R.jua.01 手札の枚数を制限する。
        • R.jua.02 手札の枚数制限最大値。
        • R.jua.03 同じ数字かつ同じ色のカードの同時出しルールを許可する。(上がる際にはUNOコールが必要、コールなしの場合1枚しか出せない、アクションカードは禁止)
        • R.jua.04 数字カードのポイント計算を一律に5点としてカウントする。
        • R.jua.05 ドロー2にドロー4が重ねられたとき、チャレンジするためには手札に場の色と同じ色のドロー2を必要とする。
      • ALGORI大会ルール
        • R.algori.O1 ALGORIルールの開始方法を使用する。
        • R.algori.O2 不正操作時にカードを戻し、2枚引き、ターンをスキップするルールが有効か
        • R.algori.O3 10周スキップした場合全員敗者とする
        • R.algori.O4 ワイルドチャレンジが成功した時、ワイルドドロー4を手札に戻す
        • R.algori.O5 一定周スキップした場合全員敗者とするスキップ周回数。0の時無効。
      • ハウスルール
        • R.house-jp.01 (ドローの効果以外で)引いた場合でも元の手札から出すことを許可。
        • R.house-jp.02 記号カードでの勝利を禁止する。
        • R.house-jp.03 ゲームを最後の1人まで継続する。
        • R.house-jp.04 引いた直後のドロー2またはドロー4をすぐに出すことを禁止する。
        • [-] R.house-jp.05 同じ色の数字の連番のカードの同時出しルールを許可する。(上がる際にはUNOコールが必要、コールなしの場合1枚しか出せない、アクションカードは禁止)
        • [-] R.house-jp.06 同じ数字で任意の色のカードの同時出しルールを許可する。(上がる際にはUNOコールが必要、コールなしの場合1枚しか出せない、アクションカードは禁止)
        • [-] R.house-jp.07 同時出しルールが許可されている状態で、UNOコールなしで上がることを許可
  • 中期目標
    • 詳細なエラーハンドリング実装
    • SSL対応
    • クライアントのCUIまあまあ実装
    • クライアントのGUIまあまあ実装
  • 長期目標
    • 多言語対応
    • 商用品質のセキュリティ対策
    • 商用品質のスケーラビリティのあるインフラ構築
    • クライアントの商用品質のリッチなGUI実装

実装予定

ざっと書いたものをchatgptにまとめてもらった。

最小実装(開発者のみ)

  1. 基本的なエラーハンドリングの実装:
    • シンプルなエラーレスポンスを返すことで、開発中のデバッグが容易になります。
  2. リアルタイム通信の基本構築:
    • WebSocketを初期段階で導入し、UNO!のコールなどリアルタイム性が要求される機能の基盤を作ります。
  3. サーバーの基本的な通信ロジック実装:
    • 最小限のREST APIを設計し、基本的なゲーム進行が可能になるようにします。

初期対応項目(身内の数人程度のユーザー)

  1. クライアントの認証強化:
    • 簡易的なトークンベース認証を導入し、セキュリティを強化します。
  2. 複数のゲームセッション管理:
    • 複数セッションを同時に管理できるようにサーバーのロジックを拡張します。
  3. ミニマルUIの開発:
    • コマンドラインと基本的なWebインターフェースを開発し、ユーザーの操作性を向上させます。

中期対応項目(リリース後、同一言語の不特定多数のユーザー)

  1. 詳細なエラーハンドリングの実装:
    • クライアントとサーバー間で発生するすべてのエラーケースを洗い出し、適切に対応するロジックを実装します。
  2. 通信のセキュリティ強化:
    • HTTPSの導入を検討し、データの暗号化を行います。
  3. 見やすいUIへの拡張:
    • よりインタラクティブで視覚的に魅力的なWebインターフェースを開発します。

長期対応項目(多言語ユーザー、有料サービスとしての展開)

  1. 多言語サポート:
    • アプリケーションの国際化(i18n)と地域化(l10n)を行い、複数言語でのサービス提供を可能にします。
  2. 高度なセキュリティ機能の導入:
    • より高度な認証メカニズム(OAuth、二要素認証など)を導入し、有料サービスとしてのセキュリティ基準を満たします。
  3. 商用レベルのインフラ構築:
    • スケーラビリティと高可用性を備えたインフラストラクチャを構築し、商用レベルのトラフィックとデータ処理に対応します。

About

コマンドライン上で遊べるUNO

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages