求帮忙

你已经有了一个第三方的库“ChessLib”,它可以计算出一个骑士可以做的合法动作
在8×8棋盘上的一个位置。该库已被用来创建一个程序,其中移动的骑士随机周围
给定初始起始位置和要进行的总步数。
问题:
= = = = = = = =
扩展这个程序来设置一个8 * 8的方块游戏板,包含几个不同的棋子在预定的位置。
对于游戏的每一步,程序都会随机选择一个棋子,并将其移动到一个随机选择的有效位置
的位置。
您不允许更改任何ChessLib代码。
根据需要扩展程序。
适当地使用面向对象设计和建模来实现可扩展性。
请在SampleProgram项目的Answer.cs文件中提供您的解决方案的所有代码。
请在示例程序的testanswerto .cs文件中提供您的解决方案的所有测试。测试项目。
游戏规则:
*在给定的时间内,只有一个棋子可以占据棋盘上的任何位置。
*所有棋子可以“跳”到任意位置。
注:虽然这款游戏与国际象棋有着惊人的相似之处,但这完全是巧合。不要假设他人
国际象棋规则适用。
游戏支持件:

  • Knight -由ChessLib实现的移动
    *主教-对角线移动,在董事会边界内的任何距离
    *皇后-斜向移动,水平或垂直移动,在板的边界内的任何距离
using System;
using System.Collections.Generic;
using System.Linq;
using ChessLib;
using NUnit.Framework;

namespace SampleProgram.Test
{
    [TestFixture]
    public class TestFixture1
    {
        [Test]
        public void TestKnightMoveFromInsideBoard()
        {
            var pos = new Position(8, 8);
            var knight = new KnightMove();

            var moves = knight.ValidMovesFor(pos).ToArray();

            Assert.IsNotNull(moves);
            Assert.AreEqual(8, moves.Length);

            foreach (var move in moves)
            {
                switch (Math.Abs(move.X - pos.X))
                {
                    case 1:
                        Assert.AreEqual(2, Math.Abs(move.Y - pos.Y));
                        break;
                    case 2:
                        Assert.AreEqual(1, Math.Abs(move.Y - pos.Y));
                        break;
                    default:
                        Assert.Fail();
                        break;
                }
            }
        }

        [Test]
        public void TestKnightMoveFromCorner()
        {
            var pos = new Position(1, 1);
            var knight = new KnightMove();

            var moves = new HashSet<Position>(knight.ValidMovesFor(pos));

            Assert.IsNotNull(moves);
            Assert.AreEqual(2, moves.Count);

            var possibles = new[] {new Position(2, 3), new Position(3, 2)};

            foreach (var possible in possibles)
            {
                Assert.IsTrue(moves.Contains(possible));
            }
        }

        [Test]
        public void TestPosition()
        {
            var pos = new Position(1, 1);
            Assert.AreEqual(1, pos.X);
            Assert.AreEqual(1, pos.Y);

            var pos2 = new Position(1, 1);

            Assert.AreEqual(pos, pos2);
        }
    }
}

上一篇:C. Board Moves(递推)


下一篇:LeetCode 657. 机器人能否返回原点 普通与加速做法 模拟