【Pythonでつくるゲーム】タートルグラフィックスで作る、スネークゲームの作り方(turtle,freegames)

Python
けんろう
けんろう

Pythonには、様々なライブラリーがあります。

それらを使えば、ゲームも簡単に作れます。
今回は、turtle、freegamesを使った、スネークゲームの作り方を紹介します。 

この記事に載っているサンプルコードをコピーして、Pythonで実行すれば、簡単に動きを確認できますので、是非試してみて下さい。

この記事では、初心者にもわかりやすいように、各処理の内容を、サンプルコード内にコメントとして載せています。

スポンサーリンク

今回作成するアプリ

今回紹介するアプリは、

スネークゲーム
・スネークを操作して餌を食べると、スネークの体が増えていくゲームです。

環境準備

本アプリを動かすために、以下のライブラリーが必要です。

turtle タートルグラフィックス:グラフィックのためのライブラリ
freegames:ゲームを作るためのライブラリ

turtle の公式サイトは、こちら。

freegames の公式サイトは、こちら。

インストール方法は、以下です。

pip install freegames

サンプルコード

#!usr/bin/env python
# -*- coding: utf-8 -*-

from random import randrange
from turtle import *

from freegames import square, vector

# 初期設定
food = vector(0, 0)     #餌の位置を(0,0)にセット
snake = [vector(10, 0)]     #スネークの位置を(10,0)にセット
aim = vector(0, -10)        #方向変更に、下方向(0、-10)をセット

# 方向転換
def change(x, y):
    """スネークの進行方向を変更."""
    aim.x = x
    aim.y = y

# 範囲チェック
def inside(head):
    """スネークの頭が、エリア範囲内にあるかをチェック."""
    return -200 < head.x < 190 and -200 < head.y < 190

# 移動
def move():
    """ワンセグメント分、スネークを移動させる."""
    head = snake[-1].copy()     #スネークの頭の位置を取得
    head.move(aim)      #頭の位置を進行方向分進める

    # 頭部分が範囲内にあるか、スネークの体に触れていないか
    if not inside(head) or head in snake:
        square(head.x, head.y, 9, 'red')    #赤色の正方形を頭の位置に描画する
        update()
        return

    # スネークの頭の位置を追加
    snake.append(head)

    # 頭の位置が餌の位置と同じかどうか
    if head == food:
        # コンソールに、体の数を表示
        print('Snake:', len(snake))

        # 新たな餌を用意
        food.x = randrange(-15, 15) * 10
        food.y = randrange(-15, 15) * 10
    else:
        snake.pop(0)

    # 画面クリア
    clear()

    # スネークの描画。体の数分だけ正方形を描画
    for body in snake:
        square(body.x, body.y, 9, 'black')

    # 餌の描画
    square(food.x, food.y, 9, 'green')
    # 画面の更新
    update()

    #100ms後にmove関数をCALLするタイマをセット
    ontimer(move, 100)

#画面をセット
setup(420, 420, 370, 0)

#タートル
hideturtle()
#タートルアニメの更新の遅延を無しにする
tracer(False)
#タートル画面に、フォーカスする 
listen()
#右キーを押されたときに、change(10,0)をCALLするように設定
onkey(lambda: change(10, 0), 'Right')
#左キーを押されたときに、change(-10,0)をCALLするように設定
onkey(lambda: change(-10, 0), 'Left')
#上キーを押されたときに、change(0,10)をCALLするように設定
onkey(lambda: change(0, 10), 'Up')
#下キーを押されたときに、change(0,-10)をCALLするように設定
onkey(lambda: change(0, -10), 'Down')
#最初のmove関数をCALL
move()
#タートルの実行
done()

実行すると、下図のようなウィンドウが立ち上がります。
黒い四角がスネークで、緑の四角が餌です。

キーボードの矢印キーで、スネークを動かすことができます。

スネークで餌を食べていくと、スネークの体がどんどん増えていきます。

スネークが壁に触れたり、自分自身の体に触ると、ゲームオーバーです。

\ Pythonで遊ぶなら、ラズパイがお薦め。特にこのキーボード付きがオススメです /

まとめ

今回は、turtle、freegamesを使った、スネークゲームの作り方を紹介しました。

コメント

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