Djangoでブラックジャックを目指す 25 勝敗判定の不具合修正2
今回やること
勝敗結果の履歴への保存
前回まででやったこと
Djangoのプロジェクトを作る
start appでacounts ,game の2つのappのひな型を作成
accounts (app)にログイン用のCustomUserのモデルを作成
settings.pyを編集ログインユーザーを作成したCustomUserに変更
game に(app)にモデルをセットする
game (app)にforms.py(という空のファイル)を作成
formをセットする
allatuthを使ってログイン周りのアカウント部分を作成
ゲーム画面までのルーティング
表示用のベーステンプレートの複製
テンプレートとViewを連携させる
エントランスページ最低限の機能を考える
部屋作成機能 の実装
entrance → gameroom へのルーティング
カードの一覧作成処理
カードの一覧のIDを取得
カードリストをシャッフル→DB格納
初期デッキ生成処理の組み込み
ゲームボタンの生成
ゲーム準備完了ボタンの処理
全員参加意思が行われた時のターン進行処理
エントランス表示処理の変更
元の部屋に帰るメゾット追加
元の部屋の戻る処理の確認
2ターン目の流れの確認
カードをドローする処理の動作確認
フェイズを進行させる
手札の表示
点数処理
役の確認チェック
プレイヤーの行動処理
ルームに内のプレイヤー全員の手札を表示
全プレイヤーに得点情報の追加
勝利者判定
前回勝利者判定時の確認に使用したviewを説明
ゲームを終了し部屋を閉じる処理
退出処理の時の不具合とその解決方法の洗い出し
完成コード -履歴の保存
<appFolder>/views.py
#勝敗履歴の保存
def set_gamehist(room_id_num,all_player_handinfo):
hist_list= [];
for playerinfo in all_player_handinfo:
room_id=room_id_num
user = playerinfo.get('user_name')
hands= "";
for hand in playerinfo.get('hand'):
hands+= " "+hand.cleaned_data['mark'] + str(hand.cleaned_data['num']) ;
hist_list.append(GameHistroies(
room_id=room_id,
user_name=user,
hands=hands,
point=playerinfo.get('point'),
win=playerinfo.get('win'),
))
GameHistroies.objects.bulk_create(hist_list)
<appFolder>/models.py
class GameHistroies(models.Model):
room_id =IntegerField();
user_name=ForeignKey(CustomUser,on_delete=CASCADE);
hands=CharField(max_length=255);
point=CharField(max_length=255);
win=CharField(max_length=255);
解説 -履歴の保存
今回履歴として利用するmodelはGameHistroiesとする
このフィールドを一つずつ作成しオブジェクトを作成
それをリストに束ねてまとめてDBに登録します
引数として room_idと現時点のプレイヤーの手札情報を渡すset_gamehist(room_id_num,all_player_handinfo):
room_id は部屋のurlから手札情報は勝利者判定の回の記事で作成したものをつかう
この時点で1つ目のroom_idは準備OK
ルームプレイヤー全員の情報のリストから一人ずつ取り出して処理
for playerinfo in all_player_handinfo:
プレイヤー情報から紐づいたUSERNAME情報を分離
user = playerinfo.get('user_name')
これで2つ目のuser_nameの準備もOK
手札情報をループさせ 1行の文字列にする
for hand in playerinfo.get('hand'):
hands+= " "+hand.cleaned_data['mark'] + str(hand.cleaned_data['num']) ;
手札のカード1枚ずつループさせその情報を文字列として連結させる
ここが思ったより苦戦したfrom.objectから特定のカラムを取得するには
obj.cleaned_data['<columnName>']
とすると指定のカラムの値を取得できる
これで3つ目handsも完成
残りの2つはそのままplayer情報に含まれているのでそのまま利用して
hist_list.append(GameHistroies(
<column_key>=<column_value>
・
・
・,
))
としてとうろく
あとはbulk_createでまとめて登録するだけど完成
これで履歴の登録ができた
次回予定
最後にviewと連携して表示を変更する
この記事が気に入ったらサポートをしてみませんか?