第18章. ゲーム
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
プレビュー
この章では、簡単なゲームと、ウェブエンドポイントが複数のステップにわたってユーザと対話する方法を示します。 このプロセスは、これまで見てきたような、ワンショットのリクエスト/レスポンスのウェブエンドポイントとは異なります。
ゲームロジックを分割する
誰が何をするのか、誰が何をどこに保管するのか。クライアントなのか、サーバなのか。ウェブはステートレスなので、クライアントがサーバを呼び出すたびに、サーバは合計記憶喪失になり、このクライアントは見たことがないと言い張る。 だから、どこかにステートを保持する必要がある。ゲームのステップをまたいで保持されるデータで、それらをひとまとめにするのだ。
クライアント側で完全にJavaScriptでゲームを書いて、すべての状態をそこに保持することもできる。 もしJavaScriptをよく知っているなら、それは良い解決策だが、もし知らないなら(Pythonの本を読んでいるのだから、その可能性はある)、Pythonにも何かできることを与えよう。
極端な話、サーバーを多用するアプリケーションを書くこともできる。最初のウェブ呼び出しで、この特定のゲームのための明確なIDを生成し、その後のゲームステップでそのIDを他のデータとともにサーバーに渡し、変化するすべての状態をデータベースのようなサーバー側のデータストアで管理する。
最後に、いわゆるシングルページアプリケーション(SPA)において、クライアントとサーバーのWebエンドポイント呼び出しのシーケンスとしてゲームを構成することもできる。 SPAを記述する場合、通常、JavaScriptがサーバーにAjaxコールを行い、Webレスポンスでページ全体を表示するのではなく、ページの一部をリフレッシュすることを目標とする。 クライアントのJavaScriptとHTMLが作業の一部を行い、サーバーがロジックとデータの一部を処理する。
ゲームデザイン
まず、どんなゲームなのか?簡単なWordleのようなゲームを作るが、cryptid.dbデータベースの生物の名前だけを使う。 これで、Wordleよりもかなり簡単になる。特に、カンニングして付録Bを見ればわかる。
私たちは、上記の最終的でバランスの取れたデザインアプローチを採用する:
-
クライアントには、ReactやAngular、あるいはjQueryのような有名なJavaScriptライブラリの代わりに、バニラJavaScriptを使おう。
-
新しいFastAPIエンドポイント、GET
/gameがゲームを初期化する。これは暗号データベースからランダムなクリーチャーの名前を取得し、それをHTML、CSS、JavaScriptのJinjaテンプレートファイルに隠し値として埋め込んで返す。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access