ここに題名を入れる| トップ | ブレボ | 製作者 | 開発記録 |
本作では,Pythonのpygameを用いたRPGシステムをベースに, Go言語+PostgreSQLによるサーバ連携機能を統合しました. ユーザ登録・ログイン,JWTトークンによる認証管理,セーブデータのスロット保存, サーバ経由でのロード・削除までを一貫して行える設計となっています.
バックエンドにはGoを採用し,REST APIとして以下のエンドポイントを設けています.
POST /regist – ユーザ登録(PostgreSQLに保存)POST /login – JWTトークンを発行POST /save – セーブスロットデータを登録または更新POST /load – 最新セーブデータを取得DELETE /delete – スロット単位でデータを削除認証はJWTによって保護されており,リクエストヘッダのトークンを通じてユーザ識別を行います. これにより,不正なアクセスを防ぎながらもローカル環境から直接通信できる仕組みを実現しました.
func deleteHandler(w http.ResponseWriter, r *http.Request) {
username := r.Context().Value("username").(string)
var req struct { Slot int `json:"slot"` }
json.NewDecoder(r.Body).Decode(&req)
db.Exec(context.Background(),
"DELETE FROM saves WHERE user_id=$1 AND slot=$2", userID, req.Slot)
json.NewEncoder(w).Encode(map[string]string{"status":"deleted"})
}
ゲーム画面はpygameによって構築され,ログイン画面・オプション・セーブ・ロード画面を全て自作UIで構築しています.
特にコンティニュー画面では,7つのスロットに対応し,サーバから取得したセーブデータの日時を
datetime.fromisoformat()で整形して一覧表示する仕組みを導入しました.
また,頻繁なサーバ通信を避けるため,スロット情報は最初に一度だけ更新し, ユーザ操作ごとに必要であれば再読み込みを行う仕組みとしています.
ログイン画面
ロード画面
セーブ画面
本作では,プレイヤーがゲーム進行状況を自由に保存・復元できるよう, JWT認証 × PostgreSQL × Goバックエンドによるセーブシステムを実装しています. ログインしたユーザーごとにデータを安全に管理できる設計となっており, 以下のようなフローで動作します.
① クライアント側(フロントエンド)
プレイヤーがセーブするスロットを押すと,現在のゲーム状態(位置・アイテム・進行状況など)をJSON形式でバックエンドへ送信します.
リクエストにはJWTトークンが付与され,サーバ側で本人確認を行います.
② バックエンド(Go)
受信したリクエストからJWTを解析し,認証済みユーザー名を抽出します.
続いてデータベース上で該当ユーザーのuser_idを取得し,
指定スロット(例:1〜3)にセーブデータを登録します.
既存データがある場合は上書きし,保存完了後には確認用レスポンスを返します.
③ データベース(PostgreSQL)
セーブデータは別サーバ(2台目)のPostgreSQLで管理しています.
現状では片方のサーバがダウンするとセーブ機能が利用できなくなるという課題もありますが,
usersテーブルとsavesテーブルを分離することで
ユーザー情報とセーブデータを安全に紐付けています.
また,savesテーブルではuser_idとslotを複合キーとして設計し,
スロットごとの独立したデータ管理を実現しました.
ロード(読み込み)
指定したスロットのデータをデータベースから検索し,
JSON形式でクライアントに返します.
ゲーム側ではそのまま復元可能な構造となっており,
シンプルかつ汎用性の高い設計を実現しています.
削除
ユーザーとスロット番号を基にデータベースから対象レコードを削除します.
削除時にもJWT認証を経るため,
他ユーザーのデータを誤って削除することはありません.
現在はユーザ登録・認証・スロット管理が完成しており, 次の段階としてセーブデータ削除のUI統合と,アカウント管理機能の強化を予定しています.