ブラックジャックを目指す 20 全員の手札を取得
今回やること
ルームに内のプレイヤー全員の手札を表示する
前回までやったこと
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ターン目の流れの確認
カードをドローする処理の動作確認
フェイズを進行させる
手札の表示
点数処理
役の確認チェック
プレイヤーの行動処理進行
流れの確認
ルームを引数として取得
ルームからルーム内プレイヤーを取得
ルーム内プレイヤーのユーザー名を取得
ルーム内プレイヤーの手札の取得
辞書としてユーザー名と手札の組み合わせを取得
完成コード
<appFolder>/views.py
#room内のプレイヤの手札の全取得
def room_all_player_card(room):
room_players= RoomPlayers.objects.filter(room_id=room)
playerHandsList=[] #リストを作成してユーザーネームを加えて追加していく
for roomplayer in room_players :
hand = get_player_hand(room,roomplayer)
player = str(roomplayer.player_id.user_id)
dict= {'user_name':player,
'hand':hand}
playerHandsList.append(dict)
return playerHandsList
<appFolder>/template/<appjname>/gameroom.html 抜粋
{% for card in playerhand %}
<ul>
{{card.as_ul}}
</ul>
{% endfor %}
{% for room_user_info in roomplayerhand %}
{{room_user_info.user_name}}
{% for card in room_user_info.hand %}
{{card.as_p}}
{% endfor %}
{% endfor %}
解説 流れとの照らし合わせ
ルームを引数として取得
room_all_player_card(room):
ルームからルーム内プレイヤーを取得
room_players= RoomPlayers.objects.filter(room_id=room)
filter条件にroomのみを指定ですべてのルームプレイヤーを取得できる
複数形のクエリセットの取得になるので単体のプレイヤーごとの処理はfor文でループさせて処理する必要がある
ルーム内プレイヤーのユーザー名を取得
str(roomplayer.player_id.user_id)
Roomplayersのオブジェクトからユーザー名の取得は外部キーの外部キーとして取得することになる
もちろんuser_idからさらに.でつなげてnameでもいいしカスタムUSERならその特定のカラムでも指定し取得ができる
今回はUSERIDとしてアカウント情報を取得するがその名前はcustomUser オブジェクトの__str__ としてセットしてあるものをユーザー名として取得するようにした
ルーム内プレイヤーの手札の取得
hand = get_player_hand(room,roomplayer)
手札の取得は自分の手札を取得するメゾットをそのまま使用可能
メゾットは17で作成済みのものを利用
辞書としてユーザー名と手札の組み合わせを取得
dict= {'user_name':player,
'hand':hand}
上記のものをuser_nameとhandというkeyで保存する辞書としてそのまま追加する
表示確認
上記の結果をroomplayerhandとしてcontextに追加する
{% for room_user_info in roomplayerhand %}
{{room_user_info.user_name}}
{% for card in room_user_info.hand %}
{{card.as_p}}
{% endfor %}
{% endfor %}
roomplayerhandは全プレイヤーの情報が含まれているので
ユーザー名と手札の組み合わせの単体にまずfor文で取り出す
.user_nameでまずユーザ名を取り出し
handは複数カードの情報が含まれているのでさらにfor文を入れ子にして取得を行う
アクセス結果
名前の後そのプレイヤーの手札情報が表示されていることを確認
次回予定
勝利者判定ができれば
この記事が気に入ったらサポートをしてみませんか?