Perl と TK を使用してセル オートマトン (コンウェイのライフ ゲーム) を書いたのは、ただの楽しみと練習のためです。コンソール出力で問題なく動作します。TK を使用する場合、最初のバージョンでは新しいセル (四角形) を削除して追加するだけで、約 100 ステップ後にプログラムの速度が低下しました (約 10 倍)。次に、グラフィックス部分を書き直しました。最初は2500セル(50x50)をすべて作成し、追加/削除する代わりに色を変更しました。しかし、600 ~ 700 ステップを過ぎると、作り直したオートマトンも遅くなり始めます。
これは TK の機能/バグですか、何か間違っていますか?
タグによる色の変更:
$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');
グリッドの作成:
for($y = 0; $y < 50; $y++)
{
for($x = 0; $x < 50; $x++)
{
$canvas->createRectangle($x * 10, $y * 10, ($x + 1) * 10, ($y + 1) * 10, -fill=>'white', -tags=>["cell"."$x $y"]);
}
}
ループの開始と停止:
sub start
{
$repeat = $MainWindow->repeat($speed, sub{&maketurn;});
# Function "maketurn" is not important, it is a simple counting of "alive" cells
# and changing color by tag
}
sub stop
{
if(defined($repeat))
{
$repeat->cancel();
}
}