そういうゲームじゃねえからこれ!(仮)

そういうゲームじゃねえからこれ!(仮)

ボドゲやTRPG、将棋などについてのつれづれと、たまに技術情報も。
メインはtwitter → http://twitter.com/#!/horawo
ブログタイトル緩募中。

Amebaでブログを始めよう!

B1で6戦こなしてポイントは一ケタ台後半、2連勝すれば
A級入りも夢ではないという状況での2対局。


私の石田流本組に対し後手はゴキ中の形。
後手が銀を2筋に逃がしたのを見て、5三の地点を制圧にかかります。
▲5六歩から戦闘開始。▲5三歩が小目標です。

$そういうゲームじゃねえからこれ!(仮)-20120202_1

本譜は相手が△5六同歩と応じたため、銀をぶつけて▲5三歩が
きれいに決まりました。
相手が歩を取らなかった場合は▲5五歩と取り込んで、
△同銀▲6五桂△6四銀にとりあえず▲5三歩として、その後
銀を角で取って5二にぶつけていけばいけるんじゃないかな~と
考えてました。

終盤はちょっと危ない感じに。
こちらの玉の近くにもう一枚金が銀を打たれてたらやばかったかも。

$そういうゲームじゃねえからこれ!(仮)-20120202_2

指したときは微妙に思えた▲5三角成が案外良かったようです。
コレのおかげで、▲4一銀不成が成立しました。
まあ角を成らないと取られちゃう訳ですが。





2局目は渡辺竜王登場。揮毫かかると俺弱いんだよな~と思ってたら、
鬼神帝とか天鬼神王とか称号だらけの天位の方とマッチング。
雷うるさすぎワロタ。
こりゃ勝てねぇとは思いつつも、この一局でレベルアップしてやるぜと
鼻息荒く対局開始。

こちらは後手番。今度は石田じゃない三間飛車に。
相手が▲5七銀と穴熊の構えを見せてきたので、銀を進めて咎めにいきます。
歩と桂馬で銀が捕縛されかかるんですが、

$そういうゲームじゃねえからこれ!(仮)-20120202_3

この△3六歩が私の棋力では会心の一手。歌舞伎技ありが出ました。
飛車交換から銀の復活と8七の拠点化に成功。
これは…勝てる!?

$そういうゲームじゃねえからこれ!(仮)-20120202_4

この局面が、死ぬか生きるかの生命線だったようです。
ここで△8九角と打ちましたが、△6九角が正解だったようです。
徐々に形勢を逆転され、14手後の▲7九香で相手に優勢が出ました。
対局中は直前の△9四歩マズったわ~と思ってましたが、
その時点ではすっかり怪しい状態になってたんですね。

最後はずるずると負け。



でも、天位をあと一歩まで追い詰めたこと、相手の桂香を
取るタイミングも熟考しながら指せたこともあり、終始脳汁出まくりの
最高の対局になりました。


結局1勝1敗でB1残留となりましたが、2局とも印象深い対局に
なりました。

相変わらず極位への道は遠いままですが・・・。



1月に入って2回目の天下一将棋会2。この日はちょっと気合いが入ってました。

このゲーム、八段に上がってある程度勝利を重ねると、「3連勝すると極位になれるよ」
モードになります。
1のときはここまでいっておきながら結局極位になれなかったので、
捲土重来というか何と言うか、もうむちゃむちゃ極位になりたい、と
鼻息荒く望んだ対局。そしてなんと2連勝!
あと一局勝てば念願の極位、という大事な一戦。


終盤、俺が「これたぶん詰めろだろ」と思って指した△2九飛に対し、
先手が▲7一銀と勝負の銀打ち。


※ 相手のかたのお名前は伏せてます。


なんか罠っぽいから取るのやめとこう…と△9二玉と逃げたんですが、
むしろそっちが本当の罠。そのまま即詰みにされてしまったのでした。

ここは△7一同玉と取るのが正解。
その後先手が▲6二金△8二玉▲7一角△9二玉▲7二金と攻め続けると、
後手玉に必至がかかりますが、どうも後から調べてみると、
△6九飛成▲同玉△5八金から、長手数ながら即詰みの筋があり、
ホントに詰めろがかかってた様子。

後でiPadの柿木将棋でいろいろ調べてみたところ、中盤まではものすごい
後手優勢ペースで進んでたようです。
俺の必殺「詰めの甘さ」が見事に炸裂して大逆転、という一局でした。


う~ん、まだまだ修行がたりませんね。
極位までの道のりは遠いです…


ということで、アメブロでの棋譜swfのテストも兼ねた投稿でした。
将棋の棋譜ファイル(kif)一覧表示用PHP

天下一将棋会2のひとり感想戦用に、ネットに上げた棋譜ファイルを
ブラウザ上で一覧表示してくれるPHPを作ってみました。

ディレクトリに、SJISで保存したkifファイルと一緒に入れておけばOKです。

※2012/2/1追記
将棋倶楽部24の棋譜に対応するよう修正しました。
引き分けの棋譜に対応していないので、対応させたい…
ようやくe-AMUSEMENT GATEがオープンしたんで、
先週引き分けた時の棋譜取ってきて、修正します~。



// プレイヤー名を設定してね
$player_name = "ばね";

$lst = ".";
$linkStrArray = array();
$lastPlayDate = '';

$date_line_hash = array();
$drc=dir($lst);
while ($fl=$drc->read()) {
    $lfl = $lst."/".$fl;
    $din = pathinfo($lfl);
    if(!is_dir($lfl) && ($fl!=".." && $fl!=".")) {
        $playDate = getPlayDate($fl);
        if (strlen($playDate) > 0) {
            $date_line_hash[getPlayDate($fl)] = $fl;
        }
    }
}

krsort($date_line_hash);
foreach ($date_line_hash as $playDate => $fl) {
    $nowPlayDate = substr($playDate, 0, 10);
    if (strcmp($lastPlayDate, $nowPlayDate) != 0) {
        array_push($linkStrArray, day2HeadStr($nowPlayDate));
        $lastPlayDate = $nowPlayDate;
    }
    $lfl = $lst."/".$fl;
    $din = pathinfo($lfl);
    $fn = filemtime($lfl);
    array_push($linkStrArray, pass2LinkStr($fl, $player_name));
}

function getPlayDate($pass) {
    $play_date = '';
    $contents = @file($pass);
    foreach($contents as $line){
        $line = mb_convert_encoding($line, 'utf8', 'sjis-win');
        chop($line);
        if (preg_match("/".preg_quote("開始日時","/")."/", $line)){
            if (preg_match("/20[0-9]{2}\/[0-9]{2}\/[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}/", $line, $match)) {
                $play_date = $match[0];
            }
        }
    }
    return $play_date;
}

function pass2LinkStr($pass, $player_name) {
    $play_date = '';
    $vs = '';
    $turn = '';
    $teban = '';
    $result = '';

    $contents = @file($pass);
    foreach($contents as $line){
        $line = mb_convert_encoding($line, 'utf8', 'sjis-win');
        chop($line);
        if (preg_match("/".preg_quote("開始日時","/")."/", $line)){
            if (preg_match("/20[0-9]{2}\/[0-9]{2}\/[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}/", $line, $match)) {
                $play_date = $match[0];
            }
        }
        if (preg_match("/".preg_quote("先手:","/")."(.+)/", $line, $match)){
            $player = $match[1];
            if (preg_match("/".preg_quote($player_name,"/")."/", $line)) {
                $teban = "先手";
            }
            else {
                $vs = $player;
            }
        }
        if (preg_match("/".preg_quote("後手:","/")."(.+)/", $line, $match)){
            $player = $match[1];
            if (preg_match("/".preg_quote($player_name,"/")."/", $line)) {
                $teban = "後手";
            }
            else {
                $vs = $player;
            }
        }
        if (preg_match("/".preg_quote("詰み","/")."/", $line)){
            if (preg_match("/^\s*([0-9]+)\s/", $line, $match)){
                $turn = $match[1];
                if (($turn % 2 == 0 && $teban === "先手") ||
                    ($turn % 2 != 0 && $teban === "後手")) {
                    $result = "勝ち";
                }
                else {
                    $result = "負け";
                }
            }
        }
        if (preg_match("/".preg_quote("投了","/")."/", $line)){
            if (preg_match("/^\s*([0-9]+)\s/", $line, $match)){
                $turn = $match[1];
                if (($turn % 2 == 0 && $teban === "先手") ||
                    ($turn % 2 != 0 && $teban === "後手")) {
                    $result = "勝ち";
                }
                else {
                    $result = "負け";
                }
            }
        }
    }

    $resultStr = sprintf("%s vs %s %s (%s %d手)", $play_date, $vs, $result, $teban, ($turn - 1));
    $lineStr = "<br / ><a href=\"".$pass."\" charset=\"Shift_JIS\">".$resultStr."</a>";
    return $lineStr;
}

function day2HeadStr($dayStr) {
    return sprintf("<hr><font size="+2"><b>%s</b></font>", $dayStr);
}

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>棋譜一覧</title>
</head>
<body>
<?php
foreach ($linkStrArray as $linkStr) {
    print $linkStr;
}
?>
</body>
</html>