Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на C#

кирилл кутлинский Знаток (266), на голосовании 3 месяца назад
Реализуйте метод, котороый принимает положение фигур на доске и проверяет, находится ли король(черныйй) под шахом. Положение фигур: Король (чёрный)e5 Пешка(черная)g5 Король(белый)e7 Ферзь(белый)d6 Пешка(белая)d3 C#
Голосование за лучший ответ
Михаил Гридин Профи (678) 4 месяца назад
Каво
using System;

namespace ChessGame
{
class PositionCheck
{
public bool IsChecked(Chessboard board, ChessGamePiece currentPiece)
{
// Проверка шахов
if (currentPiece.IsKing && CanBeChecked(board.BlackKing, currentPiece))
{
return true;
}
return false;

}
}
}
кирилл кутлинскийЗнаток (266) 4 месяца назад
Эммм, ты даже координаты не указал
Jurijus Zaksas Искусственный Интеллект (458580) Очевидно, что координаты хранит базовый класс фигуры. Ну а так-то тут просто фигня на постном масле, конечно, а не код.
Jurijus Zaksas Искусственный Интеллект (458580) 4 месяца назад
Для решения этой задачи тебе придется реализовать иерархию классов. Я предлагаю (но не настаиваю) то, что ниже. Задание там формально выполнено, метод UnderCheck у короля присутствует. Если нужен полный код - реализуй оставшиеся фигуры и расставь их на доске.
 public struct ChessPosition : IEquatable<ChessPosition> 
{
private char x;
private int y;
public char X
{
get => x;
set
{
if (value < 'a' || value > 'h')
throw new ArgumentException("Invalid position");
x = value;
}
}
public int Y
{
get => y;
set
{
if (value < '1' || value > '8')
throw new ArgumentException("Invalid position");
y = value;
}
}

public bool Equals(ChessPosition other)
{
return other.X == X && other.Y == Y;
}

public ChessPosition(string _Position)
{
X = _Position[0];
Y = int.Parse(_Position[1].ToString());
}
}


public abstract class BaseChessFigurine
{
public enum ChessColor { White, Black }
private ChessColor color;
private ChessPosition position;
public ChessColor Color { get => color; }
public ChessPosition Position { get => position; }
public BaseChessFigurine(ChessColor _Color, ChessPosition _Position)
{
this.color = _Color;
this.position = _Position;
}
public abstract bool CanMoveTo(ChessPosition _NewPosition);
}

public class BaseChessBoard : List<BaseChessFigurine>
{
public bool Occupied(ChessPosition _Position)
{
foreach (var f in this)
if (f.Position.Equals(_Position))
return true;
return false;
}
}

public abstract class BaseMovingChessFigurine : BaseChessFigurine
{
protected BaseChessBoard Board;
public BaseMovingChessFigurine(ChessColor _Color, ChessPosition _Position, BaseChessBoard _Board) : base(_Color, _Position)
{
this.Board = _Board;
}

public bool UnderFire()
{
foreach (var figurine in Board)
if (figurine.Color != Color && figurine.CanMoveTo(Position))
return true;
return false;
}
}

public class King : BaseMovingChessFigurine
{
public King(ChessColor _Color, ChessPosition _Position, BaseChessBoard _Board) : base(_Color, _Position, _Board)
{
}

public override bool CanMoveTo(ChessPosition _NewPosition)
{
King NewKing = new King(Color, _NewPosition, Board);
return Math.Abs(_NewPosition.Y - Position.Y) < 2 && Math.Abs(_NewPosition.X - Position.X) < 2 && !_NewPosition.Equals(Position) && !NewKing.UnderCheck();
}

public bool UnderCheck() => UnderFire();
}
Похожие вопросы