【PyGame】Grid(マス目上)をランダムで動くものを作ってみる

今回はpygameを使ってグリッド上をランダムで動き回る何か?
がいるものを作ってみます。

大抵の人には役に立たないと思いますがメモとして残しておきます。

以下のようにgrid上を緑が動き回ります。

前提条件

バージョン等

  • Python 3.6.0

pygameのインストール方法

pygameはpipでインストールできます。

pip install pygame

実装

ソースコード全部を上げてしまいます。

とりあえずコピペすると動きます。

import pygame
import numpy as np

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)

WIDTH, HEIGHT = 40, 40

WINDOW_SIZE = [450, 450]

MARGIN = 5

# 行動の集合
ACTIONS = {
    "UP": 0,
    "DOWN": 1,
    "LEFT": 2,
    "RIGHT": 3,
    "STAY": 4}

def is_in_grid(x, y):
    """
        x, yがグリッドワールド内かの確認
    """
    if len(grid) > y >= 0:
        if len(grid[0]) > x  >= 0:
            return True
    return False

def update_agent_pos(x, y):
    """
        エージェントの位置の更新 
    """

    while True:
        to_y, to_x = y, x
        action = np.random.randint(6)
        if action == ACTIONS["UP"]:
            to_y += -1
        elif action == ACTIONS["DOWN"]:
            to_y += 1
        elif action == ACTIONS["LEFT"]:
            to_x += -1
        elif action == ACTIONS["RIGHT"]:
            to_x += 1

        if is_in_grid(to_y, to_x) is True:
            return to_x, to_y

def draw_grid_world():
    """
        grid world自体の再描画
    """
    for row in range(10):
        for column in range(10):
            color = WHITE
            if grid[row][column] == 1:
                color = GREEN
            pygame.draw.rect(screen,
                             color,
                             [(MARGIN + WIDTH) * column + MARGIN,
                              (MARGIN + HEIGHT) * row + MARGIN,
                              WIDTH,
                              HEIGHT])

if __name__ == '__main__':

    # pygameの初期化
    pygame.init()

    # grid情報の初期化
    grid = []
    for row in range(10):
        grid.append([])
        for column in range(10):
            grid[row].append(0)

    screen = pygame.display.set_mode(WINDOW_SIZE)

    pygame.display.set_caption("Grid World")

    clock = pygame.time.Clock()

    # エージェントの初期位置
    x, y = 1, 5
    grid[y][x] = 1

    while True:
        screen.fill(BLACK)

        # grid worldの描画
        draw_grid_world()

        clock.tick(1)

        # 再描画
        pygame.display.flip()

        # エージェントの位置の更新
        to_x, to_y = update_agent_pos(x, y)

        grid[y][x] = 0
        grid[to_y][to_x] = 1
        x, y = to_x, to_y

    pygame.quit()

上記を実行すると最初に示したようなグリッドが出力されます。

緑の四角がランダムで移動していきます。

参考文献

http://westplain.sakuraweb.com/translate/pygame/
タイトルとURLをコピーしました