0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python × Pygameでデスクトップに スノードーム型カウントダウンタイマーを実装する

0
Posted at

タイトルにはタイマーを実装とあるのにいきなりロゴからつくりました。
ロゴという「形」から入ることで、最終的なアウトプットの質が引き上げられると考えています。

「自分が何を作りたいのか」という意志の表明です。

PROJECT COUNTDOWNとしました。

logo.png

  • 成果物
    最初はカレンダーと時計を両サイドに配置した 落ち着いたデザイン。
    黒い背景に薄いミントグリーン系のタイマーを表示しています。
    20秒あたりからスノードームモードに切り替わります。
    マウス操作に連動して中の雪が動いています。

使いたい人がいればリポジトリ公開予定?

AIでこんなのが 自由に作れるのが楽しい。

フリーソフト デスクトップ時計とか検索で調べてみましたが
自分で自分に合ったものを作れるのがいいと思います。

ゲーム制作用のライブラリPygameを時計(タイマー)制作に使うという発想は、単に「時間を表示する」だけでなく、「時間の流れを視覚的な体験としてデザインする」 という目的に対して、非常に理にかなった選択だったとおもいます。

1. 豊かな表現力(動的な演出)

Pygameは1秒間に何十回も画面を書き換える(フレーム更新)ことを前提としているため、以下のような「動き」の表現に長けています。

物理シミュレーション: 今回のプログラムで実装されているような、重力や慣性、衝突判定を伴う雪の粒(パーティクル)の動き。

滑らかなアニメーション: 起動時のロゴのフェードインや、時間の経過に伴う微細なエフェクトの追加が容易です。

2. 自由度の高い描画

既存の「ラベル」や「ボタン」といった部品に縛られず、画面上の1ピクセル単位で描画をコントロールできます。

自前実装の7セグメント: フォントを使わずに多角形で描画することで、実機のような質感を追求できます。

レイヤー構造: 「背景」「タイマー」「雪」「ガラスの反射」と何層にも画像を重ねて、奥行きのある視覚効果(スノードームの質感など)を作ることが可能です。

3. ハードウェアに近い制御

Pygameはもともとゲーム用なので、キーボードやマウスのリアルタイムな反応を得るのが得意です。

マウスを動かした瞬間に雪が舞い上がるような、直感的なインタラクションを簡単に組み込めます。

リバースプロンプト

以下に作ったプログラムをリバースプロンプトさせてみました。
AIと一緒に試行錯誤した結果です。(コードを貼るよりはこっち?)
同じような制作過程を追体験できるかもしれません。

1. プロダクトコンセプト

名称: Project Countdown

目的: デスクトップ上に浮遊する、高い意匠性と実用性を兼ね備えたカウントダウンタイマー。

視覚的テーマ: ミニマリズム、デジタル、および「スノーグローブ(スノードーム)」の融合。

ユーザー体験: 静止時はモダンなタイマーとして機能し、特定の操作で動的なスノーグローブモードへ切り替わる。

2. 技術スタック・主要ライブラリ

Core: Python 3.x / Pygame (2D描画・イベント管理)

System: Windows API (ctypes経由) によるウィンドウ特殊制御

Time Management: datetime, timedelta による精密な時間計測

3. 主要機能と実装詳細

A. ウィンドウ制御 (Windows API)

透過処理: 特定のBGR色 (0x1C1612) をカラーキーとして指定し、ウィンドウ背景を完全透過させる。

レイヤードウィンドウ: GWL_EXSTYLE に WS_EX_LAYERED を設定。

最前面固定: SetWindowPos を用いて常に他のウィンドウより手前に表示。

B. 描画エンジン

7セグメントディスプレイ:

フォントに依存せず、多角形描画 (draw.polygon) でセグメントを構築。

非点灯セグメントを低アルファ値で描画し、物理的なデバイス感を演出。

スノーグローブ(ドーム)モード:

スノードームって英語では(Snow Globe)。 
スペルが違うけど雪用手袋ではない。

AI生成された「ハイライト・反射レイヤー」を最前面に描画し、ガラスの質感を表現。

内部要素(タイマー、パーティクル)に擬似的なレンズ歪み(スケーリング変換)を適用。

オープニング演出: アプリ起動時にロゴ (logo.png) を滑らかにフェードイン・アウトさせるシーケンス。

C. 物理演算 (パーティクルシステム)

個体管理: 最大300個の雪の粒子を生成。

衝突判定: 円形の境界線内での反射ベクトル計算。

相互作用:マウスの相対移動量 (mouse.get_rel) を加速度として粒子に付与。

粒子同士の近接時に擬似的な斥力を発生させ、自然な分散を表現。

D. ユーザーインターフェース (UI/UX)

カレンダー: 現在日付をハイライトしたミニマルなカレンダー表示。

デュアルクロック: JST(日本標準時)とUTC(協定世界時)を右下に配置。

動的テーマ: スペースキーにより、ミントグリーン、赤、青、黄、緑のテーマカラーを順次切り替え。

4. 操作仕様

S キー: 通常モードとスノーグローブモードの切り替え。

SPACE キー: テーマカラーの変更。

マウス操作: スノードームモード時、マウス移動で雪を操作

ESC キー: アプリケーションの終了。

その他 宣伝

「もし、自分のデスクトップにもこのスノードームを浮かべてみたいという方がいれば、LGPL/MITライセンスの範囲内でリポジトリを公開しようと思います。コメントやLGTMで反応をいただけると嬉しいです!」

 私はタイマーなんだからミリ秒単位を表示させて焦燥感を煽ったほうがいいと思っていたのですが周りの意見を聞きミリ秒単位を表示しないことにしました。
最初はこんな感じでした。 ごちゃごちゃチカチカ状態。
(こういうのが欲しい人はいないのでしょうか?)
image.png

ロゴも作ったのでいろいろなもののカウントダウンをするツールをたくさん作りたいと思います。

回路計算機 pymna-proというものを作ってます。
電気回路計算する人はこちらもお願いします。
↓↓↓

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?