はじめに
PythonのTurtleモジュールを使って、毎回違う色や形で運勢を表現する「おみくじアート」を作ってみませんか?プログラミング初心者でも楽しく学べる内容で、あなただけのオリジナルおみくじプログラムを作成していきます。
おみくじアートとは?
おみくじアートとは、プログラムでランダムに選ばれた運勢を、色や形、模様で視覚的に表現するアート作品です。従来のテキストだけのおみくじとは違い、運勢ごとに異なるビジュアルが楽しめるのが特徴です。
必要な準備
環境設定
Pythonがインストールされていれば、追加のライブラリは必要ありません。Turtleモジュールは標準ライブラリに含まれているためです。
基本知識
- 変数の使い方
- リスト(配列)の基本
- 関数の基本概念
- 繰り返し処理(for文)
ステップ1:基本的なおみくじプログラム
まずは、シンプルなおみくじプログラムから始めましょう。
python
import turtle
import random
# 画面設定
screen = turtle.Screen()
screen.bgcolor("white")
screen.title("おみくじアート")
screen.setup(800, 600)
# ペン設定
pen = turtle.Turtle()
pen.speed(5)
# 運勢リスト
fortunes = ["大吉", "中吉", "小吉", "末吉", "凶"]
# ランダムに運勢を選択
today_fortune = random.choice(fortunes)
print(f"今日の運勢: {today_fortune}")
# 画面を維持
screen.exitonclick()
このコードは基本的なセットアップを行い、ランダムに運勢を選択します。
ステップ2:運勢に応じた色を設定
運勢ごとに異なる色を設定して、視覚的な違いを作りましょう。
python
import turtle
import random
# 画面設定
screen = turtle.Screen()
screen.bgcolor("black")
screen.title("おみくじアート")
screen.setup(800, 600)
# ペン設定
pen = turtle.Turtle()
pen.speed(3)
# 運勢と色の対応
fortune_colors = {
"大吉": ["gold", "yellow", "orange"],
"中吉": ["lightgreen", "green", "lime"],
"小吉": ["lightblue", "blue", "cyan"],
"末吉": ["pink", "magenta", "violet"],
"凶": ["red", "darkred", "crimson"]
}
# ランダムに運勢を選択
fortunes = list(fortune_colors.keys())
today_fortune = random.choice(fortunes)
colors = fortune_colors[today_fortune]
print(f"今日の運勢: {today_fortune}")
# 運勢を画面に表示
pen.color(colors[0])
pen.write(f"今日の運勢: {today_fortune}",
align="center",
font=("Arial", 24, "bold"))
screen.exitonclick()
ステップ3:運勢アートを描く基本図形
運勢に応じて異なる図形を描く機能を追加します。
python
import turtle
import random
import math
def draw_star(pen, size, color):
"""星を描く関数"""
pen.color(color)
pen.begin_fill()
for _ in range(5):
pen.forward(size)
pen.right(144)
pen.end_fill()
def draw_flower(pen, petals, size, color):
"""花を描く関数"""
pen.color(color)
angle = 360 / petals
for _ in range(petals):
pen.begin_fill()
pen.circle(size)
pen.end_fill()
pen.right(angle)
def draw_spiral(pen, size, color):
"""螺旋を描く関数"""
pen.color(color)
for i in range(100):
pen.forward(i * size / 100)
pen.right(90)
# メイン部分
screen = turtle.Screen()
screen.bgcolor("black")
screen.title("おみくじアート")
screen.setup(800, 600)
pen = turtle.Turtle()
pen.speed(0)
# 運勢と描画パターンの対応
fortune_patterns = {
"大吉": lambda: draw_star(pen, 100, "gold"),
"中吉": lambda: draw_flower(pen, 8, 30, "lightgreen"),
"小吉": lambda: draw_spiral(pen, 3, "lightblue"),
"末吉": lambda: draw_flower(pen, 6, 25, "pink"),
"凶": lambda: draw_spiral(pen, 2, "red")
}
# ランダムに運勢を選択
fortunes = list(fortune_patterns.keys())
today_fortune = random.choice(fortunes)
# タイトル表示
pen.penup()
pen.goto(0, 200)
pen.color("white")
pen.write(f"今日の運勢: {today_fortune}",
align="center",
font=("Arial", 24, "bold"))
# アート描画
pen.goto(0, 0)
pen.pendown()
fortune_patterns[today_fortune]()
screen.exitonclick()
ステップ4:完成版おみくじアート
複数の要素を組み合わせた完成版を作成しましょう。
python
import turtle
import random
import math
class OmikujiArt:
def __init__(self):
self.screen = turtle.Screen()
self.screen.bgcolor("navy")
self.screen.title("あなた専用おみくじアート")
self.screen.setup(800, 600)
self.pen = turtle.Turtle()
self.pen.speed(0)
# 運勢データ
self.fortune_data = {
"大吉": {
"colors": ["gold", "yellow", "orange"],
"message": "素晴らしい一日になりそう!",
"pattern": "star"
},
"中吉": {
"colors": ["lightgreen", "green", "lime"],
"message": "良いことがありそう",
"pattern": "flower"
},
"小吉": {
"colors": ["lightblue", "blue", "cyan"],
"message": "穏やかな一日",
"pattern": "circle"
},
"末吉": {
"colors": ["pink", "magenta", "violet"],
"message": "小さな幸せを見つけよう",
"pattern": "square"
},
"凶": {
"colors": ["red", "darkred", "orange"],
"message": "今日は注意深く",
"pattern": "triangle"
}
}
def draw_background_pattern(self, colors):
"""背景パターンを描画"""
self.pen.penup()
for i in range(20):
x = random.randint(-400, 400)
y = random.randint(-300, 300)
self.pen.goto(x, y)
self.pen.color(random.choice(colors))
self.pen.pendown()
self.pen.dot(random.randint(5, 15))
self.pen.penup()
def draw_star(self, size, color):
"""星を描画"""
self.pen.color(color)
self.pen.begin_fill()
for _ in range(5):
self.pen.forward(size)
self.pen.right(144)
self.pen.end_fill()
def draw_flower(self, size, color):
"""花を描画"""
self.pen.color(color)
for _ in range(8):
self.pen.begin_fill()
self.pen.circle(size)
self.pen.end_fill()
self.pen.right(45)
def draw_geometric_pattern(self, pattern, size, color):
"""幾何学模様を描画"""
self.pen.color(color)
self.pen.begin_fill()
if pattern == "star":
self.draw_star(size, color)
elif pattern == "flower":
self.draw_flower(size//3, color)
elif pattern == "circle":
self.pen.circle(size)
elif pattern == "square":
for _ in range(4):
self.pen.forward(size)
self.pen.right(90)
elif pattern == "triangle":
for _ in range(3):
self.pen.forward(size)
self.pen.right(120)
self.pen.end_fill()
def create_omikuji(self):
"""おみくじアートを作成"""
# ランダムに運勢を選択
fortune = random.choice(list(self.fortune_data.keys()))
data = self.fortune_data[fortune]
# 背景パターン
self.draw_background_pattern(data["colors"])
# タイトル表示
self.pen.penup()
self.pen.goto(0, 250)
self.pen.color("white")
self.pen.write("🎋 おみくじアート 🎋",
align="center",
font=("Arial", 20, "bold"))
# 運勢表示
self.pen.goto(0, 200)
self.pen.color(data["colors"][0])
self.pen.write(f"今日の運勢: {fortune}",
align="center",
font=("Arial", 24, "bold"))
# メッセージ表示
self.pen.goto(0, 170)
self.pen.color("white")
self.pen.write(data["message"],
align="center",
font=("Arial", 16, "normal"))
# メインアート描画
self.pen.goto(0, 0)
self.pen.pendown()
# 複数の図形を描画
main_color = random.choice(data["colors"])
self.draw_geometric_pattern(data["pattern"], 80, main_color)
# 装飾的な小さな図形
for i in range(6):
angle = i * 60
x = 120 * math.cos(math.radians(angle))
y = 120 * math.sin(math.radians(angle))
self.pen.penup()
self.pen.goto(x, y)
self.pen.pendown()
small_color = random.choice(data["colors"])
self.draw_geometric_pattern(data["pattern"], 30, small_color)
# 完了メッセージ
self.pen.penup()
self.pen.goto(0, -250)
self.pen.color("white")
self.pen.write("🌟 あなた専用のおみくじアートが完成しました! 🌟",
align="center",
font=("Arial", 12, "normal"))
return fortune
# おみくじアートを実行
if __name__ == "__main__":
omikuji = OmikujiArt()
result = omikuji.create_omikuji()
print(f"今日の運勢は「{result}」でした!")
omikuji.screen.exitonclick()
カスタマイズのアイデア
1. 季節に応じた色合い
月ごとに異なる色パレットを使用することで、季節感のあるおみくじアートが作れます。
2. アニメーション効果
描画過程をゆっくりと表示することで、より楽しい体験になります。
3. 音楽との連動
pygame等を使用して、運勢に応じた効果音を追加できます。
4. 保存機能
PostScript形式で作品を保存し、後から印刷することも可能です。
まとめ
PythonのTurtleモジュールを使用することで、プログラミング初心者でも視覚的で楽しいおみくじアートを作成できます。このプロジェクトを通じて、以下のスキルを身につけられます:
- ランダム処理の活用
- 関数の定義と使用
- オブジェクト指向プログラミングの基礎
- 図形描画の基本
- 条件分岐と繰り返し処理
ぜひあなたなりのアレンジを加えて、オリジナルのおみくじアートを作ってみてください。プログラミングの楽しさを実感しながら、毎日違うアートで運勢を確認できる素敵なツールになるはずです。