ちょっと遊べる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にまとめてもらった。
- 基本的なエラーハンドリングの実装:
- シンプルなエラーレスポンスを返すことで、開発中のデバッグが容易になります。
- リアルタイム通信の基本構築:
- WebSocketを初期段階で導入し、UNO!のコールなどリアルタイム性が要求される機能の基盤を作ります。
- サーバーの基本的な通信ロジック実装:
- 最小限のREST APIを設計し、基本的なゲーム進行が可能になるようにします。
- クライアントの認証強化:
- 簡易的なトークンベース認証を導入し、セキュリティを強化します。
- 複数のゲームセッション管理:
- 複数セッションを同時に管理できるようにサーバーのロジックを拡張します。
- ミニマルUIの開発:
- コマンドラインと基本的なWebインターフェースを開発し、ユーザーの操作性を向上させます。
- 詳細なエラーハンドリングの実装:
- クライアントとサーバー間で発生するすべてのエラーケースを洗い出し、適切に対応するロジックを実装します。
- 通信のセキュリティ強化:
- HTTPSの導入を検討し、データの暗号化を行います。
- 見やすいUIへの拡張:
- よりインタラクティブで視覚的に魅力的なWebインターフェースを開発します。
- 多言語サポート:
- アプリケーションの国際化(i18n)と地域化(l10n)を行い、複数言語でのサービス提供を可能にします。
- 高度なセキュリティ機能の導入:
- より高度な認証メカニズム(OAuth、二要素認証など)を導入し、有料サービスとしてのセキュリティ基準を満たします。
- 商用レベルのインフラ構築:
- スケーラビリティと高可用性を備えたインフラストラクチャを構築し、商用レベルのトラフィックとデータ処理に対応します。