2013-10-25 7 views
1

Im новый для мира кодирования и начал кодирование шахматной доски с XNA в C#. Я получил этот кусок кода, который, как мне кажется, должен быть применен в методе уменьшения беспорядка и повышения эффективности, но Im не совсем уверен, как это сделать.Есть ли более эффективный способ сделать это?

if (movement.isSelected == false) 
{ 
    if (movement.PawnBl1pos.X <= movement.mouseCord.X 
     && movement.PawnBl1pos.X + 100 >= movement.mouseCord.X 
     && movement.PawnBl1pos.Y <= movement.mouseCord.Y 
     && movement.PawnBl1pos.Y + 100 >= movement.mouseCord.Y) 
    { 
     movement.PawnBl1Col = Color.Red; 
     movement.isSelected = true; 
    } 
} 

У меня есть 32 разных спрайта, и текущий план состоит в том, чтобы скопировать этот код для каждого спрайта. movement.PawnBl1pos - это Vector2 для 1-й черной пешки, и все, что мне нужно сделать, это заменить векторы для каждой части.

Можно ли изменить этот бит кода для каждой части без простой копии? Я уверен, что термин для этого будет полиморфизмом?

(movement.PawnBl1pos.X <= movement.mouseCord.X 
&& movement.PawnBl1pos.X + 100 >= movement.mouseCord.X 
&& movement.PawnBl1pos.Y <= movement.mouseCord.Y 
&& movement.PawnBl1pos.Y + 100 >= movement.mouseCord.Y) 
+0

Это не полиморфизм. Полиморфизм - более правильно * Политизм подтипа * - это идея, что «если мой метод может кормить * любое животное *, то я могу использовать его для питания жирафа *». –

ответ

2

Вы должны хранить свои фигуры в массиве, а затем перебирать этот массив. Копирование некоторого кода 32 раза никогда не является хорошей идеей ..!

Arrays Tutorial

+0

Если ОП верит в себя, я предлагаю использовать биты вместо массивов. – Zong

2

Понятие вам нужно научиться это массивы.

Каждый квадрат на шахматной доске должен быть элементом массива квадратов. У вас должно быть 64 квадрата. Вы можете представить каждый квадрат классом, который вы определяете.

Каждая фигура шахматы также может быть представлена ​​классом, и каждый из них будет членом массива. Самый чистый способ сделать это - определить базовый класс, а затем извлечь его из каждой части.

Square[] squares = new Square[64]; 

public class Square 
{ 
    public Point Location { get; set; } 
    public Piece Resident { get; set; } 
} 

public enum TeamColor 
{ 
    Red, 
    Black 
} 

public abstract class Piece 
{ 
    public TeamColor Color { get; set; } 
    public Square Location { get; set; } 

    public abstract Square[] MovesAllowed(Square[] allSquares); 
} 

public class King : Piece 
{ 
    public override Square[] MovesAllowed(Square[] allSquares) 
    { 
     ... 
    } 
} 

Таким образом, каждый тип части (King, Queen, пешки и т.д.) можно рассчитать свои возможные ходы и вам не нужно, чтобы проверить, какой тип части это, вы просто массив Пьесы ,

Смежные вопросы