Pythonでお絵描き☆幾何学模様with Pyxel
PythonのレトロゲームエンジンPyxelで日本の伝統刺繍の刺し子を参考に幾何学模様を描いてみました。
import pyxel
from random import choice
SCREEN_WIDTH = 200
SCREEN_HEIGHT = 200
PATTERN_SIZE = 13 # 模様のサイズ:奇数
SPACE_SIZE = 3 # 模様の感覚:奇数
DOT_SIZE = 6 # 一目のサイズ
COL_LIST = (1, 7) # COL_LIST[0]:背景の色、COL_LIST[1]:模様の色
class Pattern: # 模様のクラス
def __init__(self): # 模様のデータを0で初期化
self.pattern_data = [[0 for _ in range(PATTERN_SIZE)] for _ in range(PATTERN_SIZE)]
self.x = 10 # 描画開始位置
self.y = 10
n = PATTERN_SIZE // 2 # 模様の外側の四角に1をセット
for i in range(n + 1):
j = n - i
k = n + i
self.pattern_data[i][j] = COL_LIST[1]
self.pattern_data[i][k] = COL_LIST[1]
self.pattern_data[PATTERN_SIZE-i-1][j] = COL_LIST[1]
self.pattern_data[PATTERN_SIZE-i-1][k] = COL_LIST[1]
def update(self):
n = PATTERN_SIZE // 2 # 模様の内側はランダムに0か1をセット
for i in range(1, n + 1):
for j in range(i):
k = choice([0,1])
self.pattern_data[i] [n-j] = k # 基本の模様
self.pattern_data[n*2-i] [n-j] = k # 基本を上下に反転
self.pattern_data[i] [n+j] = k # 基本を左右に反転
self.pattern_data[n*2-i] [n+j] = k # 基本を上下左右に反転
def draw(self):
size = (PATTERN_SIZE+SPACE_SIZE) * DOT_SIZE # 模様を画面のサイズにあわせて描画
for i in range (SCREEN_HEIGHT // size):
y = size * i + self.y
for j in range (SCREEN_WIDTH // size):
x = size * j + self.x
self.draw_pattern(x, y, DOT_SIZE, PATTERN_SIZE)
if (x + size) < SCREEN_WIDTH and (y + size) < SCREEN_HEIGHT:
self.draw_pattern(x + size/2, y + size/2, DOT_SIZE, PATTERN_SIZE)
def draw_pattern(self, x, y, w, n): # 模様1つ分を描画
x0=x
y0=y
for j in range(n):
y = y0 + j*w
for i in range(n):
if self.pattern_data[j][i] != 0:
pyxel.rect(x0 + i*w, y, w, w, COL_LIST[1])
class App:
def __init__(self):
pyxel.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Sashiko Pattern", capture_scale=2, capture_sec=7)
self.pattern = Pattern()
pyxel.run(self.update, self.draw)
def update(self):
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
if pyxel.frame_count % 20 == 0:
self.pattern.update()
def draw(self):
pyxel.cls(COL_LIST[0])
self.pattern.draw()
App()
Pyxelのインストールはこちらから
この記事が気に入ったらサポートをしてみませんか?