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

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Демо игры / Лабиринт 2D - игра

  • На этом уроке мы создадим два уровня игры и запрограммируем их.
    В игре будут предметы для собирания, ключи, двери, мигающие стены.

    Задание:
    Создать два или три уровня для игры Лабиринт.
  • Дата отправки отчёта: 30 июня 2018 г.
  • Задание выполнено: за 23 час. 17 мин.
  • Чему научился: Хочу кое-что объяснить. Я пришёл на этот сайт уже со стандартным набором знаний по C# в надежде дополнить его до профессионального. Поэтому я в большинстве случаев и пишу в отчётах, что ничего нового на уроке не узнал. Вы уж не обижайтесь и не считайте меня каким-то "Знайкой-Зазнайкой" :-). Я пришёл сюда, как и многие, учиться, делиться знаниями и опытом программирования на C# (и не только на нём), набираться ещё большего опыта. Тем более, что его-то мне катастрофически не хватает.
    Несмотря на вышесказанное, урок был очень интересным. При тестировании 2-го уровня у меня были случаи, когда после прохождения 1-го уровня курсор мышки на доли секунды оставался на поле "Финиш" 2-го уровня и я попадал сразу на 3-ий.  Эту проблему я решил, добавив в метод-обработчик события "labelFinish_MouseEnter" условие: "Если дверь открыта, тогда завершить уровень":
    private void labelFinish_MouseEnter(object sender, EventArgs e)
    {
        if (! labelDoor.Visible) FinishGame();
    }
    . Интересно получается: вроде поле "Финиш" закрыто дверью, и на него не попадёшь, пока ключ не возьмёшь, но в действительности это не так. И я думаю, что Евгений Витольдович специально оставил этот баг, так сказать, на "засыпку".
    Ещё я столкнулся с тем, что при запуске по центру родительского контейнера у меня, в отличие от Евгения Витольдовича, 2-я, 3-я и 4-я формы налезали на заголовок окна 1-й. Поэтому я не стал убирать у них рамку, а оформил их так же, как 1-ую. Но столкнулся со следующей проблемой: на первых порах (пока не прописано, что за боковые стены заходить нельзя) при сворачивании последующей формы видна предыдущая. Посоветуйте, пожалуйста, как решить эту проблему. Сейчас, благодаря появлению модального окна при заходе на боковые стены, свернуть основное окно невозможно. Но всё-таки хочется запускать все формы в одном окне и сохранить при этом возможность сворачивать окно. Заранее благодарен всем откликнувшимся.
  • Что было сложным: Разместить 2-ую и последующие формы в нужном месте.
  • Оценка видео-уроку:
Отчёт от 18953 за Демо игры / Лабиринт 2D - игра


Отчёт от 18953 за Демо игры / Лабиринт 2D - игра




Оцени работу

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

18953. --
Дмитрий
Дмитрий
ответить
# Демо игры / Лабиринт 2D - игра / 2018-06-30 16:53

Извините, из-за усталости ошибся в методе "timer1_Tick". Программа правильно работала только по счастливому стечению обстоятельств. А нужно было вот так:
       
        private void timer1_Tick(object sender, EventArgs e)
        {
            Point point;

            int spaceX, spaceY;

            var stepX = this.stepX;
            var stepY = this.stepY;

            spaceX = moveObstacleX.Location.X - obstacle_1.Width;

            if ( (this.stepX < 0) && (Math.Abs(this.stepX) > spaceX) )
            {
                stepX = -spaceX;

                this.stepX = -this.stepX;
            }

            spaceX = obstacle_3.Location.X - (moveObstacleX.Location.X + moveObstacleX.Width);

            if ( (this.stepX > 0) && (this.stepX > spaceX) )
            {
                stepX = spaceX;

                this.stepX = -this.stepX;
            }

            point = moveObstacleX.Location;
            point.Offset(stepX, 0);
            moveObstacleX.Location = point;


            spaceY = moveObstacleY.Location.Y - obstacle_2.Height;

            if ( (this.stepY < 0) && (Math.Abs(this.stepY) > spaceY) )
            {
                stepY = -spaceY;

                this.stepY = -this.stepY;
            }

            spaceY = obstacle_4.Location.Y - (moveObstacleY.Location.Y + moveObstacleY.Height);

            if ( (this.stepY > 0) && (this.stepY > spaceY) )
            {
                stepY = spaceY;

                this.stepY = -this.stepY;
            }

            point = moveObstacleY.Location;
            point.Offset(0, stepY);
            moveObstacleY.Location = point;
        }


1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Демо игры / Лабиринт 2D - игра / 2018-06-30 19:52

Дмитрий, молодец. Не зацикливайся на этой программе - двигайся вперёд.
И, поскольку у тебя уже есть некоторый опыт - тебе будет интересно и полезно порешать задачи в рзаделе Консоль


  • Отчёт оценивали:
    791Валерий Жданов+1   17947Dmitry Sinitsin+1   17443WildOrc+1   1Евгений Волосатов+1   17606Виктор+1   3747Сергей+1   16218Дмитрий+1   6452Кирилл Шмойлов+1   Посетитель+1   17255Слава+1   3922Александр+1   17425ser2018+1   7645Александр Львович+1   5394Anton+1   18688Arslan+1   459Сергей Сергеевич+1  

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





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

Ты в любой момент сможешь отписаться от рассылки.


Научился: сохранять координаты контрола и корректировать их.
Все доступно и понятно. Спасибо за урок.


Научился: Создавать уровни для игры.
Трудности: Придумать свой уровень.
Интересно и практично. p.s Скриншот моего уровня.