Exemplo n.º 1
0
        /// <summary>
        /// 棋譜を文字列として書き込みます。
        /// </summary>
        public static string WriteTo(KifuObject kifuObj, KifuFormat format)
        {
            using (var writer = new StringWriter())
            {
                Save(writer, kifuObj, format);

                return writer.ToString();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 棋譜を文字列として書き込みます。
        /// </summary>
        public static string WriteTo(KifuObject kifuObj, KifuFormat format)
        {
            using (var writer = new StringWriter())
            {
                Save(writer, kifuObj, format);

                return(writer.ToString());
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 棋譜ファイルに保存します。
        /// </summary>
        public static void SaveFile(string filepath, KifuObject kifuObj,
                                    KifuFormat? format)
        {
            if (string.IsNullOrEmpty(filepath))
            {
                throw new ArgumentNullException("filepath");
            }

            using (var stream = new FileStream(filepath, FileMode.Create))
            using (var writer = new StreamWriter(stream, KifuObject.DefaultEncoding))
            {
                Save(writer, kifuObj, format.Value);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 各フォーマットに対応するライターを取得します。
        /// </summary>
        private static IKifuWriter GetWriter(KifuFormat format)
        {
            switch (format)
            {
                case KifuFormat.Kif:
                    return new Kif.KifWriter(true);
                case KifuFormat.Ki2:
                    return new Kif.KifWriter(false);
                case KifuFormat.Csa:
                    return new Csa.CsaWriter();
            }

            return null;
        }
Exemplo n.º 5
0
        /// <summary>
        /// 各フォーマットに対応するライターを取得します。
        /// </summary>
        private static IKifuWriter GetWriter(KifuFormat format)
        {
            switch (format)
            {
            case KifuFormat.Kif:
                return(new Kif.KifWriter(true));

            case KifuFormat.Ki2:
                return(new Kif.KifWriter(false));

            case KifuFormat.Csa:
                return(new Csa.CsaWriter());
            }

            return(null);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 棋譜を指定の出力先に書き込みます。
        /// </summary>
        public static void Save(TextWriter writer, KifuObject kifuObj,
                                KifuFormat format)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            if (kifuObj == null)
            {
                throw new ArgumentNullException("kifuObj");
            }

            var kifuWriter = GetWriter(format);
            if (kifuWriter == null)
            {
                throw new ShogiException(
                    format + ": このフォーマットの棋譜出力は未対応です。");
            }

            kifuWriter.Save(writer, kifuObj);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 棋譜を指定の出力先に書き込みます。
        /// </summary>
        public static void Save(TextWriter writer, KifuObject kifuObj,
                                KifuFormat format)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            if (kifuObj == null)
            {
                throw new ArgumentNullException("kifuObj");
            }

            var kifuWriter = GetWriter(format);

            if (kifuWriter == null)
            {
                throw new ShogiException(
                          format + ": このフォーマットの棋譜出力は未対応です。");
            }

            kifuWriter.Save(writer, kifuObj);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 棋譜の出力+入力を行い、ファイルが正しく扱えているか調べます。
        /// </summary>
        public static void ReadWriteTest(KifuObject kifu0, KifuFormat format,
                                         int moveCount)
        {
            // 棋譜の書き出し
            var wrote = KifuWriter.WriteTo(kifu0, format);

            Assert.IsNotNullOrEmpty(wrote);

            // 棋譜の読み込み パート2
            var kifu1 = KifuReader.LoadFrom(wrote);

            Assert.NotNull(kifu1);

            // 読み込んだ棋譜の確認
            Assert.LessOrEqual(moveCount, kifu1.MoveList.Count());

            // 局面の比較を行います。
            var board0 = kifu0.StartBoard.Clone();

            kifu0.MoveList.ForEach(_ => board0.DoMove(_));

            var board1 = kifu1.StartBoard.Clone();

            kifu1.MoveList.ForEach(_ => board1.DoMove(_));

            Assert.True(Board.BoardEquals(kifu0.StartBoard, kifu1.StartBoard));
            Assert.True(kifu0.RootNode.NodeEquals(kifu1.RootNode, true));
            Assert.True(Board.BoardEquals(board0, board1));

            // ヘッダ要素を比較します。
            Assert.AreEqual(kifu0.Header.Count(), kifu1.Header.Count());
            foreach (var item0 in kifu0.Header)
            {
                Assert.True(kifu1.Header.Contains(item0.Key));
                Assert.AreEqual(item0.Value, kifu1.Header[item0.Key]);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 棋譜の出力+入力を行い、ファイルが正しく扱えているか調べます。
        /// </summary>
        public static void ReadWriteTest(KifuObject kifu0, KifuFormat format,
                                         int moveCount)
        {
            // 棋譜の書き出し
            var wrote = KifuWriter.WriteTo(kifu0, format);
            Assert.IsNotNullOrEmpty(wrote);

            // 棋譜の読み込み パート2
            var kifu1 = KifuReader.LoadFrom(wrote);
            Assert.NotNull(kifu1);

            // 読み込んだ棋譜の確認
            Assert.LessOrEqual(moveCount, kifu1.MoveList.Count());

            // 局面の比較を行います。
            var board0 = kifu0.StartBoard.Clone();
            kifu0.MoveList.ForEach(_ => board0.DoMove(_));

            var board1 = kifu1.StartBoard.Clone();
            kifu1.MoveList.ForEach(_ => board1.DoMove(_));

            Assert.True(Board.BoardEquals(kifu0.StartBoard, kifu1.StartBoard));
            Assert.True(kifu0.RootNode.NodeEquals(kifu1.RootNode));
            Assert.True(Board.BoardEquals(board0, board1));

            // ヘッダ要素を比較します。
            Assert.AreEqual(kifu0.Header.Count(), kifu1.Header.Count());
            foreach (var item0 in kifu0.Header)
            {
                Assert.True(kifu1.Header.Contains(item0.Key));
                Assert.AreEqual(item0.Value, kifu1.Header[item0.Key]);
            }
        }