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

Формула программиста
основатель — Волосатов Евгений Витольдович
Вызов от Робота Шарпа
Вебинар «Сокетный Клиент-Сервер на C#» начнётся через 14 час. 12 мин.

Сокобан / Сокобан - Решалка - Мышка

  • Мы начинаем решать задачу по решению игры Сокобан с одним ящиком.
    Эта задача олимпиадного уровня на применение алгоритма поиска вширь.
    Главный герой - мышка Альфа, которая желает затолкать яблочко к себе в норку.
    Программу мы напишем за два урока.
    На первом уроке мы создадим вспомогательную функцию MoveAlfa(),
    которая подскажет мышке как попасть из одной клетки лабиринта в другую кратчайшим путём.
  • Дата отправки отчёта: 20 июля 2015 г.
  • Задание выполнено: за 1 час. 45 мин.
  • Чему научился: познакомилась с алгоритмом поиска в ширину, нахождения кратчайшего пути, познакомилась со списком Queue<>(коллекциями) и продолжила изучать List<>
  • Что было сложным: сложностей не возникло, вот только смущало что мой тестер показывал invalid, хотя поняла что на данном этапе путь корректный правильно заданный и все хорошо работает
  • Комментарии: Замечательный урок, жду продолжения, когда уже и ящик (яблоко) буду перемещать!!! Спасибо за это чудо что у меня выходит в итоге!!! :)
  • Оценка видео-уроку:
Отчёт от 24 за Сокобан / Сокобан - Решалка - Мышка


Отчёт от 24 за Сокобан / Сокобан - Решалка - Мышка




Оцени работу

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

2146. --
Иван
Иван
ответить
→  Олюшка  # Игра Сокобан / Сокобан - Решалка - Мышка / 2015-07-20 18:56

Чем дальше, тем интереснее. А про invalid, наверное, просто не правильно работает выведение самого сообщения. Вижу, что вам очень интересно, и вы не пропускаете ни одного дня без строчки кода! Это замечательно!


24. --
Олюшка
Олюшка
ответить
→  Иван  # Игра Сокобан / Сокобан - Решалка - Мышка / 2015-07-20 19:20

Иван, спасибо ограмное за поддержку! :)
Это из-за того что в тестере по мимо передвижения мышки еще и ящик нужно передвигать а так как это еще не реализовано по этому и пишет что инвалид :)
Да, я дорвалась до Сокобана, очень хотела его и уже давненько, вот теперь не могу пропустить день чтобы не заниматься! :)



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





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

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

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

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


Научился: Повторил алгоритм поиска в ширину, увидел его реализацию с использованием очереди.
Трудности: Был момент, когда мое решение не работало. Искал причину, ошибка была в том, что у нас в этой программе используется один массив для статических и динамических объектов. Поэтому когда игрок достигал целевой точки, то вставал на ее место и она исчезала из карты. Решил с помощью дополнительных переменных, но решение с двумя массивами лучше.
На этот раз решил поэкспериментировать, разделить код по классам. Полученным решением более-менее доволен, уже можно расширять и создавать новые программки из этих маленьких кирпичиков. Немного расширил функционал программы, добавил меню, возможность установки позиций игрока и целевой точки, расчет по этим точкам траектории движения и пошаговый режим к целевой точке.


Научился: Немножко познакомился с очередью.
Трудности: Повторить не сложно, сложно будет всё это понять....
1 for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) зачем поменяли циклы местами? почему необходимо сначала по y считывать? 2 string[] info = lines[0].Split(); - что обозначает 0 в квадаратных скобках? знак пробела? знак переноса строки в юникоде? 3 map = new char[w, h]; - уже инициализировали map выше, зачем делать еще раз это со словом new? можно ли map = [w][h];? Вопросы есть еще, но пока не буду их задавать....