标签:pos Assert 帮忙 var new AreEqual moves
你已经有了一个第三方的库“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);
}
}
}
标签:pos,Assert,帮忙,var,new,AreEqual,moves 来源: https://blog.csdn.net/dl990813/article/details/106244789
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。