【Python】初心者でも簡単!2D宝探しゲーム | コピペで気軽にチャレンジ!

※本ページはアフィリエイト広告が含まれています

Python
スポンサーリンク

Pythonを使って簡単な2D宝探しゲームを作る方法をご紹介します。このゲームは、プログラミング初心者の方でも理解しやすく、さらにPythonの基本的な概念を学ぶのに最適です。

このゲームでは、5×5のグリッド(マス目)の中に隠された宝物を見つけ出すことが目標です。プレイヤーは座標を入力し、その位置が宝物の場所かどうかを確認します。宝物が見つからない場合は、宝物までの距離がヒントとして表示されます。

このゲームから学べること
  1. 2次元リスト(グリッド)の操作
  2. 関数の定義と使用
  3. ランダム値の生成
  4. ユーザー入力の処理
  5. 条件分岐
  6. ループ処理
  7. 数学的計算
  8. 文字列フォーマット
  9. デバッグ技術

Pythonの学習をより深めたい方へ:「【2024年最新版】Python講座で学べるプログラミングスクール10選を徹底比較」では、Python講座を提供する優秀スクールの比較と選び方をご紹介しています。自分に合ったスクールを見つけたい方は、ぜひチェックしてください。

それでは、コードを見ながら詳しく解説していきましょう。

スポンサーリンク

【Python】初心者でも簡単!2D宝探しゲーム  プログラムコード全体像

import random

def create_grid(size):
    return [[' ' for _ in range(size)] for _ in range(size)]

def place_treasure(grid):
    x, y = random.randint(0, len(grid)-1), random.randint(0, len(grid)-1)
    grid[y][x] = 'T'
    return x, y

def print_grid(grid, show_treasure=False):
    for row in grid:
        print('|' + '|'.join(cell if cell != 'T' or show_treasure else ' ' for cell in row) + '|')

size = 5
grid = create_grid(size)
treasure_x, treasure_y = place_treasure(grid)
attempts = 0

while True:
    print_grid(grid)
    x = int(input(f"X座標を入力してください (0-{size-1}): "))
    y = int(input(f"Y座標を入力してください (0-{size-1}): "))
    attempts += 1

    if x == treasure_x and y == treasure_y:
        print(f"おめでとうございます!{attempts}回で宝物を見つけました。")
        break
    else:
        distance = abs(x - treasure_x) + abs(y - treasure_y)
        print(f"宝物まであと{distance}マスです。")

print_grid(grid, show_treasure=True)

ゲームの遊び方

ゲームの遊び方
  • STEP1
    プログラムを実行すると、5×5のグリッドが表示されます。
  • STEP2
    X座標(0-4)を入力し、Enterキーを押します。
  • STEP3
    Y座標(0-4)を入力し、Enterキーを押します。
  • STEP4
    入力した座標が宝物の位置でない場合、宝物までの距離が表示されます。
  • STEP5
    2-4の手順を、宝物を見つけるまで繰り返します。
  • STEP6
    宝物を見つけると、何回目の試行で見つけたかが表示され、ゲームが終了します。

ゲーム結果

まずはゲームを楽しんでください!

スポンサーリンク

【Python】初心者でも簡単!2D宝探しゲーム  プログラムの詳細解説

それでは、コードを詳しく解説していきましょう。

  1. 必要なモジュールのインポート
  2. グリッドの作成
  3. 宝物の配置
  4. グリッドの表示
  5. ゲームの初期設定
  6. メインゲームループ

1. 必要なモジュールのインポート

import random
  • import random:Pythonの標準ライブラリであるrandomモジュールをインポートします。
  • このモジュールは、乱数生成や、リストからのランダムな要素の選択などの機能を提供します。
  • 今回のゲームでは、宝物の位置をランダムに決定するために使用します。

2. グリッドの作成

def create_grid(size):
    return [[' ' for _ in range(size)] for _ in range(size)]
  • def create_grid(size):はcreate_gridという名前の関数を定義します。この関数はsizeというパラメータを受け取ります。
  • reiturn [[‘‘ for _ in range(size)] for _ in range(size)]:]
    1. これは二重のリスト内包表記です。
    2. 外側の[…for _ in range(size)]は、size回繰り返してリストを作成します。これが行を表します。
    3. 内側の[‘‘ for _ in range(size)]は、各行にsize個の空白文字 ‘ ‘を持つリストを作成します。これが列を表します。
    4. _はPythonの慣習で、ループ変数を使用しない場合に用います。
  • 結果として、size×sizeの2次元リスト(グリッド)が作成されます。各要素は空白文字で初期化されています。

3. 宝物の配置

def place_treasure(grid):
    x, y = random.randint(0, len(grid)-1), random.randint(0, len(grid)-1)
    grid[y][x] = 'T'
    return x, y
  • def place_trasure(grid):はplace_treasure という名前の関数を定義します。この関数はgrid(グリッド)を引数として受け取ります。
  • x, y = random.randint(0, len(grid)-1), random.randint(0, len(drid)-1):
    • random.randint(a, b)は、a以上b以下のランダムな整数を返します。
    • len(grid)-1は、グリッドの最大インデックスを表します(0から始まるため、-1しています)。
    • この行で xとyの座標をランダムに選択しています。
  • grid[y][x] = ‘T’は選択された選択されたランダムな位置に宝物を表す’T’を配置します。
  • return x, yは宝物の位置(x, y)を返します。これにより、後でこの位置を参照できます。

4. グリッドの表示

def print_grid(grid, show_treasure=False):
    for row in grid:
        print('|' + '|'.join(cell if cell != 'T' or show_treasure else ' ' for cell in row) + '|')
  • def print_grid(grid, show_treausure=False):はprint_grid関数を定義します。gridとshow_treasure(デフォルトはFalse)を引数として受け取ります。
  • for row in grid:はグリッドの各行に対してループを実行します。
  • print(‘ | ‘ + …+ ‘ |’)は各行を|で囲んで表示します。
  • ‘ | ‘.join(…)は各セルの間に|を挿入します。
  • cell if cell != ‘T’ or show_treasure else ‘‘ for cell in row:
    • これは条件付きリスト内包表記です。
    • cell != ‘T’ or show_treasureが真の場合、セルの内容をそのまま表示します。
  • それ以外の場合(つまり、セルが’T’でshow_treasurがFalseの場合)、空白を表示します。
  • これにより、ゲーム中は宝物を隠し、ゲーム終了時に宝物の位置を表示できます。

5. ゲームの初期設定

size = 5
grid = create_grid(size)
treasure_x, treasure_y = place_treasure(grid)
attempts = 0
  • size = 5はグリッドのサイズを5×5に設定します。
  • grid = create_grid(size):createでcreate_grid関数を呼び出して、5×5のグリッドを作成します。
  • treaure_x, treasur_y = place_treaure(grid):_treasure treaure_x, treasur_y = place関数を呼び出して宝物を配置し、その位置をtreasur_xとtreasur_yに保存します。
  • attempts = 0:プレイヤーの試行回数を記録する変数を初期化します。

6. メインゲームループ

while True:
    print_grid(grid)
    x = int(input(f"X座標を入力してください (0-{size-1}): "))
    y = int(input(f"Y座標を入力してください (0-{size-1}): "))
    attempts += 1

    if x == treasure_x and y == treasure_y:
        print(f"おめでとうございます!{attempts}回で宝物を見つけました。")
        break
    else:
        distance = abs(x - treasure_x) + abs(y - treasure_y)
        print(f"宝物まであと{distance}マスです。")

print_grid(grid, show_treasure=True)
  • while True:無限ループを開始します。これは、宝物が見つかるまでゲームを続けるためです。
  • print_grid(grid):現在のグリッドの状態を表示します。
  • x = int(input(f”X座標を入力してください (0-{size-1}): “))
    • プレイヤーにX座標の入力を求めます。
    • input()関数は文字列を返すので、int()を使って整数に変換します。
    • f文字列を使用して、有効な座標範囲を動的に表示します。
  • y = int(input(f”Y座標を入力してください (0-{size-1}): “)):\
    • Y座標についても同様です。
  • attempts += 1:試行回数を1増やします。
  • if x == treasure_x and y == treasure_y: :プレイヤーが宝物の位置を当てたかチェックします。
  • 当たった場合、成功メッセージを表示し、breakでループを抜けます
  • else: 宝物が見つからなかった場合の処理です。
  • distance = abs(x – treasure_x) + abs(y – treasure_y):
    • abs()関数は絶対値を返します。
    • この計算はマンハッタン距離と呼ばれ、グリッド上の2点間の距離を表します。
  • 計算された距離をヒントとして表示します。
  • ループが終了したら、print_grid(grid, show_treasure=True)で宝物の位置を表示します。
  • random.randint()を使用して、予測不可能な要素をゲームに追加しています。
  • これは、ゲームの再現性を低くし、毎回新鮮な体験を提供するのに役立ちます。

一見、複雑そうに感じますが、

何がどの動きに使われているかを確認しながら作ってみましょう。

スポンサーリンク

【Python】初心者でも簡単!2D宝探しゲーム 発展的な課題

このゲームを基礎として、以下のような機能を追加してみるのも面白いでしょう。

  1. グリッドのサイズをプレイヤーが選択できるようにする
  2. 複数の宝物を配置する
  3. 移動回数の制限を設ける
  4. グラフィカルユーザーインターフェース(GUI)を追加する
  5. 難易度レベルを追加する(例:Easy, Normal, Hard)

今回、ゲームを作ってきてさらに難易度設定、Tkinterの使用方法など、ゲームにもっと面白い機能を作ってみたいときはプログラミングスクールで学ぶのもよい選択肢です。こちらの記事ではPythonの講座を集めたスクールを紹介しています「【2024年最新版】Python講座で学べるプログラミングスクール10選を徹底比較」のでPython講座を提供する優秀スクールの比較と選び方の参考にしてください。自分に合ったスクールを見つけたい方は、ぜひチェックしてください。

スポンサーリンク

【Python】初心者でも簡単!2D宝探しゲーム | コピペで気軽にチャレンジ!まとめ

このゲームで学んだこと
  1. 2次元リスト(グリッド)の操作: このゲームでは、2次元リストを使用してグリッドを表現しています。これにより、2次元データ構造の扱い方を学ぶことができます。
  2. 関数の定義と使用: create_grid(), place_treasure(), print_grid()などの関数を定義し、使用しています。これにより、コードの再利用性と可読性が向上します。
  3. ランダム値の生成: rondomモジュールを使用して、宝物の位置をランダムに決定しています。これは、ゲームやシミュレーションでよく使用される技術です。
  4. ユーザー入力の処理: input()関数を使用して、プレイヤーからの入力を受け取り、処理しています。
  5. 条件分岐: if文を使用して、プレイヤーの入力が正解かどうかを判断しています。
  6. ループ処理: whileループを使用して、ゲームの進行を制御しています。
  7. 数学的計算: マンハッタン距離(abs(x – treasure_x) + abs(y – treasure_y))を計算して、宝物までの距離を求めています。
  8. 文字列フォーマット: f文字列を使用して、動的に文字列を生成しています。
  9. デバッグ技術: print_grid()関数のshow_treasureパラメータを使用することで、開発中にデバッグしやすくなっています。

この2D宝探しゲームは、Pythonの基本的な概念を学ぶのに最適なプロジェクトです。グリッドの操作、ランダム値の生成、ユーザー入力の処理など、プログラミングの重要な要素を含んでいます。

このゲームを通じて、プログラミングの楽しさを体験しながら、実用的なスキルを磨くことができます。コードをコピー&ペーストして実行するだけでなく、自分なりにアレンジを加えてみることをお勧めします。例えば、グリッドのサイズを変更したり、複数の宝物を配置したり、グラフィカルインターフェースを追加したりすることで、さらに面白いゲームに発展させることができるでしょう。

この小さなプロジェクトを足掛かりに、より複雑で面白いプログラムの開発に挑戦してみてください。楽しみながら学ぶことが、プログラミング上達の近道です。

※本ページはプロモーションが含まれています。

Python
スポンサーリンク
meguをフォローする
WEBらぼ