Tcl/Tkで黒と白


アニメ『DRIFTERS』
歴史上の英傑が一つの世界に集結します。英傑たちは、彼らが生きていた後の世界のことは知るはずもないので、後の世の英傑から史実を聞かされて驚いたりしているのが面白いです。彼らは漂流者(ドリフターズ)や、廃棄物(エンズ)と呼ばれるグループに分かれて争います。ドリフ側には、信長や島津豊久がいますが、信長は豊久を王にしようと企んでいます。もう自分ではなくていいんですね。那須与一を含め三人しかいないのに、国盗りが始められるってさすがは英傑達です。エンズの方は、黒王とよばれる謎のリーダーが率いてます。黒と白の戦いです。

さて、黒と白の世界を作りましょう。
もちろんオセロです。前回は脳内オセロを作りましたが、それをエンジンとして使うGUIフロントエンドを作ってみたいと思います。Tcl/Tkを使います。今回は、エンジンとのやり取りができるフロントエンドにする前に、クリックで交互に石を置くだけの単純なプログラムを作ります。

~$ cat -n reversi.tcl
     1	set turnsw 0
     2	for {set i 1} {$i <= 8} {incr i} {
     3		for {set j 1} {$j <= 8} {incr j} {
     4			button .b$i$j -font {FreeMono 40 bold} -bg green -activebackground yellow -activeforeground red
     5			grid .b$i$j -in . -row $i -column $j -sticky nsew
     6			grid columnconfigure . {1 2 3 4 5 6 7 8} -weight 1 -minsize 60
     7			grid rowconfigure . {1 2 3 4 5 6 7 8} -weight 1 -minsize 60
     8	
     9			bind .b$i$j <Enter> {
    10				%W configure -bg red
    11			}
    12			bind .b$i$j <Leave> {
    13				%W configure -bg green
    14			}
    15			bind .b$i$j <Button> {
    16				if {$turnsw == 0} {
    17					%W configure -text "●"  -fg black
    18				} else {
    19					%W configure -text "●"  -fg white
    20				}
    21				set turnsw [expr 1 - $turnsw]
    22			}
    23		}
    24	}

実行はwishコマンドを使います。

~$ wish reversi.tcl

reversi-001

コメント

  1. […] では、「tcl/tkで黒と白」で作成したGUIプログラムを改造したソースです。 CUIプログラムから結果を受け取ると、update_borad関数でオセロボードの更新を行います。 first_char==”Y”という判定がありますが、CUIプログラムの、YOUという催促の、最初の文字Yで、結果通知の完了トリガとしています。 […]

タイトルとURLをコピーしました