飞扬围棋论坛

 找回密码
 注册
搜索
查看: 29499|回复: 20
打印 上一主题 下一主题

“围棋助手”格式棋谱转换器上传

[复制链接]
跳转到指定楼层
1#
发表于 2003-9-14 18:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
缘起与下载地址
围棋住手是胡晓奇开发的软件,效果还是不错的,可惜是收费的。他的网页(http://www.go-assistant.com/)有不少名句细节,破值得学习,但是“围棋助手”所用的sgf格式并不是标准的sgf格式(虽然“围棋助手”存成的文件后缀也是.sgf,但其实不是标准的sgf格式,为区别计,下文中称其为hgf格式)只能用围棋助手、而不能用别的打谱软件(比如multigo)打开,所以写了这个转化器,今天想了老半天终于想起了自己网页http://athos3.8u8.com的密码,遂上传了,欢迎下载http://athos3.8u8.com/hgf2sgf.zip(文件为zip格式,请用winzip解开)。

控件问题
转换器是用vb编写的,用到了vb标准控件comdlg32.ocx,如果没有的话,解决办法是:
一、不要点“Open”和“Save”两个按钮,而是直接把文件路径敲进去,这个石权宜之计;
二、彻底解决的办法
Step1.下载ComDlg32.ocx,放在C:\\Winnt\\System32目录下

Step2.进Dos Command Prompt,敲:
C:
cd C:\\winnt\\system32
regsvr32 comdlg32.ocx

转换例子
参见这个贴子,这里有一些围棋助手提供的棋谱,诛仙贴出了用这个转换器转换后的结果。


关于hgf格式的说明
sgf格式的标准简单说是这样的:
(      --开始
;B[aa]    ——黑棋
;W[bb]    ——白棋
(      --变化1开始
;B[cc]      ……
;W[dd]
)      --变化1结束
(      --变化2开始
;B[ee]
;W[ff]
)      --变化2结束
)      --结束
也就是说,所有的变化必须再一个序列的最后并列。

hgf格式的文件则是这样的:
(      --开始
;B[aa]    ——黑棋
;W[bb]    ——白棋
(      --变化1(参考图)开始
;B[cc]      ……
;W[dd]
)      --变化1结束
      --变化2(主变化)开始
;B[ee]
;W[ff]
       --变化2结束
)      --结束

也就是说,相对sgf格式,最后一个变化hgf认为是主变化,并省去了括号,这就导致了围棋助手的棋谱不能被别的通用sgf格式棋谱阅览器直接阅读。

代码
我是用vb做的,界面上有两个文本框,三个按钮,下面是程序源代码。

Private Sub Command1_Click()
  CommonDialog1.ShowOpen
  Text1.Text = CommonDialog1.FileName
End Sub

Private Sub Command2_Click()
  CommonDialog1.ShowSave
  Text2.Text = CommonDialog1.FileName
End Sub

Private Sub Command3_Click()
  Dim strInput As String
  Dim strOutput As String
  Dim lngInputDepth As Long
  Dim lngSibling(10000) As Long
  Dim lngMore(10000) As Long
  
  Dim L As Long
  Dim LFile As Long
  Dim LFileLen As Long
  Dim LIn As Long
  Dim LInLen As Long
  Dim LOut As Long
  Dim LOutLen As Long
  
  Dim chrIn As Byte
  Dim chrIn1 As Byte
  Dim chrIn2 As Byte
  
  Dim bufIn() As Byte
  Dim bufOut() As Byte
  Dim intFlag  As Integer
  Dim blHot As Boolean
   
  Open Text1.Text For Binary As #1
  Open Text2.Text For Binary As #2
  
  
  ReDim bufIn(LOF(1) * 2) As Byte
  ReDim bufOut(LOF(1) * 2) As Byte
  
  LIn = 0
  LFile = 0
  While LFile < LOF(1)
    Get #1, , chrIn
    LFile = LFile + 1
   
    If chrIn = 13 Then
      Get #1, , chrIn
      LFile = LFile + 1
      
      If chrIn <> 10 Then
        bufIn(LIn) = 13
        LIn = LIn + 1
        bufIn(LIn) = chrIn
        LIn = LIn + 1
      End If
    ElseIf chrIn = 32 Or chrIn = 9 Then
    Else
      bufIn(LIn) = chrIn
      LIn = LIn + 1
    End If
  Wend
  
  LInLen = LIn
  lngInputDepth = 0
  lngSibling(lngInputDepth) = 0
  lngMore(lngInputDepth) = 0
  blHot = False
  LIn = 0
  LOut = 0
  While LIn < LInLen
    chrIn = bufIn(LIn)
    If chrIn = 59 _
      And (bufIn(LIn + 1) = 66 Or bufIn(LIn + 1) = 87) _
      And bufIn(LIn + 2) = 91 _
      And blHot = True Then
        blHot = False
        lngMore(lngInputDepth) = lngMore(lngInputDepth) + 1
        bufOut(LOut) = 40
        LOut = LOut + 1
        bufOut(LOut) = bufIn(LIn)
        LOut = LOut + 1
        LIn = LIn + 1
    ElseIf chrIn = 40 Then
      lngInputDepth = lngInputDepth + 1
      lngSibling(lngInputDepth) = 0
      lngMore(lngInputDepth) = 0
      blHot = False
      bufOut(LOut) = bufIn(LIn)
      LOut = LOut + 1
      LIn = LIn + 1
    ElseIf chrIn = 41 Then
      lngInputDepth = lngInputDepth - 1
      lngSibling(lngInputDepth) = lngSibling(lngInputDepth) + 1
      blHot = True
      bufOut(LOut) = bufIn(LIn)
      LOut = LOut + 1
      LIn = LIn + 1
      For L = 0 To lngMore(lngInputDepth + 1) - 1
        bufOut(LOut) = 41
        LOut = LOut + 1
      Next L
    Else
      bufOut(LOut) = bufIn(LIn)
      LIn = LIn + 1
      LOut = LOut + 1
    End If
  Wend
  
  LOutLen = LOut
  For LOut = 0 To LOutLen - 1
    Put #2, , bufOut(LOut)
  Next LOut
  

  
  Close #1
  Close #2
  
End Sub

今后的工作
做得有点粗糙,还有一些可以更完善的地方,仅列举如下,欢迎完善这个小小的程序。
一、hgf格式的棋谱自己定义了“把某步棋设为1”这样的功能,multigo也有,这个地方的转换我没做……
二、最好可以做成整个目录自动转换的功能……
三、以后也许hgf格式会有新的定义等……

版权
一、所谓hgf格式,我并没有拿到正式的说明,只是猜测而已,所以不保证转换完全等价,转换效果估计也不如注册版的“围棋助手”,也不保证以后hgf格式是否会变化。
二、此程序是以“as is”形式散发,即,我对程序的传播及使用后果不承诺任何责任,你用他来做什么一切后果由你自己负责。
三、版权是copyright形式。所谓copyright,简单说,可以自由使用我的代码,但不得将此代码用于商业用途,如果要用于商业用途,请和我联系,付钱;具体对copyright的定义请参考Internet上已有的正式文件。

附注
这篇文章已经被在下加入了自己的“个人文集”,以方便各位查阅。

鸣谢
感谢tandem,提供了程序的图标。
2#
发表于 2003-9-15 14:52 | 只看该作者
好!很好!
先收藏着。
即使是看在楼主敲了这么多文字的面上,也该把此文加精了。
回复 支持 反对

使用道具 举报

3#
发表于 2003-9-24 18:42 | 只看该作者
支持,谢谢
回复 支持 反对

使用道具 举报

4#
发表于 2003-9-28 10:26 | 只看该作者
你是设计程序的高手!!!     以后,多多设计围棋程序!!!  大家都会感激你!!!!
回复 支持 反对

使用道具 举报

5#
发表于 2003-9-29 13:20 | 只看该作者
中国的电脑高手多矣!
 中国的懂围棋的电脑高手多矣!
  中国的懂围棋的又在编写围棋软件的电脑高手多矣!
就是一盘散沙、
 各自为政、
  。。。。。!

这不,
 让洋人的免费围棋程序(GNU Go)
  抢了先。
而这免费围棋程序
 最早也是
  在美的一个中国人写出来的。

现在提到免费围棋程序 (GNU Go)
 谁还会认为是
  中国人
   写的?
回复 支持 反对

使用道具 举报

6#
发表于 2003-9-30 08:55 | 只看该作者
xg
回复 支持 反对

使用道具 举报

7#
发表于 2003-10-3 09:30 | 只看该作者
呵呵~~
能不逆转呢?
回复 支持 反对

使用道具 举报

8#
发表于 2004-6-24 10:07 | 只看该作者
下载链接失败,谁下载过提供一下如何?
回复 支持 反对

使用道具 举报

头像被屏蔽
9#
发表于 2004-6-24 11:38 | 只看该作者
我也想要一份。
发给taoxj1976@gmail.com
回复 支持 反对

使用道具 举报

10#
发表于 2004-6-24 15:30 | 只看该作者
我也想要一份
aeggcake@tom.com
回复 支持 反对

使用道具 举报

11#
发表于 2004-6-24 21:12 | 只看该作者
下載後的檔案無法解壓縮...why....???
回复 支持 反对

使用道具 举报

头像被屏蔽
12#
发表于 2004-6-30 09:42 | 只看该作者
无法下载?
回复 支持 反对

使用道具 举报

头像被屏蔽
13#
发表于 2004-6-30 12:33 | 只看该作者
以下是引用go123go在2004-6-30 9:42:32的发言:
无法下载?

这个软件是针对很早以前的“围棋助手”棋谱格式,对现在的“围棋助手”棋谱已经不好使了。
回复 支持 反对

使用道具 举报

14#
发表于 2004-6-30 13:04 | 只看该作者
对于早期围棋助手的文件格式,只要用围棋助手8.00以后的版本打开后,再保存一下就转换成了标准的SGF文件格式。
附:
关于棋谱格式答棋友问?        
为何主页的棋谱都以GOA格式提供?
围棋助手采用的是类似会员服务的方式为注册用户服务,只要您注册围棋助手或者为作者提供棋谱或教程,作者就会给您发围棋助手的注册码,注册后您就成为围棋助手的“会员”,就可以围棋助手打开围棋助手网站所有教程和棋谱了。另外,GOA文件还有占用磁盘空间小,除了支持SGF的所有属性了,还是一些SGF文件不具备的扩展属性。当然,在以后条件允许的时候,作者也将为一些非注册棋友提供一些教程和资料。

围棋助手保存的SGF文件是标准的SGF格式吗?
围棋助手8.00以后的版本所保存的SGF文件均是标准的SGF文件,用8.00以后版本保存的SGF文件均可用其它棋谱棋谱编辑器打开。有的棋谱编辑器不能打开围棋助手8.00以后版本的SGF文件,是因为该编辑器不支持多谱SGF文件的原因。

GOA文件和SGF文件可以相互转换吗?
GOA文件和SGF文件是可以相互转换的,您自己用围棋助手编辑的棋谱或教程,无任保存为SGF格式还是GOA格式,都可以互相转换。围棋助手主页的GOA文件之是所不能转换为SGF文件格式,是因为这些教程是作者提供给注册用户的一项增值服务,因此关闭了此功能。目的是鼓励更多的棋友提供棋谱或注册。您提供20K的棋谱教程,得到的将是超过40M的棋谱和教程(因为光盘版本已提供下载,光盘安装后有超过40M的棋谱和教程)。

另搞一套SGF格式是为了搞垄断吗?
作者还没有这个能力。看一看围棋助手的发展过程,您就会消除这些误解。在围棋助手之前的一些打谱软件中,有很多对SGF文件支持很好的软件,尽管这些软件对SGF文件支持很好,但在打谱或编辑参考图时并不方便,原因就在于SGF文件本身有很多缺陷。正是基于这中原因,作者对SGF文件进行了一些扩展,给打谱或编辑棋谱带来了很大的方便,这就是围棋助手7.30以前版本所保存的SGF文件,和其它软件不兼容也是这方面的原因。软件总是不断发展的,为了解决兼容的问题,作者想了很多办法,在7.30的版本中,作者加一个转换功能,可以将围棋助手的SGF文件转换为标准的SGF文件。在8.00以后的版本中,作者找到了更好的办法,就是所有的转换均在软件的内部实现,处部均是以标准的SGF文件出现。所以说,8.00以后的版本保存的SGF文件都是标准的SGF文件。

回复 支持 反对

使用道具 举报

15#
发表于 2004-7-2 00:20 | 只看该作者
我也想要一份
chenyan20@sh163.net
very very thinks
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|飞扬围棋网 ( 苏ICP备11029047号-1 )

GMT+8, 2024-4-20 07:10 , Processed in 0.116682 second(s), 19 queries .

since 2003飞扬围棋论坛 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表