Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Теория ООП / Интерфейс. Кружок хочет играть.

  • На этом уроке мы унаследуем кружок от интерфейса Игрок.
    Теперь для запуска программы нам придётся реализовать
    методы из его интерфейса.
    В этом уроке мы реализуем методы Голя() и НеГоля().
  • Дата отправки отчёта: 5 декабря 2015 г.
  • Задание выполнено: за 1 час. 00 мин.
  • Чему научился: Вспомнил что такое наследование. Начали реализовывать интерфейс. Про Беги(). Либо мы пошагово делаем ходы - для этого нужна кнопка "Step". Затем по всей видимости рендомно понимаем поймал Голя кирпичом игрока или не поймал. Либо мы запускаем игру и игроки сами играют уже без вмешательства извне - опять же нужна кнопка "Игра". Бегают игроки как я понимаю только в пределах Арены и друг на друга не залезают.
    Поймал(). Если TRUE то сам Голя становится как все а тот кого он поймал - цвет Голи.
    Опять же кнопочка ПАУЗА нужна нам - или нет....
  • Что было сложным: думать что дальше делать, представить всю картину целиком
  • Комментарии: я вот понять не могу - private set мы зачем замутили если мы все-таки меняем color в методах?
  • Оценка видео-уроку:
Отчёт от 3146 за Теория ООП / Интерфейс. Кружок хочет играть.




Оцени работу

 
Сохранить страницу:

7276. Ильшат
Ильшат
ответить
→  Оля  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-06 15:20

Оля, пожалуйста. Ты молодец, здорово прогрессируешь)


7276. Ильшат
Ильшат
ответить
→  Иван  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-06 15:19

Иван, пожалуйста. Рад, что помог)


2146. Иван
Иван
ответить
→  Ильшат  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-06 00:34

Ильшат! Спасибо огромное! Сохранил объяснения, что бы всегда были под рукой! Очень понятно и доступно. Полезно, все-таки проверять отчеты.


24. Оля
Оля
ответить
→  Permitin Alexey  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-05 23:41

Алексей, рада что ты продвигаешься и набираешься знаний, уверена теперь тебе тоже слало еще больше понятней! :)


24. Оля
Оля
ответить
→  Ильшат  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-05 23:40

Ильшат, спасибо за такое подробное объяснение, мне теперь понятно!


7276. Ильшат
Ильшат
ответить
→  Permitin Alexey  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-05 22:34

Не совсем так, readonly это константа времени выполнения, я бы сказал, константа конкретного объекта, значение которой можно установить только в двух случаях - при объявлении, например class A {readonly int a = 6;} или в конструкторе класса
class A
{
    readonly int a;
    public A(int value)
    {
        a = value;
    }
    public void fail(int value)
    {
        a = value; // ошибка компиляции.
    }
}

Таким образом, readonly позволяет установить для каждого объекта свою константу. Удобно. У нас есть константа, мы ее не можем случайно изменить, но мы можем варьировать ее значение в момент создания объекта. Например, у любого товара есть дата изготовления, которая в дальнейшем не может измениться. При создании объекта класса Товар мы задаем значение константы и в дальнейшем не имеем права его менять, это ведь логично?

Еще есть модификатор const - это константа времени компиляции. Более ограниченная штучка, подходит для примитивных типов. Перед компиляцией программы константа должна знать свое значение и оно не может меняться в течение программы. Например const double earth_gravity = 9.8; Менять фундаментальную гравитацию Земли невозможно, поэтому для нее нужно выбрать модификатор const.


3146. Permitin Alexey
Permitin Alexey
ответить
→  Ильшат  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-05 22:04

так вот чем отличается readonly от { get; private set; }
БОЛЬШОЕ СПАСИБО Ильшат!


7276. Ильшат
Ильшат
ответить
→  Permitin Alexey  # Теория ООП / Интерфейс. Кружок хочет играть. / 2015-12-05 21:30

public Color color { get; private set; } означает, что изменить значение свойства может только метод из класса, содержащий это свойство. Внешние методы других классов могут только читать значение color, например метод Arena.Show использует цвет Circle для его отображения на площадке. Зачем это нужно, почему private set? Для того, чтобы пользователь Circle не имел возможности по ошибке, от усталости или просто от незнания сломать код, изменить цвет круга напрямую (так как это важное состояние объекта), а мог изменить только через способы, разрешенные разработчиком класса Circle, то есть через методы Голя(), НеГоля().


  • Отчёт оценивали:
    6203Николай (nick27m)+1   8118Юрий +1   6391Владимир+1   3747Сергей+1   459Сергей Сергеевич+1   7901Влад+1   2639Морозов Юрий Александрович+1   6452Lik_Kirill+1   7276Ильшат+1   1Евгений Витольдович+1   6925Артём+1   4853Alexander Sidorov+1   7645Александр Львович+1   24Оля+1   1232Фомичева Наталья+1   7573Павел+1   2146Иван+1   6080annaka+1   7788Ксения+1   8Василевская Елена0   4383Maryna Zhuravlova+1  

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: прокачиваюсь
Трудности: прокачиваюсь
прокачиваюсь
Научился: Закрепил навыки.
Трудности: Описать словами содержимое методов Беги(), Поймал().
Метод Беги(). Наш круг описывается координатами центра center (Point) и радиусом(int). В конце урока была дана подсказка, две целочисленные переменные sx, sy. Эти переменные могут означать смещение координат центра. Могут означать изменение радиуса. Но мы должны реализовать не метод Расширься(), а метод Беги(), то есть изменение координат самого круга, а это определяется координатами центра. Так что, думаю что надо в методе Беги() изменить координаты центра: center = new Point(center.x + sx, center.y + sy); В методе Поймал(object obj) нам надо проверить поймал ли текущий кружок this того, что мы получили в аргументах. Физическая реализация этого представляется проверкой на столкновение или, точнее, пересечение двух окружностей (Так как у нас объекты круги). Пересечение двух окружностей это не rocket science, решение известно - это определение дистанции между центрами окружностей и сравнение этого значения с суммой радиусов. Если дистанция меньше суммы, то ... кружок поймал другой кружок. public bool Catch(object obj) { Circle second_circle = (Circle)obj; int distance = Convert.ToInt16(Math.Sqrt( (center.X - second_circle.center.X) * (center.X - second_circle.center.X) + (center.Y - second_circle.center.Y) * (center.Y - second_circle.center.Y))); return distance < radius + second_circle.radius; }