你已经有了一个第三方的库“ChessLib”,它可以计算出一个骑士可以做的合法动作
在8×8棋盘上的一个位置。该库已被用来创建一个程序,其中移动的骑士随机周围
给定初始起始位置和要进行的总步数。
问题:
= = = = = = = =
扩展这个程序来设置一个8 * 8的方块游戏板,包含几个不同的棋子在预定的位置。
对于游戏的每一步,程序都会随机选择一个棋子,并将其移动到一个随机选择的有效位置
的位置。
您不允许更改任何ChessLib代码。
根据需要扩展程序。
适当地使用面向对象设计和建模来实现可扩展性。
请在SampleProgram项目的Answer.cs文件中提供您的解决方案的所有代码。
请在示例程序的testanswerto .cs文件中提供您的解决方案的所有测试。测试项目。
游戏规则:
*在给定的时间内,只有一个棋子可以占据棋盘上的任何位置。
*所有棋子可以“跳”到任意位置。
注:虽然这款游戏与国际象棋有着惊人的相似之处,但这完全是巧合。不要假设他人
国际象棋规则适用。
游戏支持件:
*主教-对角线移动,在董事会边界内的任何距离
*皇后-斜向移动,水平或垂直移动,在板的边界内的任何距离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); } } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算