Created
January 26, 2012 10:07
-
-
Save p-nix/1682065 to your computer and use it in GitHub Desktop.
将棋の棋譜をチャート形式で表示する
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # encoding: utf-8 | |
| # coding: utf-8 | |
| # 棋譜ファイルをチャート形式で表示する | |
| # 一手分を登録するクラス枝分かれして連なる | |
| class KifuNode | |
| attr_accessor :step # 手数 | |
| attr_accessor :parent # 親のオブジェクト | |
| attr_accessor :next # 次の手 配列として登録 | |
| attr_accessor :te # 手の内容 | |
| attr_accessor :comment #コメント | |
| def initialize(a) | |
| @te = a # 手の内容 | |
| self.step = 0 | |
| @next = [] # 次の手。KifuNode クラスの配列 | |
| end | |
| #手を追加する。追加したオブジェクトを返す | |
| def add(b) | |
| @next << b | |
| b.parent = self | |
| b.step = @step + 1 | |
| return b | |
| end | |
| #指定した手数のオブジェクトを返す | |
| def search(n) | |
| if n > step | |
| #指定した手数が現在の手数より大きければ不正な値なので終了 | |
| return nil | |
| elsif n == step | |
| return self | |
| else | |
| #親をたどる | |
| return parent.search(n) | |
| end | |
| end | |
| end | |
| #棋譜ファイルを読み込んで整形 | |
| file = File.open("C:/temp/test.kif", "r:Windows-31J:UTF-8") | |
| nowKifuNode = KifuNode.new("") # ダミーで開始分のオブジェクト作成 | |
| kifuNodeList = nowKifuNode | |
| file.each_line do |line| | |
| line.chomp! | |
| # 書式: 1 7六歩(77) ( 0:00/00:00:00)+ | |
| case line | |
| when /[\d]+(.*)\(.*\(/ then | |
| obj = KifuNode.new(line.slice(/[\d]+(.*)\(.*\(/, 1).strip) | |
| nowKifuNode = nowKifuNode.add(obj) | |
| #駒を打った場合。前の位置を示す領域がない | |
| when /[\d]+(.*)\(/ then | |
| obj = KifuNode.new(line.slice(/[\d]+(.*)\(/, 1).strip) | |
| nowKifuNode = nowKifuNode.add(obj) | |
| # 「変化:○○手」 | |
| when /変化:/ then | |
| nowCnt = line.slice(/変化:(\d+)手/, 1) | |
| nowKifuNode = nowKifuNode.search(nowCnt.to_i - 1) | |
| # コメント | |
| when /^\*/ then | |
| nowKifuNode.comment = line.slice(/^\*(.*)/, 1) | |
| else | |
| end | |
| end | |
| file.close | |
| #結果表示 | |
| def makeGraph(obj, level = 0) | |
| #表示 | |
| if (obj.step != 0) | |
| if (obj.step % 2) == 0 | |
| print "△#{obj.te}" | |
| else | |
| print "▲#{obj.te}" | |
| end | |
| end | |
| obj.next.each_with_index do |x, idx| | |
| if obj.next.count > 1 | |
| print "\r\n" | |
| print " " * level | |
| if idx == obj.next.count - 1 | |
| print "└" | |
| else | |
| print "├" | |
| end | |
| serial = 0 | |
| makeGraph(x, level + 1) | |
| else | |
| makeGraph(x, level) | |
| end | |
| end | |
| end | |
| makeGraph(kifuNodeList) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #KIF version=2.0 encoding=Shift_JIS | |
| # ---- Kifu for Windows V7 V7.01 棋譜ファイル ---- | |
| 開始日時:2011/12/28 16:46:26 | |
| 手合割:平手 | |
| 先手: | |
| 後手: | |
| 手数----指手---------消費時間-- | |
| 1 7六歩(77) ( 0:00/00:00:00) | |
| 2 3四歩(33) ( 0:00/00:00:00) | |
| 3 2六歩(27) ( 0:00/00:00:00) | |
| 4 5四歩(53) ( 0:00/00:00:00) | |
| 5 2五歩(26) ( 0:00/00:00:00) | |
| 6 5二飛(82) ( 0:00/00:00:00) | |
| *基本図 | |
| 7 5八金(49) ( 0:00/00:00:00) | |
| 8 5五歩(54) ( 0:00/00:00:00) | |
| 9 2四歩(25) ( 0:00/00:00:00) | |
| 10 同 歩(23) ( 0:00/00:00:00) | |
| 11 同 飛(28) ( 0:00/00:00:00) | |
| 12 5六歩(55) ( 0:00/00:00:00) | |
| 13 同 歩(57) ( 0:00/00:00:00) | |
| 14 8八角成(22) ( 0:00/00:00:00) | |
| 15 同 銀(79) ( 0:00/00:00:00) | |
| 16 3三角打 ( 0:00/00:00:00) | |
| 17 2一飛成(24) ( 0:00/00:00:00) | |
| 18 8八角成(33) ( 0:00/00:00:00) | |
| 19 5五桂打 ( 0:00/00:00:00) | |
| 20 6二玉(51) ( 0:00/00:00:00) | |
| 21 1一龍(21) ( 0:00/00:00:00) | |
| 22 9九馬(88) ( 0:00/00:00:00)+ | |
| 23 6六香打 ( 0:00/00:00:00) | |
| *この香車が手ごわい | |
| 24 5四銀打 ( 0:00/00:00:00)+ | |
| 25 2二歩打 ( 0:00/00:00:00) | |
| *と金作りを見せながら、△9九馬の効きを止める。 | |
| 26 5五銀(54) ( 0:00/00:00:00)+ | |
| *疑問手 | |
| 27 同 歩(56) ( 0:00/00:00:00) | |
| 28 同 飛(52) ( 0:00/00:00:00) | |
| 29 4六銀打 ( 0:00/00:00:00) | |
| *先手十分 | |
| 変化:26手 | |
| 26 同 飛(52) ( 0:00/00:00:00) | |
| *疑問手 | |
| 27 同 龍(11) ( 0:00/00:00:00) | |
| 28 同 銀(31) ( 0:00/00:00:00) | |
| 29 3六角打 ( 0:00/00:00:00) | |
| *先手優勢。6三の地点を守りきれない | |
| 変化:24手 | |
| 24 7二銀(71) ( 0:00/00:00:00) | |
| *疑問手 | |
| 25 8二角打 ( 0:00/00:00:00) | |
| *次に香車を取って先手優勢 | |
| 変化:22手 | |
| 22 8九馬(88) ( 0:00/00:00:00) | |
| 23 4三桂成(55) ( 0:00/00:00:00)+ | |
| *角道がそれたので | |
| 24 5六飛(52) ( 0:00/00:00:00) | |
| 25 5七香打 ( 0:00/00:00:00) | |
| 26 同 飛成(56) ( 0:00/00:00:00) | |
| 27 同 金(58) ( 0:00/00:00:00) | |
| 28 5六歩打 ( 0:00/00:00:00) | |
| 29 5八金(57) ( 0:00/00:00:00) | |
| 30 5七香打 ( 0:00/00:00:00) | |
| 31 5三角打 ( 0:00/00:00:00) | |
| 32 7二玉(62) ( 0:00/00:00:00) | |
| 33 3一角成(53) ( 0:00/00:00:00) | |
| 34 6七馬(89) ( 0:00/00:00:00) | |
| *詰めろではない | |
| 35 4一馬(31) ( 0:00/00:00:00) | |
| 36 5八香成(57) ( 0:00/00:00:00) | |
| 37 同 金(69) ( 0:00/00:00:00) | |
| 38 5七歩成(56) ( 0:00/00:00:00) | |
| *先手玉受けなしだが | |
| 39 6三馬(41) ( 0:00/00:00:00) | |
| 40 8二玉(72) ( 0:00/00:00:00) | |
| 41 7二金打 ( 0:00/00:00:00) | |
| *先手勝ち | |
| 42 9二玉(82) ( 0:00/00:00:00) | |
| 43 8二飛打 ( 0:00/00:00:00) | |
| 44 同 銀(71) ( 0:00/00:00:00) | |
| 45 同 金(72) ( 0:00/00:00:00) | |
| 46 同 玉(92) ( 0:00/00:00:00) | |
| 47 7一銀打 ( 0:00/00:00:00) | |
| 48 同 金(61) ( 0:00/00:00:00) | |
| 49 同 龍(11) ( 0:00/00:00:00) | |
| 50 同 玉(82) ( 0:00/00:00:00) | |
| 51 7二金打 ( 0:00/00:00:00) | |
| 変化:23手 | |
| 23 6六香打 ( 0:00/00:00:00) | |
| *この香車が成立するようでは△8九馬とした意味がない | |
| 24 5一桂打 ( 0:00/00:00:00) | |
| *これで受けきれる |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
動作環境
ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
で動作確認。1.9.3は改行コード怪しいので使わないほうがよい(改行がCRLFではなくLFになる)。1.8.xだとおそらく動作しない。
実行の仕方
※ダウンロードする場合はファイル形式がtar.gzなのでWinowsでは7-Zipを使うと解凍できた。(tar.gz→tar→と2回解凍しないといけない) ダウンロードしたファイル(gist○○.tar.gz ファイルを直接 kifviz.rbと名前変更しても動かない。解凍しましょう)
保存先は日本語フォルダがあると面倒なので英語フォルダの下に置くのが楽。Cドライブにtempフォルダを作ってそこに置こう。
エクスプローラーからCドライブの下に temp フォルダを新規作成。tempフォルダの中にkifviz.rbを置く。
スタートメニュー → すべてのプログラム → アクセサリ → コマンドプロンプト
でコマンドプロンプト(黒い画面)が立ち上がる。
コマンドプロンプトで cd \temp [Enter]
と入力。(「\」は円マーク。キーボード右上のやつ。[Enter]はEnteキーのこと)「C:\temp>」 と表示された?
コマンドプロンプトで dir [Enter]
そのフォルダにあるファイルが列挙される。kifviz.rb があればOK。
コマンドプロンプトから ruby kifviz.rb > out.txt
で out.txt に結果が保存されます。