Создание обьектов Типа согласно ячейкам Шахматной доски

256
25 августа 2018, 21:40

Подскажите как реализовать вот такую идею List'ом (наверное, только не List в List'е), ибо двумерные, рваные массивы не подходят по условиям задачи, Dictionary тоже.

Идея такова:

  • Есть тип Board и ссылка на тип Field(Поле игровой доски)
  • У каждого обьекта типа Field разные поля. Например:
  • (PositionField = a1, color = white)
  • (PositionField = a2, color = black)
  • ...
  • (PositionField = b8, color = black)
  • Как сделать лист из 64 обьектов(типа Field), но что бы это был максимально сжатый и красивый код, а то у меня в голове, только 64 обьекта инициализировать вручную
Answer 1

Первое, что пришло в голову. Если у вашего Field другие поля, то поправьте (например, Color на string). Инициализирует список длиной 64 значениями Field с чередующимся цветом клетки.

struct MapFiled
{
    public readonly char Row;
    public readonly int Line;
    public readonly Color Color;
    public MapFiled(char row, int line, Color color)
    {
        Row = row;
        Line = line;
        Color = color;
    }
}
static void Main(string[] args)
{
    List<MapFiled> map = new List<MapFiled>(64);
    bool isFieldBlack = true;
    for (char row = 'A'; row <= 'H'; row++, isFieldBlack = !isFieldBlack)
        for (int line = 1; line <= 8; line++, isFieldBlack = !isFieldBlack)
            map.Add(new MapFiled(row, line, isFieldBlack ? Color.Black : Color.White));
}
Answer 2

Самый красивый код (перевод на С# оставлен в качестве упражнения для читателя):

var rows = "12345678"; 
var cols = "abcdefgh"; 
 
var fields = []; 
for (var i = 0; i < rows.length; i++) { 
  for (var j = 0; j < cols.length; j++) { 
    fields.push({  
      pos: cols[j] + rows[i],  
      color: ((i + j) % 2)? "black" : "white"  
    }); 
  } 
} 
 
var html = ""; 
for (var f = 0; f < fields.length; f++) { 
  html += "<div class='field " + fields[f].color + "'>" +  fields[f].pos + "</div>" 
} 
document.querySelector(".board").innerHTML = html; 
//console.log(JSON.stringify(fields));
.board { 
  width:200px; 
  height:200px; 
  border:1px solid black; 
} 
.field { 
  width:12.5%; 
  height:12.5%; 
  display:inline-block; 
  text-align:center; 
  line-height: 150%; 
} 
.white { 
  color:#00000088; 
  background:white; 
} 
.black { 
  color:#ffffff88; 
  background:black; 
}
<div class="board"></div>

READ ALSO
Изменение сущностей в событии OnFlushDirty в NHibernate

Изменение сущностей в событии OnFlushDirty в NHibernate

Есть сущность "настройки", в которой хранится путь к даннымЕсть сущности, которые пользуются настройками, чтобы строить свой путь к данным

183
C# цепочка функций

C# цепочка функций

Есть 2 метода расширения :

184
Вырезать текст из предложения

Вырезать текст из предложения

Есть большое предложение, из которого нужно вырезать такую часть:

162
Реализация сокета socket.io + node.js + php

Реализация сокета socket.io + node.js + php

Я очень плох в сокетах и JS, поэтому прошу понимания)) Вдохновленный этой статьей, решил попробовать написать подобное у себяУ меня есть PHP скрипт,...

235