【マイクラ×Python】ハートを描くプログラムを改造!関数を使ってみよう

前回、Pythonを使って「ハート」をえがくプログラムを作りました。

でも、同じハートをちがう場所にたくさんえがきたいとき、どうしますか?
座標だけちがうプログラムを何度も書くのは、コードが分かりにくくなりますし、修正も大変です。

そこで今回は、関数を使って効率的にハートをたくさんえがくプログラムを作ってみましょう!

 

スポンサーリンク

前回のプログラムのおさらい

前回は、ハートを1つえがくプログラムを作りました。

import mcpi.minecraft as minecraft

mc = minecraft.Minecraft.create()

# プレイヤーの座標を取得
x, y, z = mc.player.getPos()

# ハートを描くスタート地点を設定
z += 5

# ハートの形を定義(2次元リスト)
# 1がブロックを置く場所、0は何も置かない
heart = [
    [0, 1, 1, 0, 1, 1, 0],
    [1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1],
    [0, 1, 1, 1, 1, 1, 0],
    [0, 0, 1, 1, 1, 0, 0],
    [0, 0, 0, 1, 0, 0, 0],
]

# ハートを描画
for row in range(len(heart)):
    for col in range(len(heart[row])):
        if heart[row][col] == 1: # 1の場所にブロックを置く
            mc.setBlock(x + col, y, z + row, 35, 14) # 赤い羊毛

このプログラムは、ハートの形を2次元のリストで作り、その形に合わせてブロックを置いています。

 

今回は、このプログラムを改造してハートを3つえがくプログラムを作ります。

その前に、関数の仕組みを確認かくにんしてみましょう。

関数は命令をひとまとめにして名前をつけたもの

関数とは、命令をひとまとめにして、何度でも使えるようにする仕組みです。同じような処理をくり返し使う場合に、関数としてまとめておくと便利です。

Python 関数

引数と戻り値

 

関数を使ってみよう

例として、下のかんたんなプログラムを見てみましょう。

def tashizan(num1, num2):
    print(num1, " + ", num2)
    num3 = num1 + num2
    return num3

kotae = tashizan(3, 9)
print("答えは", kotae)

このプログラムでは、2つの数字を足し算して答えを表示しています。

実行すると、以下のように表示されます。

3 + 9
答えは 12

 

関数を定義する

関数を使うには、まず「関数を定義する」必要があります。これは、命令をひとまとめにして準備する作業です。Scratchの「ブロック定義」と同じイメージです。

下のコードは、足し算をする関数を定義しています。

def tashizan(num1, num2):
    print(num1, ” + “, num2)
    num3 = num1 + num2
    return num3

関数の書き方は次のようになります。

def 関数名(引数, 引数, …):
    命令文
   
    return 戻り値

def の後に関数名を書きます。defはdefinition(定義)の略です。関数名の後にカッコをつけ、その中に必要なデータ(引数)を記述します。

関数の中の命令文の前には、半角スペース4つ(インデント)を入れてください。

 

関数を呼び出す

定義した関数を使うには、「関数を呼び出す」必要があります。

kotae = tashizan(3, 9)

この例では、tashizan(3, 9)が関数の呼び出し部分です。

関数の呼び出しは、次のように書きます。

関数名(引数, 引数, …)

 

引数は関数に渡す「材料」

引数(ひきすう)とは、関数にわたす値ですこの値を使って関数が処理を行います。引数は、関数名の後ろのカッコの中に記述します。

引数とは、関数を呼び出したときに引きわたされる値のことで、関数が処理するための材料です。関数名の後ろのカッコに引数を書きます。

def tashizan(num1, num2):

この場合、num1とnum2が引数です。関数を呼び出すときにわた、これらの引数に格納されます。

tashizan(3, 9)

このコード3num19num2わたますちなみに引数で使う変数(例:num1やnum2)は、関数の中だけで使えるローカル変数です。関数の外では使えません。

 

関数が処理した結果として返す「答え」

戻り値(もどりち)とは、関数が処理の結果として返す値です。

return num3

このコードでは、num3の値がもどとして返されています。returnを使うと、その時点で関数の処理は終了しゅうりょうし、呼び出し元にもどります。

もどを受け取るには、次のように書きます。

kotae = tashizan(3, 9)

この場合tashizan(3, 9)もど計算結果kotae代入ます

関数を使った簡単なプログラム

 

プログラムの改造:関数を使ってハートを3つ描く

前回のプログラムを改造してみましょう。完成したプログラムは以下の通りです。

import mcpi.minecraft as minecraft

def draw_heart(mc, x, y, z):
"""
ハートを描画する関数
:param mc: Minecraftオブジェクト
:param x: 描画開始のx座標
:param y: 描画開始のy座標
:param z: 描画開始のz座標
"""
# ハートの形を定義(2次元リスト)
heart = [
    [0, 1, 1, 0, 1, 1, 0],
    [1, 1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1, 1],
    [0, 1, 1, 1, 1, 1, 0],
    [0, 0, 1, 1, 1, 0, 0],
    [0, 0, 0, 1, 0, 0, 0],
]

# ハートを描画
for row in range(len(heart)):
    for col in range(len(heart[row])):
        if heart[row][col] == 1: # 1の場所にブロックを置く
            mc.setBlock(x + col, y, z + row, 35, 14) # 赤い羊毛

# メイン処理
if __name__ == "__main__":
    mc = minecraft.Minecraft.create()

    # プレイヤーの座標を取得
    x, y, z = mc.player.getPos()

    # ハートを描画する開始地点を設定
    z += 5

    for _ in range(3):
        # ハートを描画
        draw_heart(mc, x, y, z)
        # 次のハートの位置をずらす
        x += 8

 

改造ポイントの解説

関数を使って「ハートを描く処理」を整理

ハートえが処理draw_heartいう関数まとめます

ハートを描く処理を関数にまとめる

def draw_heart(mc, x, y, z):

ハートえが処理draw_heartいう関数まとめます

関数の中ではハートの形を2次元のリストで作り、その形に合わせてブロックを置く処理を実行します。

 

メイン処理

if __name__ == “__main__”: は、Pythonプログラムがどのように実行されているかを判定する条件式です。

このファイルが直接実行されたときだけ中の処理が動き、他のプログラムからインポートされた場合は実行されません。

プレイヤーの座標を取得

x, y, z = mc.player.getPos()

プレイヤー位置基準ハートえがはじます

 

ループでハートを3つ描く

for _ in range(3):
    draw_heart(mc, x, y, z)
    x += 8

ループを使って、draw_heart関数を3回呼び出します。x座標をずらして、ハートが横に並ぶようにしています。

ループを使って関数を3回呼び出す

 

実行してみよう!

関数を使ってハートを描くプログラム

このプログラムを「heart_shape2.py」という名前で保存します。

実行するプレイヤー位置から少しはな場所ハート3並んえがます

 

まとめ

引数に色を追加したプログラム

今回のプログラムでは、関数を使ってハート3えがプログラムプログラムを作りました。

関数とは、命令をひとまとめにして、何度でも使えるようにする仕組みです。

関数の定義

def 関数名(引数, 引数, …):
    命令文
   
    return 戻り値

関数の呼び出し

関数名(引数, 引数, …)
  • 引 数:関数わた
  • もど:関数が処理の結果として返す値

ぜひこのプログラムを改造してみましょう!たとえば、ハートの色を引数で指定できるようにすると、赤以外の色も簡単にえがけるようになります。

好きな色を指定して、カラフルなハートをたくさんえがいてみてください!

タイトルとURLをコピーしました