簡単!Pyxel を使ってみよう!-クリスマス。
クリスマスです。雪を降らせます。最初のコードはVSCodeで実行しています。
ブラウザがあれば環境構築もいらないHTML版も最後に載せています。
import pyxel
import random
WIDTH = 160
HEIGHT = 120
class App:
def __init__(self):
pyxel.init(WIDTH, HEIGHT)
self.snowflakes = []
for _ in range(30):
self.snowflakes.append({
"x": random.randint(0, WIDTH - 1),
"y": random.randint(0, HEIGHT - 1),
"size": random.randint(0, 1), # 雪の大きさを調整
"speed": random.uniform(0.5, 2.0) # 雪の速度を調整(浮動小数点数)
})
pyxel.run(self.update, self.draw)
def update(self):
for flake in self.snowflakes:
flake["y"] += flake["speed"]
if flake["y"] > HEIGHT:
flake["y"] = 0
flake["x"] = random.randint(0, WIDTH - 1)
def draw(self):
pyxel.cls(0)
for flake in self.snowflakes:
pyxel.circ(flake["x"], flake["y"], flake["size"], 7)
App()
実行すると。
ツリーを作ります。
import pyxel
import random
WIDTH = 160
HEIGHT = 120
class App:
def __init__(self):
pyxel.init(WIDTH, HEIGHT)
# 星の画像を定義 (ここでは簡単な例)
pyxel.image(0).set(0, 0, ["00070", "07770", "77777", "07770", "00070"]) # 幅5x高さ5の星
self.ornaments = []
for _ in range(10): # オーナメントの数
self.ornaments.append({
"x": random.randint(55, 105), # 木の範囲内に配置
"y": random.randint(40, 100),
"color": random.randint(9, 15) # ランダムな色
})
pyxel.run(self.update, self.draw)
def update(self):
pass
def draw(self):
pyxel.cls(12)
# 木の部分
pyxel.tri(80, 20, 50, 80, 110, 80, 3)
pyxel.tri(80, 50, 40, 110, 120, 110, 3)
pyxel.tri(80, 80, 30, 140, 130, 140, 3)
#幹の部分
pyxel.rect(75, 110, 10, 30, 8)
# 星
pyxel.blt(78, 15, 0, 0, 0, 5, 5, 0) # x, y, img, u, v, w, h, colkey
# オーナメント
for ornament in self.ornaments:
pyxel.circ(ornament["x"], ornament["y"], 3, ornament["color"])
App()
ツリーの描画部分は
pyxel.tri(80, 30, 50, 60, 110, 60, 3)
pyxel.tri(80, 40, 40, 90, 120, 90, 3)
pyxel.tri(80, 70, 30, 110, 130, 110, 3)
pyxel.rect(75, 111, 10, 30, 4)
三角形を3つ繋げています。
組み合わせ。ツリーの背後に雪が降ります。
import pyxel
import random
WIDTH = 160
HEIGHT = 120
class App:
def __init__(self):
pyxel.init(WIDTH, HEIGHT)
self.snowflakes = []
for _ in range(30):
self.snowflakes.append({
"x": random.randint(0, WIDTH - 1),
"y": random.randint(0, HEIGHT - 1),
"size": random.randint(0, 1), # 雪の大きさを調整
"speed": random.uniform(0.2, 0.4) # 雪の速度を調整(浮動小数点数)
})
# 星の画像を定義 (ここでは簡単な例)
pyxel.image(0).set(0, 0, ["00070", "07770", "77777", "07770", "00070"]) # 幅5x高さ5の星
self.ornaments = []
for _ in range(10): # オーナメントの数
self.ornaments.append({
"x": random.randint(55, 105), # 木の範囲内に配置
"y": random.randint(40, 100),
"color": random.randint(9, 15) # ランダムな色
})
pyxel.run(self.update, self.draw)
def update(self):
for flake in self.snowflakes:
flake["y"] += flake["speed"]
if flake["y"] > HEIGHT:
flake["y"] = 0
flake["x"] = random.randint(0, WIDTH - 1)
def draw(self):
pyxel.cls(0)
for flake in self.snowflakes:
pyxel.circ(flake["x"], flake["y"], flake["size"], 7)
pyxel.tri(80, 20, 50, 80, 110, 80, 3)
pyxel.tri(80, 50, 40, 110, 120, 110, 3)
pyxel.tri(80, 80, 30, 140, 130, 140, 3)
#幹の部分
pyxel.rect(75, 110, 10, 30, 8)
# 星
pyxel.blt(78, 15, 0, 0, 0, 5, 5, 0) # x, y, img, u, v, w, h, colkey
# オーナメント
for ornament in self.ornaments:
pyxel.circ(ornament["x"], ornament["y"], 3, ornament["color"])
App()
実行すると
HTML用は
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>pyxel</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/gh/kitao/pyxel/wasm/pyxel.js"></script>
<pyxel-run script="
import pyxel
import random
WIDTH = 160
HEIGHT = 120
class App:
def __init__(self):
pyxel.init(WIDTH, HEIGHT)
self.snowflakes = []
for _ in range(30):
self.snowflakes.append({
'x': random.randint(0, WIDTH - 1),
'y': random.randint(0, HEIGHT - 1),
'size': random.randint(0, 1), # 雪の大きさを調整
'speed': random.uniform(0.2, 0.4) # 雪の速度を調整(浮動小数点数)
})
pyxel.image(0).set(0, 0, ['010', '111', '010']) # 幅5x高さ5の星
self.ornaments = []
for _ in range(10): # オーナメントの数
self.ornaments.append({
'x': random.randint(55, 105), # 木の範囲内に配置
'y': random.randint(40, 100),
'color': random.randint(9, 15) # ランダムな色
})
pyxel.run(self.update, self.draw)
def update(self):
for flake in self.snowflakes:
flake['y'] += flake['speed']
if flake['y'] > HEIGHT:
flake['y'] = 0
flake['x'] = random.randint(0, WIDTH - 1)
def draw(self):
pyxel.cls(0)
for flake in self.snowflakes:
pyxel.circ(flake['x'], flake['y'], flake['size'], 7)
pyxel.tri(80, 30, 50, 60, 110, 60, 3)
pyxel.tri(80, 40, 40, 90, 120, 90, 3)
pyxel.tri(80, 70, 30, 110, 130, 110, 3)
pyxel.rect(75, 111, 10, 30, 4)
# 星
pyxel.blt(80, 25, 0, 0, 0, 15, 15, 0) # x, y, img, u, v, w, h, colkey
# オーナメント
for ornament in self.ornaments:
pyxel.circ(ornament['x'], ornament['y'], 3, ornament['color'])
App()
"></pyxel-run>
</body>
</html>
Geminiに教えてもらい少し調整しました。