Pythonで釣りゲームを作ろう 基礎編5 リスト

最終更新日:2024年10月29日(火)

1 もくじ

2 リストとは

img

リストは、変数をセットで管理できる便利なものです。 例えば、以下のようにキャラクターの持ち物を表すことを考えましょう。

item1 = "伝説の釣り竿"
item2 = "大容量のバケツ"
item3 = "丈夫な釣り糸"
item4 = "大きな釣り針"
item5 = "高級な釣り餌"

これを、リストを使うとスマートに記述できます。

items = ["伝説の釣り竿","大容量のバケツ","丈夫な釣り糸","大きな釣り針","高級な釣り餌"]


ここで、itemsがリストであり、,で区切られた一つ一つを要素と言います。


img

図の[0][1]の番号をインデックスと呼び、住所でいえば番地のようなものです。 リストの各要素を取り出したいときは、以下のようにインデックスで指定します。


items = ["伝説の釣り竿","大容量のバケツ","丈夫な釣り糸","大きな釣り針","高級な釣り餌"]
print(items[0])
print(items[1])
print(items[2])

実行結果

伝説の釣り竿
大容量のバケツ
丈夫な釣り糸


いちばん初めの要素のインデックスは、1ではなく0である点に注意!!



また、リストに含まれる要素の数を要素数と言い、len()を使ってその長さを取得できます。


items = ["伝説の釣り竿","大容量のバケツ","丈夫な釣り糸","大きな釣り針","高級な釣り餌"]
print(len(items))

実行結果

5



解答例

Challenge5-1: foods = ["すし","てんぷら","すきやき","やきにく","だしまき","ラーメン"]

Challenge5-2: print(foods[3]) #0始まりなので4番目は[4]ではなく[3]


3 2次元リスト

リストの中にリストを入れ子にすることもできます。これを、2次元リストといいます。


nums = [[1,2,3],[4,5,6],[7,8,9]]


見づらいので、以下のように改行することもできます。

nums = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]

このとき、2行目~4行目インデントを用いて見やすく書くのが一般的です。

先ほどと同様にインデックスを指定して取り出すと、中のリストが取り出せます。

nums = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print(nums[0])

実行結果

[1,2,3]


これをさらにインデックスで指定すれば、要素を取り出せます。

nums = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print(nums[0][2])

実行結果

3


このように、arr[n][m]の形で、2次元リストの要素を取り出すことができます。

2次元リストの使いみち

2次元リストはさまざまな場面で活用されていますが、そのひとつにこのようなrpgのマップがあります。

img

このマップは、マップチップと呼ばれる小さなパーツの組み合わせでできています。

img

そこで、どの場所にどのチップを置くかのデータを2次元リストで管理します。 例えば、0なら草原、1なら砂、3なら水というふうに対応しています。

map_data = [
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3],
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3],
    [1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    [1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    [2, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    [3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
]

このプログラムは、ゲームづくり編で実際に制作する予定です。