Я играю в шахматы и у меня ошибка, когда метод переопределения в дочернем классе не всегда переопределяет родительский класс.
Точнее говоря, о temp2.setgetMoves (генерации), но только во второй раз, когда он используется для пьесы. Ошибка возникает потому, что я использовал наследование с виртуальным методом в родительском и метод переопределения в дочерних классах. Например, в родительском классе метод:
abstract class Piece
{
String pieceType;
int pieceVal;
Panel piecePanel;
public Piece(String type, int value, Panel image)
{
image.BackgroundImage = (Image)(Properties.Resources.ResourceManager.GetObject(type));
pieceType = type;
pieceVal = value;
piecePanel = image;
}
public abstract List<Panel> setgetMoves(BoardGen board);
public virtual List<Panel> getMoves()
{
return null;
}
public String getType()
{
return pieceType;
}
public void setPanel(Panel newPanel)
{
piecePanel = newPanel;
}
public Panel getPanel()
{
return piecePanel;
}
public int getValue()
{
return pieceVal;
}
}
и в дочернем классе (например, это неполный пешечный класс, в нем еще нет ни кусочков, ни пассивов, ни продвижения, но это все, что я до сих пор получал) код:
class Pawn : Piece
{
public List<Panel> possibleMoves;
public Pawn(string type, int value, Panel image) : base(type, value, image)
{
}
public override List<Panel> setgetMoves(BoardGen board)
{
possibleMoves = new List<Panel>();
foreach (Panel x in board.getPanels())
{
if (this.getType().Substring(0, 1).Equals("W"))
{
if (this.getPanel().Location.Y == 240 && ((x.Location.Y == this.getPanel().Location.Y - 40) || (x.Location.Y == this.getPanel().Location.Y - 80)) && (x.Location.X == this.getPanel().Location.X))
{
possibleMoves.Add(x);
}
else if((x.Location.Y == (this.getPanel().Location.Y - 40)) && (x.Location.X == this.getPanel().Location.X))
{
possibleMoves.Add(x);
}
}
else if (this.getType().Substring(0,1).Equals("B"))
{
if (this.getPanel().Location.Y == 40 && ((x.Location.Y == this.getPanel().Location.Y + 40) || (x.Location.Y == this.getPanel().Location.Y + 80)) && (x.Location.X == this.getPanel().Location.X))
{
possibleMoves.Add(x);
}
else if (x.Location.Y == this.getPanel().Location.Y + 40 && (x.Location.X == this.getPanel().Location.X))
{
possibleMoves.Add(x);
}
}
}
return possibleMoves;
}
public override List<Panel> getMoves()
{
return possibleMoves;
}
Любая помощь в том, почему он не может переопределить второй раз, будет очень полезна. Спасибо.