На этом уроке мы сделаем анимацию раскладывания всех плашек домино на столе. Для этого напишем метод RollDomino(), а ещё нам потребуется отлавливать момент, когда все доминошки уже выложены на стол. Для этого мы добавим поле string mode, чтобы в таймере отловить этот момент.
Дата отправки отчёта:
5 марта 2016 г.
Задание выполнено: за
20 мин.
Чему научился:
Выполнил все задания. Для режима игры
Что было сложным:
Придумать свой способ появления плашок. Они выезжают по диагонали с учетом парности строчки. На 2м скриншоте запечатлен момент моего способа появления.
Комментарии:
Удивительно легко можно редактировать способ появления плашек.
Оценка видео-уроку:
Оцени работу
Сохранить страницу:
Начинаем практику по языку C#
Чтобы стать хорошим программистом — нужно писать программы.
На нашем сайте очень много практических упражнений.
После заполнения формы ты будешь подписан на рассылку
«C# Вебинары и Видеоуроки»,
у тебя появится доступ к видеоурокам и консольным задачам.
Несколько раз в неделю тебе будут приходить письма —
приглашения на вебинары, информация об акциях и скидках,
полезная информация по C#.
Научился: Так как работа анимации привязана к таймеру и не зависит от основного потока управления программы, то научился определять момент завершения анимации, с помощью проверки статуса stopped. Трудности: Придумать свой вариант анимации, в моем случае четные строки появляются слева, нечетные справа. В начале урока был разговор об альтернативных вариантах дизайна классов анимаций. На мой взгляд, анимация это некий процесс, действие, которое не привязано к домино. Текущий дизайн не позволяет мне использовать эту иерархию классов для того же самого Аполлона, так как в базовом классе Animate мы явно указали зависимость от SpriteDomino.
В качестве возможного решения, можно разделить данные от алгоритмов. Данные - это спрайты. Алгоритмы - это анимации. Данные реализовать в виде иерархии классов Sprite. В классе Sprite добавить поле Animate, которое будет означать текущую анимацию, которую можно потом гибко менять по ситуации.
struct Point {
int x;
int y;
}
interface Animate {
void play();
Point position();
}
class AnimateStatic : Animate{}
class AnimateMove : Animate{}
class AnimateTurn : Animate{}
class Sprite {
Animate animation;
int x, y;
public void set_animation(Animate a)
{
animation = a;
}
public virtual void Draw()
{
animation.play();
Point location = animation.position();
x = location.x;
y = location.y;
}
}
class SpriteDomino : Sprite {}
class SpriteFlower : Sprite {}
void test()
{
Sprite domino = new SpriteDomino();
domino.set_animation(new AnimateMove());
domino.Draw();
domino.set_animation(new AnimateTurn());
domino.Draw();
Sprite flower = new SpriteFlower();
flower.set_animation(new AnimateMove());
flower.Draw();
}