とある課題で「グラフィックスな作品を一個つくれ!」というものがありました
Processingでやらなければならいのですが、迷路のアルゴリズムを理解するためにPythonでプログラムをかいてみました
とりあえずできた?のでメモとして残しておきます
「迷路 アルゴリズム」と調べると大きく分けて3つの生成方法があるらしいです。
- 棒倒し法
- 穴掘り法
- 壁伸ばし法
私は一番簡単な棒倒し法で作ってみました(グラフィックスが専門じゃないので汗)
プログラム
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Create by KanameTakano Date:2017/10/25 ''' import random import sys #初期化 Length = 29 MazeSize = [[1 for i in range(Length)] for j in range(Length)] if Length % 2 == 0: print("error 奇数のみ") sys.exit(1) for i in range(1,Length - 1): for j in range(1,Length-1): if i % 2 == 1: MazeSize[i][j] = 0 else: if j % 2 == 1: MazeSize[i][j] = 0 #迷路生成 for i in range( 1, Length-1 ): for j in range( 1, Length-1 ): if i % 2 == 0 and j % 2 == 0: ram = random.randint(0,3) if ram == 0: #print("0") if MazeSize[i][j-1] == 0: MazeSize[i][j-1] = 1 elif MazeSize[i-1][j] == 0: MazeSize[i-1][j] = 1 elif MazeSize[i][j+1] == 0: MazeSize[i][j+1] = 1 elif MazeSize[i+1][j] == 0: MazeSize[i+1][j] = 1 elif ram == 1: #print("1") if MazeSize[i-1][j] == 0: MazeSize[i-1][1] = 1 elif MazeSize[i][j+1] == 0: MazeSize[i][j+1] = 1 elif MazeSize[i+1][j] == 0: MazeSize[i+1][j] = 1 elif MazeSize[i][j-1] == 0: MazeSize[i][j-1] = 1 elif ram == 2: #print("2") if MazeSize[i][j+1] == 0: MazeSize[i][j+1] == 1 elif MazeSize[i+1][j] == 0: MazeSize[i+1][j] = 1 elif MazeSize[i][j-1] == 0: MazeSize[i][j-1] = 1 elif MazeSize[i-1][j] == 0: MazeSize[i-1][j] = 1 elif ram == 3: #print("3") if MazeSize[i+1][j] == 0: MazeSize[i+1][j] = 1 elif MazeSize[i][j-1] == 0: MazeSize[i][j-1] = 1 elif MazeSize[i-1][j] == 0: MazeSize[i-1][j] = 1 elif MazeSize[i][j+1] == 0: MazeSize[i][j+1] = 1 else: print("ramdom error") sys.exit(1) #startとgoalの設定 #start MazeSize[1][1] = 2 #goal MazeSize[Length - 2][Length - 2] = 3 #表示 print("○:Start") print("●:Goal") for Maze in MazeSize: for MazeChild in Maze: if MazeChild == 0: print(" ", end="") elif MazeChild == 1: print("■", end="") elif MazeChild == 2: print("○", end="") elif MazeChild == 3: print("●", end="") print() #改行
これを起動すると下記のようになります
見た感じバグがありますが動くからいいでしょ笑(アルゴリズムを理解することが主目的なので)
コメント