Thirteenth floor

【Pythonでボードゲームシミュレーション】DOMEMO その2

2020年6月1日19:36, プログラミング

DOMEMOのレシピ

その2では、これから作るDOMEMOのレシピを紹介します。

DOMEMOを作ったことがない方はしっかり読みましょう。

材料

使うのは次の材料です!

  • Python3
  • オブジェクト指向プログラミング
  • DOMEMOのルール

これくらいですかね。用意はよろしいでしょうか。

手順の概要

  • DOMEMOのルールをプログラムに置き換える。
  • Python3で実装する。

これだけです。簡単ですね。

STEP1 DOMEMOの札を作成

ではここから、DOMEMOを作るための下ごしらえをしていきましょう。

DOMEMOに必要なのはなんでしょうか。一つ目は数字の書かれた札ですね。これをPythonで書いてみましょう。

domemo.pyというファイルに以下を記載します。


use_cards = [
    1,
    2, 2,
    3, 3, 3,
    4, 4, 4, 4,
    5, 5, 5, 5, 5,
    6, 6, 6, 6, 6, 6,
    7, 7, 7, 7, 7, 7, 7
]

はい、これで出来上がりです。

これはPythonのリスト型です。複数の値をひとつの変数として扱います。

例えば、DOMEMOの札を


card_of_one = 1
card_of_two = 2
...

などと定義していくのは面倒ですよね。2が2枚あることをどうやって表現したらいいんだろう、となりますし。なのでリスト型を使います。

STEP2 DOMEMOの札を配る

DOMEMOに必要な札を用意したら、今度はそれをプレイヤーと場へ配りましょう。

5人プレイを想定しているため、場には表4枚、裏4枚、プレイヤーはそれぞれ4枚の札を持ちます。

引き続きdomemo.pyというファイルに以下を記載します。


use_cards = [
...
]

open_cards = use_cards[:4]
closed_cards = use_cards[4:8]
player_cards = [8:]

ここではopen_cardsを場に表向きに置かれている札、closed_cardsを場に裏向きで置かれている札、player_cardsをプレイヤーへ配る札としています。

user_cards[:4]という表記はスライス操作と呼ばれ、リストの特定の中身を取得したいときに使用します。

例を見ましょう。

Python スライス操作

同じ色の数字がスライス操作によってもともとのリストから取得されます。

上記の例から

  • [:n]は0番目からn-1番目までのリストの中身を取得
  • [n:m]はn番目からm-1番目までのリストの中身を取得
  • [m:]はm番目から最後までのリストの中身を取得

という操作になります。

ですので、


open_cards = use_cards[:4] = > [1, 2, 2, 3]
closed_cards = use_cards[4:8] = > [3, 3, 4, 4]]
player_cards = [8:] = > [4, 4, 5, 5, ....,7, 7]

となります。

STEP3 DOMEMOの札をランダムに配る

スライス操作によって、数字を取り出すことはできました。

ここで問題になるのは、いつも同じ数字が場に表向きで置かれ、裏向きに置かれ、プレイヤーに配られるという点です。こんなことにはなりませんよね。

そのため、ランダムに配ることを考えます。

次のコードを見てみましょう。


import random

use_cards = [
...
]
random.shuffle(use_cards)

open_cards = use_cards[:4]
closed_cards = use_cards[4:8]
player_cards = [8:]

追加したのはimport randomrandom.shuffle(use_cards)です。

名前の通り、randomというモジュールを使用することで、use_cardsの中身をランダムにシャッフルすることができます。

importは特定のモジュールをこのファイル内で使用できるようにするための構文です。

randomの他にも便利なモジュールがあります。何か処理を行いたいと思ったときには、自分で実装するのではなく、Pythonに標準であるモジュール、またはほかの人が作ったモジュールがないかどうかインターネットで調べてみましょう。

標準モジュールであれば使い方はPythonのドキュメントに記載されています。

Pythonドキュメントの説明:random.shuffle

これでこのプログラムを実行するたびにシャッフルされ、数字がランダムに配られます。

結果を確認するためにprint関数を使いましょう。


import random

use_cards = [
...
]
random.shuffle(use_cards)

open_cards = use_cards[:4]
closed_cards = use_cards[4:8]
player_cards = [8:]

print(open_cards)
print(closed_cards)
print(player_cards)

これを実行すれば毎回異なる結果を得られるでしょう。

次回の話

ここまででだいぶPythonには慣れてきたでしょうか(まあ大丈夫でしょう)。

次からは材料の二つ目、オブジェクト指向プログラミングをやっていきましょう。

それでは。

執筆 G.M.

コメント

コメント投稿ページへ