![見出し画像](https://assets.st-note.com/production/uploads/images/80324963/rectangle_large_type_2_cbe420521ff14ce4c2d1d966df11c29e.png?width=800)
Pythonでお絵描き☆タイル模様with Pyxel
前回はPythonのレトロゲームエンジンPyxelで刺し子風の模様を描いてみましたが、今回は3色でタイル模様を描いてみました。
![](https://assets.st-note.com/production/uploads/images/80327931/picture_pc_d710cc7d53d93cd9dead2a5078e45568.gif)
import pyxel
from random import choice
SCREEN_WIDTH = 180
SCREEN_HEIGHT = 180
PATTERN_SIZE = 13 # 模様のサイズ:奇数
SPACE_SIZE = 1 # 模様の間隔
DOT_SIZE = 4 # 一目のサイズ
BACKGROUND_COLOR = 1 # 背景の色
COL_LIST = [1, 12, 7] # 模様の色
class Pattern: # 模様のクラス
def __init__(self):
n = PATTERN_SIZE + 1 # 模様のデータを初期化
self.pattern_data = [[BACKGROUND_COLOR for _ in range(n)] for _ in range(n)]
self.x = 10 # 描画開始位置
self.y = 10
def update(self):
n = PATTERN_SIZE // 2
for i in range(n+1): # 基本の模様
for j in range(i, n+1):
k = choice(COL_LIST)
self.pattern_data[i][j] = k
if j > i:
self.pattern_data[j][i] = k
for i in range(n+1):
for j in range(n+1):
k = self.pattern_data[i][j]
self.pattern_data[n*2-i][j] = k # 基本を左右に反転
self.pattern_data[i][n*2-j] = k # 基本を上下に反転
self.pattern_data[n*2-i][n*2-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)
def draw_pattern(self, x, y, w, n): # 模様1つ分を描画
x0=x
y0=y
for j in range(n+1):
y = y0 + j*w
for i in range(n+1):
pyxel.rect(x0 + i*w, y, w, w, self.pattern_data[i][j])
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(BACKGROUND_COLOR)
self.pattern.draw()
App()
前の記事はこちら
この記事が気に入ったらサポートをしてみませんか?