Дата | Видеоурок | Результат | |
---|---|---|---|
Платформер на Unity 12. VIP. Checkpoints | + 17 | ||
создавать чекпоинты (в смысле схранения позиции для респавна). Box Collaider 2D + trigger. По событию OnTriggerEnter2D делаем db.sstartPos = transform.position; радоваться результату.. как-то быстро курс пролетел, а еще Дима обещал батут. И где оно? |
|||
Платформер на Unity ФИНАЛЬНЫЙ УРОК | + 13 | ||
1 Создали меню из 2х кнопок и скрипт с обработчиком нажатий. Научились загружать сцены. Поработали с GUI: Buttons, Text, Canvas, Camera. 2 Создали уровень используя готовый ассет из стора: фон, земля, трава, деревья, персонаж. Добавили коллайдер с триггером, и риджитбади чтоб сделать тело твердым, нарезали спрайты в Спрайт Эдиторе и создали анимацию для нашего персонажа. 3 Научились опрашивать клавиатуру и перемещать персонажа, и делать это плавно). Вертеть по оси Х когда персонаж меняет направление движения. В аниматоре научились менять скорость анимации и переключаться между состояниями покоя - бега. 4 Научились прыгать, убрали возможность прыгать в воздухе (как в энгри бердс - но там оно птица, ей можно). 5 Добавили монеты и БД(статический класс для хранения конфигурации игры и класс для инициализации на старте), научились уничтожать обьекты (собирать монеты) по триггеру, добавили счетчик собранных монет и визуализацию. 6 Добавили препятствия: непроходимое с коллайдером, которое можно перепрыгнуть и убийственный шип с триггером, который отправляет нас на респ. 7 Реализовали переход между уровнями - дверь. 8 Создали кровожадного монстра с ИИ который мало того что обладает поведением шипа, так еще и ходит между двумя точками, чего ему на месте не сидится то. 9 добавили возврат на респ при падении с платформ, ато лететь в бесконечность было не комильфо. Из-за сложностей с интернетом и кучей сервисов включая ютуб видеообзор будет письменным. Минусы: исчизают монетки, а должны жизни. Мелкие недочеты: при переходе на новый уровень монеток на счетчике 0, пока не возьмешь первую монетку, тогда счетчик показывает правильное число. Много на мой взгляд методов со словом Старт, что сбивает иногда с толку. Везде используется КемелКейс и это правильно, кроме tempvector и start_pos. Желательно чтоб все было единообразно, то есть в одном стиле. Плюсы: Димандос ответственно подошел к созданию курса, все сложные моменты доступно разъяснил, рассказал про полезные сочитания клавиш, такие фишки как плавное движение, поворот персонажа, запрет кувырков, возвращение на респ, путешествие НПС между чекпоинтами. Узнал много интересного, например Collider2D[] colliders = hysics2D.OverlapCircleAll(transform.position, 0.5f); обнаружение коллайдеров в заданном радиусе. В общем долго все перечилять. Полезный практичесский курс, много всего интересного, мне понравилось. Нужно продолжение. |
|||
Платформер на Unity 10. Создание Искусственного интеллекта | + 13 | ||
создавать врагов, шевелить их между 2мя точками. Узнал что у update есть автодополнение и тип метода и скобочки студия сделает сама, узнал что float довольно шаловливый тип. Так же когда мы размещаем на сцене пустые обьекты их можно подкрашивать для удобства, чтобы не щелкать по ним мышкой в инспекторе и смотреть где они себя проявят. Как подкрасить я вставил на скринах. Непонятно откуда взялась 5ка, вроде раньше у нас было 1? Vector3 tempVector = new Vector3(5, 0, 0); |
|||
Платформер на Unity 9. Переход между уровнями | + 10 | ||
находить выход с уровня с помощью двери. Поставил на нее коллайдер с триггером и написал скрипт для перехода на след уровень: SceneManager.LoadScene("Level"+levelCount) Не мог понять почему все вроде бы правильно, а дверь по прежнему закрыта. А дело было в опечатке в слове уровень - "Leavel". |
|||
Платформер на Unity 8. Препятствия | + 15 | ||
добавлять препятствия, делать так чтобы препятствия наносили материальный урон, создавать точку привязки персонажа к началу уровня и возвращаться к ней по триггеру на шипе. Кстати забирать все деньги это жестоко, лучше за 1 укол забирать 1 монетку, ну или даже жизнь, а монетки не трогать. Хотя если посмотреть на это со стороны Диминдоса "жизнь или кошелек?", то он таким образом купил себе бессмертие. Все-таки со всеми этими стартами запутался. Нужно было как-то по другому называть методы. Например PlayerRespawn и CoinsRenew |
|||
Платформер на Unity 7. Монеты и База Данных | + 15 | ||
создавать монетки и анимации для них, включать триггер на коллайдере монетки, для взаимодействия с персонажем. Так же создал статический метод для хранения данных и метод для инициализации. Добавил счетчик собранных монет, метдо для уничтоженя собранной монетки и создал юай элемент для отображения количества собранных монеток. Чтоб не запутаться в Start и Starting, а может и других будующих методах/классах с похожими названиями, скрипт для инициализации переменных назвал Init, ну и заодно Monets на Coins поменял. А вообще варинт с хранением данных и их инициализацией в разных местах интересный. |
|||
Платформер на Unity 6. Оформление уровня | + 17 | ||
добавлять музыку, закрашивать фон камеры в цвета неба, увеличивать фон чтоб не было видно краев. Делать лесенку и украшать все это цветочками и деревьями. Теперь на вопрос: "Ты что краёв не видишь?" можно смело отвечать - нет. |
|||
Платформер на Unity 5. Прыжок персонажа | + 16 | ||
прыгать и танцевать нижний брейк. Подсчитывать количество граничащих коллайдеров с помощью OverlapCircleAll и придавать импульсное ускорение для прыжка с помощью AddForce(transform.up * jumpForce, ForceMode2D.Impulse). Запрещать поворот спрайта по оси Z с помощью Rigitbody2D/Constraints/FreezeRotation/Z checkIn Была идея сделать с помощью кнопки "R"(otate) переворот персонажа с головы на ноги, когда он падает с края верхней платформы. Тогда бы он не висел над обрывом чудом держась за него, как в случае с фризиротайшн, а падал на голову и сразу вставал на ноги. Не то чтоб это совсем не получилось, получилось сделать частично, результат на 2м скрине. |
|||
Платформер на Unity 4. Движение персонажа | + 11 | ||
Двигать персонажа по платформе. Еще у Horizontal и Vertical привязаны кроме стрелочек кнопки из шутеров WSAD, мне вот ими гораздо удобнее управлять чем стрелочками. Узнал про плавное перемещение с помощью MoveTowards и удобное сокращение для Vector3(1, 0, 0) - Vector3.right. Научился переворачивать спрайт, когда идем в другую сторону sprite.flipX = tempVector.x < 0. Научился переключать анимацию покоя - бега. Узнал как прерывать предыдущую анимацию с помощью галочки Has Exit Time. Ещё пока двигал туда сюда по платформе митбоя узнал по походке откуда взят персонаж и как его зовут. Тем кто в ответах попытается угадать подскажу - в русском варианте он коричневого цвета. Пропустил момент с исправлением SpriteRenderer и думал почему в уроке все работает, а у меня подчеркивает как ошибку. Вообще конечно звук в этом уроке хромал, выкрутил громкость на всю чтоб слышать. Пытался читать по губам, но лектор навел на себя лампу как на допросе и вместо лица большую часть времени было белое пятно, поэтому этот вариант толже не прокатил. Может быть можно в каком-то звуковом редакторе звук подкрутить чтоб было нормально слышно не перезаписывая заново весь урок? |
|||
Платформер на Unity 3. Графика и физика | + 13 | ||
Двигать обьекты с привязкой к сетке, через зажатый Ctrl. Создавать фон, платформу и персонажа. Нарезать в Sprite Editor'е через Slice спрайты для анимации. Создавать анимацию и регулировать ее скорость. Наделять обьект физическими свойствами Rigidbody и не давать обьектам проходить сквозь друг друга с помощью Box Collider'а. Импортировать ассет. В юнити он так и не открылся, нашел копии ассетов тут - https://www.gamedevmarket.net/ и вставил руками. Сайт сделан немножко через жепо, кнопка довнлоад добавляет в корзину, а не скачивает ассет. Потом в корзине нужно нажать кнопку посчитать стоимость, появится кнопка сделать заказ. После этого уже с почты на которую зарегестрирован можно скачать в виде зип архивов нужные ассеты. Заодно выкачал кучу бесплатных ассетов симпатичных. |
|||
Платформер на Unity 2. Меню | + 17 | ||
Студия пишет, что Application.LoadLevel устарело и нужно использовать SceneManager.LoadScene из UnityEngine.SceneManagement. Смысл тот же, буквы другие. Прилепил на скрине изменения. Фон при запуске не хотел расстягиваться на весь экран сколько бы я якори не менял. А дело было в том, что по умолчанию стояло разрешение Standalone(1024x768). После выбора Free Aspect - стало на весь экран, скрин прилепил. |
|||
Платформер на Unity 1. Вступление | + 9 | ||
Еще можно Unity Hub поставить, удобная шутка. И ланчер и менеджер проектов. |
|||
Клиент-серверный сокет Простейший сервер | + 17 | ||
127.0.0.1 не используется потому что программа может использоваться на любом айпи. Именно такой у нас сейчас потому что на локальном компе. Если поднимем сервер где-то в интернете будет другой айпи. И серверу это всё равно, он слушает порт. Кто попало к нему не подключится. Трудно будет угадать и адрес и порт. Клиент уже точно должен знать где сервер и на каком порту. |
|||
Клиент-серверный сокет Что такое сокет | + 13 | ||
127.0.0.1:8000 accept() ожидание. Адрес порт для слушателя на сервере Input read поток ввода Output write поток для вывода |
|||
Мат Конём и Слоном Постановка задачи | + 20 | ||
На счет необычности не уверен, но в примере вроде было не так как у меня. |
|||
Система Git ФИНАЛЬНЫЙ КУРС | + 16 | ||
Даже не знаю нужно ли писать отзывы о ваших курсах, пока ни одного не интересного или бесполезного я не встретил. Теперь о GIT. Это довольно непонятная и запутанная штука, но полезная. Хранит всю вашу историю гениальности где-то где можно при необходимости посмотреть, а как я решал эту проблему в прошлом. Или если на распутье пошел не туда, вернуться и пойти в другую сторону. О курсе. Отличный курс. Идея показать на пальцах(папках), а как же оно происходит на самом деле, под капотом так сказать - хороша. Когда понял что и как делается уже можно было и не смотреть как это происходит в винде, так как в баше все быстро и понятно стало. Из ценного лично для меня в курсе - ушел страх перед merge, даже не столько перед самим объединением веток, а как его следствием перед разрешением конфликтов. Теперь можно попробовать теорию почитать. Спасибо за науку! 1й урок. Были сложности с компилятором явы. Нужно было прописать пути и переменные среды. И еще 1 интерактивный курс на английском на картинке. |
|||
Система Git win final | + 16 | ||
Делать мерж закинутой на сервер ветки средствами виндовс ТС 9.20 уже есть Наверное перед английским вариантом не помешает закрепить все на русском https://githowto.com/ru |
|||
Система Git remote merge | + 16 | ||
git merge --abort отменить попытку объединения git push origin pingwin закинуть свою ветку на удаленный сервер С основного компа git pull git log --graph --all --oneline git branch git branch -a git checkout pingwin atech@DESKTOP-N2MO437 MINGW64 /e/.VIDEO/[ITVDN] Volosatov/3_Git/Zoo-git (pingwin ) $ dir посмотреть что в папке, а вообще в текущей ветке git merge master git status git add . git commit -m PingWinMerge если забыть написать описание к комиту попадем в окно с ошибкой выйти из него :Х git checkout master git merge pingwin git log --graph --all --oneline git push Затем синхронизируем удаленный комп который все это затеял git checkout master git pull И проверяем что работает javac Zoo.java java Zoo Был момент когда я быстренько решил конфликт, закинул пингвина и зуу на отслеживание, уже написал гит коммит пингвин, и не нажал на энтер, дай думаю посмотрю а в видо что. А в видео фраза, но мы будем делать не так) тогда я все отменил и выдохнул. Конечно можно было и после комита все вернуть, но зачем усложнять себе жизнь. |
|||
Система Git pingwin | + 16 | ||
Добавлять пингвинов |
|||
Система Git win merge | + 17 | ||
Выглядело проще в win, по крайней мере для небольшого количества файлов. А сделать объединение наверное будет быстрее в git. Сложным из всего этого является приведение к общему знаменателю. |
|||
Система Git git merge giraffe lion | + 17 | ||
Объединять ветки git merge master. Это проверка, кодовый ответ Already up to date. git checkout master git merge lion git log --graph --all --oneline git checkout giraffe git merge master, теперь я знаю как выглядит неправильный ответ на кодовую фразу: Auto-merging zoo.java CONFLICT (content): Merge conflict in zoo.java Automatic merge failed; fix conflicts and then commit the result. Указанный файл правим вручную (ну кстати странное неавтоматическое решение, которое конечно можно понять, это у нас остаются оба варианта, в других случаях может придется выбирать), смотрим что получилось git status Трекаем проблемный файл git add . Приводим жирафа в соответствие с мастером git commit -m Merge, в конце строки пропадает добавленное слово мерж и остается только название ветки жирф, где мы есть. git checkout master git merge giraffe - наконец все в одной куче Получилось долго и длинно, но вот такой он мерж. Отличная шутка на счет того что выйти отсюда можно только ресетом, сразу вспомнил миллион поисковых запросов "как выйти из vim'a?" Совсем в блокноте не используя IDE как советовал ЕВ все же набирать было лень, поэтому я использовал промежуточный вариант Visual Studio Code так вот оно предложило мне решить конфликт одной кнопкой на выбор(на 2м скрине), это круто. |
|||
Система Git git branch giraffe | + 17 | ||
Добавлять жирафа git branch giraffe git checkout giraffe git log --graph --all --oneline можно убрать параметр декорейте |
|||
Система Git git branch lion | + 16 | ||
Создавать новые ветки git branch lion Смотреть какие ветки есть git branch Переключаться между ветками git checkout lion Выводить сокращенный лог коммитов git log --graph --all --decorate --oneline чтоб больше поместилось на экране Есть такой чувак Vincent Driessen и это не грязное ругательство, это автор git flow - удачной модели ветвления она из коробки уже поддерживается в SourceTree тут оригинал статьи https://nvie.com/posts/a-successful-git-branching-model/ тут художественный перевод https://habr.com/post/106912/ тут про применение в разработке https://pelevin.pro/2016/04/18/gitflow/ тут дальнейшее развитие этой идеи https://habr.com/company/softmart/blog/316686/ |
|||
Система Git hippo git fetch pull | + 16 | ||
Добавлять изменения с другого компа git push Получать изменения с сервера в локальный репозиторий git fetch Смотреть, какие ветки у нас есть в данный момент git branch Если в репозитории есть другие ветки, их можно увидеть, добавив ключ -a (активная ветка обозначена звёздочкой): $ git branch -a Переключаться между ветками git checkout master, на что нам резонно отвечают что вы так там: Already on 'master' Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) Ветка на вашем компе отстает и вы можете догнать ее так то. С помощью git pull копируем изменения из репозитория в хранилище и рабочую папку Несколько советов по работе с гитом с хабрахабра: https://habr.com/post/68341/ - чувак очень неприятно произносит слово репозиторий, но в остальном читать можно, например про ветки https://habr.com/post/174467/ - тут адекватный чел https://git-scm.com/book/ru/v1/Ветвление-в-Git-Основы-ветвления-и-слияния - и официальная документация |
|||
Система Git git push clone | + 17 | ||
Создавать алиас для загрузки на сервер git remote add origin https://github.com/имярепозитория/Zoo.git Загружать репозиторий на сервер git push -u origin master Клонировать репозиторий с сервера на свой компьютер git clone https://github.com/имярепозитория/Zoo.git Не создавать папку, а клонировать в текущую, откуда запущен баш git clone https://github.com/имярепозитория/Zoo.git . После того как склонировал репозиторий в Zoo-clone\Zoo команда git clone https://github.com/имярепозитория/Zoo.git . написала что папка не пустая и яне буду ничего клонировать fatal: destination path '.' already exists and is not an empty directory. Пришлось подпапку Zoo предварительно грохнуть, тогда оно клонировало уже в директорию что надо. Так же при загрузке репозитория на сервер оно автоматически поменяло заглавные буквы в названиях файлов на строчные и попытка компиляции выдала ошибку (на скрине), пришлось после клонирования заново менять буквы на заглавные. |
|||
Система Git git ignore | + 16 | ||
Удалять ненужные файлы с помощью git rm --cached Перенаправлять вывод в файл echo '*.class' > .gitignore Добавлять в отслеживание вообще все что находим в директории git add . Кроме того что запрещает нам .gitignore Создавать .bat файлы для виндовс, типа такого: copy *.java ..\stage copy *.bat ..\stage Одно время были сложности с тем что репозиторий для игры на юнити впитывал в себя весь хлам и разрастался так что превышал выделенные лимиты на место, это была проблема. Опытным путем было выяснено что битбакет имеет ограничение 2Гб. Примеры гитигнора из интернета были все похожи и все пропускали мусор все равно. Тогда было принято волевое решение примерно как в уроке, только наоборот, не принимать ничего кроме: # Ignore Everything /* # Except tor these: !/.gitignore !/Assets !/Projectsettings *.meta |
|||
Система Git git commit zebra | + 16 | ||
Коммитить только измененные файлы git commit -a. Новые файлы при этом индексироваться не будут! Удаление же файлов будет учтено. |
|||
Система Git git commit reset diff | + 16 | ||
Коммитить в репозиторий git commit -m Welcome, проверять разницу между рабочей папкой и хранилищем(сценой) с отслеживаемыми файлами git diff, а так же между рабочей папкой и репозиторием git diff HEAD. Смотреть историю коммитов в репозитории git log. Отменять изменения в хранилище копией из репозитория git reset HEAD zoo.java На вопрос гита "что ты такое?" между 3 и 4м пунктами вставляем: git config --global user.email вашапочта git config --global user.name вашеимя Git config --list --show-origin проверяем что конфиг изменился и тогда уже коммитим |
|||
Система Git git add checkout | + 16 | ||
Отслеживать с помощью git add интересующие файлы. Отменять неподходящие или ошибочные действия с помощью команды git checkout. Ошибся в написании слова "chekout", гит соответственно команду не выполнил, но вывел подсказку: возможно вы хотели написать checkout |
|||
Система Git git init | + 16 | ||
Создавать репозиторий командой git init и проверять его статус командой git status. Git - распределённая система управления версиями. GitHub - веб-сервис для хостинга IT-проектов и их совместной разработки. |
|||
Система Git Добро пожаловать в Зоопарк! | + 18 | ||
Устанавливать Git. Прописывать переменные среды java. java показывала информацию по запросу, а javac нет. Я был удивлен так как все точно работало. Потом вспомнил что переставлял винду и видимо не прописал заново переменные среды. Заодно прописал и путь. Опять все не работало. Заработало после перезагрузки компьютера. |
|||
Шахматы по сети VIP. Меню DimanDOSа | + 16 | ||
Делать меню. Димандос реально крут. Теперь у меня тоже есть меню, спасибо.<br> А еще можно ускорить все это дело если убрать проверку, ведь нам на самом деле не интересно какое значение переменной, нам просто нужно его заменить на противоположное. Так же style.active depricated(устарело) и напрямую обращаться к полю не комильфо(на видео строка подчеркнута зеленым цветом), может это связанно с безопасностью, может с оптимизацией кода, теперь они предлагают устанавливать флаг через метод style.SetActive(). В связи со всем вышеперечисленным я немножко переделал код и вышло так:<br> [SerializeField]<br> private GameObject style;<br> bool state = false;<br> public void Style()<br> {<br> state = !state;<br> style.SetActive(state);<br> }<br> Когда-то делал игру, и тоже добавил открытые поля. Там у меня были кубы с разными текстурами, что-то вроде препятствий: куб с черной текстурой это скала, с синей вода. Стандартные кубы размером 1, как их лепит сам редактор без изменений. Когда я в очередной раз запустил игру вместо кубов у меня появились огромные параллелепипеды которые уходили далеко вверх и вниз под игровое поле, потом из-за того что они такие здоровые они начали падать, валить друг-друг друга, в общем была какая-то вакханалия. Это произошло из-за открытых public полей. Теперь я использую, в случае если к этим полям конечно не нужен доступ из вне, такую запись:<br> [SerializeField]<br> private GameObject menu;<br> вместо<br> public GameObject menu; |
|||
Шахматы по сети Рефакторинг. Последний аккорд | + 16 | ||
Оптимизировать. Теперь используя состояние шахматы работают быстрее из-за того что не перерисовуют экран когда не надо.<br> "Каждый стал чуточку умнее и опытнее." Не знаю на счет других, но по моим ощущениям я стал умнее на порядок. Прямо мегамозгом себя чувствую.<br> "Получилось здорово. Я доволен результатом." А я как доволен! Спасибо Евгений Витольдович!!! От души!<br> Курс занял ровно месяц, с 12го июля до 12 августа, можно было чуть быстрее, если баги оставлять на потом, но и это тоже была довольно интересная часть курса. Так сказать работа над ошибками. Теперь еще раз пробежаться по проблемным местам, разобраться с делегатами и можно пилить свою игру.<br> Я часто прохожу всякие курсы, мне нравится учиться. На данный момент это самый интересный курс который я проходил. Рекомендую! 1. Самым трудным было превращение, боролся с ним 2 дня. Потом закинув ддл и на сервер поборол, но кого бы я не выбирал при превращении, всегда получался ферзь. Поборол изменением условия в длл для превращении при шаге, нужно будет еще попроверять. <br> 2. В свете 2х фиксов - ход слона и превращение нужно заново провести супертесты, у меня начинались несоответствия с 3й итерации, теперь должно быть гут.<br> 3. Билд под андроид показывал черный экран, нужно разобраться.<br> 4. Билд под WebGL говорил про ошибку токена и тут 2 варианта: убрать инвок из боарда и закинуть рефреш в апдейт и посмотреть было ли дело в потоках, которые не одобряет вебгл или все еще глубже и нужно менять вызовы WebRequest на UnityWebRequest. |
|||
Шахматы по сети Рефакторинг. Финальное причёсывание | + 16 | ||
Мы все живем в матрице и все предопределено. Свобода выбора фикция, это показывает консольный клиент. Какую бы фигуру в юнити мы не выбрали все равно получим Ферзя. Программа как бы намекает, да че ты тупишь, я знаю что ферзь лучше. Надо будет пересмотреть получасовой урок про пешку и превращение в длл полностью а пока решением было в CheckOnPromotion() поменять в 1й строке if (promotion != Figure.none) return; равно на неравно. Потому что если промошен не пустой, то мы его затирали и Ферзем, а если пустой выходили. |
|||
Шахматы по сети Рефакторинг. Двухэтажное превращение | + 16 | ||
Во время поиска ошибки исправил баг который тянется с 26го урока. Иногда слон мог ходить по прямой, то есть когда копировали ограничение хода ладьи не только равно нужно было поменять на неравно, но и ИЛИ в условии на И, чего я тогда не сделал. Очень опасные ошибки с копипастом. Стопорнулся на два дня, но они не прошли даром) Не хотели пешки превращаться, как ты их не уговаривай. Несколько раз пересмотрел все уроки которые касаются превращения. Свой код удалил, хоть он мне и нравился, но чуда не произошло. А ведь в 90м уроке мы поменяли dllку. В юнити ее добавили, а на сервер нет. Евгений Витольдович, допишите в описание 90го урока и последующих что не плохо бы и на сервере ее поменять. Это бы сэкономило мне пару дней) |
|||
Шахматы по сети Рефакторинг. Класс шахматной игры | + 17 | ||
Создавать управляющий класс Game, что-то типа контроллера, чтоб класс боард не был связан с шахматами. Класс клиента тоже из доски в игру перенес. Запутался конечно, когда в примере одно, а у меня другое) Запутался что откуда и зачем вызывать. Без пол литры или карты не разобраться. |
|||
Шахматы по сети Рефакторинг. Потерянная пешка | + 19 | ||
Тестировать длл. Урок интересный, в процессе исправления бага вылез еще один, который тоже пофиксили, но как оказалось это не все) "FEN":"rQbk1bBr/pp2q1pp/8/8/7P/8/PP1K2P1/RnBQ1BrR w - - 0 13" 1) В тяжелой стрессовой ситуации, когда король под ШАХом героический офицер может обойти ограничение (fm.SignX == 0 || fm.SignY == 0) && CanStraightMove(); и таки пойти по прямой Bc1b1. 2) Король же, как истинный джентельмен, уходя от ШАХа никогда не подставит под ШАХ своего оппонента Kd2c2. |
|||
Шахматы по сети Рефакторинг. Волшебник изумрудного ящика | + 18 | ||
Сражаться с багами. В итоге я все-таки победил. Из-за невнимательности и копипаста потерял 2 часа. Закончил перенос всего что качается превращений в BoxPromots. Так же сделал код чище внеся такую строчку: const int xMax = 6; // xMin + promFigures.Length; теперь во многих местах читается лучше. Функция рекурсивно вызывала себя и переполняла стек. public string GetBlackProFigure(int x) { return GetBlackProFigure(x).ToLower(); } |
|||
Шахматы по сети Рефакторинг. Хоровод из четырёх фигур | + 18 | ||
Делать константы. Так как у меня был сделан class BoxPromots : Box ранее, код немного отличается. Добавил вместо магических цифр константы. не стал переделывать код так как у вас, получилось там где у вас методы ГЕТ у меня СЕТ |
|||
Шахматы по сети Рефакторинг. Шахматная независимость | + 18 | ||
Устранять лишнюю зависимость, связанность. Перенес UnmarkSquares() и MarkSquaresFrom/To() из Board() в BoxSquares(). И передаю им параметром список возможных ходов chess.YieldValidMoves() Опять провел черную пешку и поставил внезапный мат. и даже не успел рассмотреть что к чему, как сразу новая партия. |
|||
Шахматы по сети Рефакторинг. Клетка в клетке | + 18 | ||
Показывать и помечать квадратики с помощью методов ShowSquare и MarkSquare. Кода стало меньше, он стал понятнее и красивее. Неожиданно для себя при проверке поставил мат, теперь началась новая партия, много пока не проверить, но подсветка работает точно. |
|||
Шахматы по сети Рефакторинг. Спрайт, не дай себя заинтерфейсить | + 18 | ||
Добавил в интерфейс возможность установки спрайта. И в бокс метод SetSpriteAt. Теперь стало немножко чище в коде и немножко удобнее. Ну и если такая фигура уже стоит и оно ее не перерисовует, то программа работает чуть быстрее. Возможно нужно было создать еще 1 интерфейс, а не добавлять в этот же? Хотя по смыслу они более менее близки. |
|||
Шахматы по сети Рефакторинг. Вынос переноса | + 18 | ||
Делать перенос SetPosition Не очень понял зачем) |
|||
Шахматы по сети Рефакторинг. Многоклеточная сущность | + 18 | ||
Рефакторить клеточки и превращения. В методе ShowPromotionFigures не придумал как форичем обойти все, только 2 форами, кода стало больше и не очень красиво выглядит, такой себе рефакторинг получился. И SetSprite захардкодил SetSprite(promots.GetGameObject(2, 8), "Q"); Наверное этот метод вообще стоит перенести в BoxFigures. Какими горячими кнопками вы вызываете окошко для быстрого перехода между классами? |
|||
Шахматы по сети Рефакторинг. Ящик с фигурами | + 18 | ||
Делать ковчег BoxFigures и запихнул туда каждой твари по паре. Класс отдельно для фигур хорошая идея. Теперь на случай если что-то поломается папку со скриптами перед изменениями копирую. |
|||
Шахматы по сети Рефакторинг. Интерфейсная прослойка | + 20 | ||
Создавать интерфейс ICreatable. Начинал урок вечером, потом утром пересмотрел еще раз как было рекомендовано. А какая разница где мы будем вызывать в боксе или в боарде? |
|||
Шахматы по сети Рефакторинг. Чёрный ящик | + 19 | ||
Делать контейнер. А конкретно Box Особого профита от бокса пока не заметил. Вот с координатами было самое оно, а тут пока похоже на другую форму записи, ну посмотрим что будет дальше. |
|||
Шахматы по сети Рефакторинг. Координатные трансформации | + 21 | ||
Рефакторить. Создал мощный класс Coords куда перенес все действия над координатами и их преобразования. Теперь действия с расстановкой фигур и их перемещением выглядят гораздо проще. Понятнее. Все преобразования стали понятными и удобными. Кроме этого: ShowSquare(Coords.GetX(move.Substring(3,2)), Coords.GetY(move.Substring(3,2)), true); то есть оно тоже могло бы быть ничего если move.Substring(3,2) как то поменять, ну или оставить как было move[1] move[2] или move[3] move[4], было понятней с каким символом мы работаем. Но это мелочи, на общем фоне почти не заметные. |
|||
Шахматы по сети Рефакторинг. С чего начать? | + 25 | ||
PickObject и DropObject находятся в классе Board, исходя из логики работы да и названия этих методов, они тоже хотят в DragAndDrop(). Отвлекает то что код немного разный, у нас в папке скриптов и в коде еще и класс клиент есть, но пака все работает. |
|||
Шахматы по сети Клиент. ВОСЬМОЙ ФИНАЛЬНЫЙ УРОК | + 23 | ||
Делать шахматы! Картинка к этому уроку призывает молчать, и в большинстве случаев это лучшая тактика, но в этот раз я буду говорить. |
|||
Шахматы по сети Клиент. Фоновое обновление | + 18 | ||
Обновлять позицию в фоновом режиме. Портировал под веб и андроид. На андроиде приложение показывает заставку юнити и черный экран. Под веб не работает то ли из-за вебклиента и нужно переписывать код под UnityWebRequest, толи из-за нашего рефреша в фоне, а конкретно из-за инвок. WebGL не любит потоки и не хочет с ними работать. В итоге приложение работает пока только под десктоп. Найти баг которого не было. То ли сервер лаганул, то ли мой комп, но ход сделанный в консоли не отображался в клиенте на юнити. Поиск ошибки ни к чему не привел, а после рестарта обоих клиентов все само заработало. Билд под WebGL при запуске оповещает о: An error occurred running the Unity content on this page. See your browser Javascript console for more info. The error was: Uncaught SyntaxError: Unexpected token < Было желание попробовать переделать код, но в свете предстоящего рефакторинга, разумнее оставить как есть, а не добавлять еще новых проблем потом с разными кусками кода. |
|||
Шахматы по сети Клиент. Следы невиданных ходов | + 20 | ||
Посылать ход на сервер из клиента на юнити. В голове и в коде все упорядочено как на картинке. |
|||
Шахматы по сети Клиент. Серверные пешки | + 19 | ||
Считывать позицию с сервера в Unity Запустить нужную версию Unity. Не знаю как вышло что после переустановки винды я поставил версию 2017, а не 2018. Запускаю ярлык 2018.2, запускается 2017 версия, прямо чудо какое-то. В итоге скачал Unity заново и уже новую версию 2018.2.1 |
|||
Шахматы по сети Клиент. Ход в мешке | + 18 | ||
Отправлять ход на сервер. Играть в 2 клиентских окна круто. В видео сделали строку сначала без слеша, запустили работает, потом поставили зачем-то слеш. public const string address = "http://xlab.website/api/chess/"; Я же как настоящий ленивый программист подумал если и так работает, то чей-то я буду слеш добавлять, делать лишнее телодвижение. А дальше когда добавили ID и ход оно на видео работало, а у меня почему-то нет. Ну не долго тупил, вспомнил про слеш, добавил и заработало. |
|||
Шахматы по сети Клиент. Дедовские методы | + 17 | ||
Партисть JSON, а конкретно вырезать из него FEN |
|||
Шахматы по сети Клиент. Достучаться до облака | + 17 | ||
Обращаться из клиента к серверу и получать ответ. Видимо для работы с JSON есть в C# специальные классы как раньше было для работы с XML. Поэтому подключить этот класс и по ключу FEN получить его значение. |
|||
Шахматы по сети Хостинг. СЕДЬМОЙ ФИНАЛЬНЫЙ УРОК | + 17 | ||
Размещать сайт на хостинге. Мой серверный API можно найти по адресу: xlab.website/api/chess. Зарегистрировался на хостинге reg.ru, купил домен на год и оплатил хостинг на месяц. Подключился к хостингу по FTP через Total Commamder. Опубликовал проект через Visual Studio. Сделал бэкап локальной БД, перенс ее на хостинг и развернул там. Изменил релизную версию веб конфига так, чтобы при деплое не затиралась строка подключения и как следствие не рвалась связь с БД. Оплатить. Не получалось с карты, не получалось через робокассу, много чего не получалось. В итоге получилось через пейпал с двойной конвертацией гривны/доллары/рубли. В последнем уроке возникла сложность с изменением конфига. E:\MyCSharpProj\ChessAPI\ChessAPI\Web.Release.config(19,121): An error occurred while parsing EntityName. Line 19, position 121. Ошибка во время публикации и все такое из-за того что студии не понравился амперсант в пароле Password=Sl&av039. Пришлось удалять БД и перезаливать и менять пароль так чтоб студии нравилось. |
|||
Шахматы по сети Хостинг. VIP. Двойные стандарты | + 17 | ||
Делать так чтоб локальные изменения при разработке/допиливании проекта не затирали релизную ConnectionString, модифицируя web.Release.config. E:\MyCSharpProj\ChessAPI\ChessAPI\Web.Release.config(19,121): An error occurred while parsing EntityName. Line 19, position 121. Ошибка во время публикации и все такое из-за того что студии не понравился амперсант в пароле Password=Sl&av039. Пришлось удалять БД и перезаливать и менять пароль так чтоб студии нравилось |
|||
Шахматы по сети Хостинг. Перенос базы данных | + 19 | ||
Делать копию БД и заливать ее на хостинг Проблемы с оплатой. Решал их сначала с банком, потом с Reg.ru. Два дня было потеряно. |
|||
Шахматы по сети Хостинг. Публикация проекта | + 19 | ||
Публиковать проект |
|||
Шахматы по сети Хостинг. Доступ по FTP | + 19 | ||
Заливать файлы по FTP |
|||
Шахматы по сети Хостинг. Лучше заплатить | + 19 | ||
Платить. |
|||
Шахматы по сети Хостинг. Регистрация аккаунта | + 19 | ||
Зарегистрировался на хостинге reg.ru Ни кнопки ни ссылки не открываются когда по ним щелкаешь, действия происходят только когда жмешь "открыть в новой вкладке" |
|||
Шахматы по сети Сервер. ШЕСТОЙ ФИНАЛЬНЫЙ УРОК | + 22 | ||
Спроектировал БД, но оно не пригодилось, хирург отсек все лишнее, теперь все девочки. Создал таблицы и связи между ними, потом диаграмму по этому поводу нарисовал. Заполнил таблицы тестовыми данными. Подключил БД к проекту. Создал контроллер и модель для работы с данными на основе EF. Добавил в модель класс Logic с логикой работы сервера. В конфигурационном файле Global.asax отключил XML и подключил JSON. В конфигурации Web API поменял route с id на move, чтоб код смотрелся более логично, затем и id добавил, чтоб обращаться к конкретной игре. Добавил метод MakeMove проверки на корректность хода и самого хода. Узнал все про Идемпотентность. Реализовал завершение игры при сдаче. Были проблемы с установкой сервера БД. Также для проверки работы сервера нужно использовать 2 браузера, потому как при остановке программы, она закрывает и браузер в котором проводился тест, и если использовать браузер по умолчанию, то оно его закроет вместе с уроком. При переоткрытии браузера урок нельзя сдать пока не пройдет время урока, только тогда появится кнопка сдачи урока. |
|||
Шахматы по сети Сервер. Китайская ничья | + 20 | ||
Сделал возможность окончания игры. Она же "сдаться" |
|||
Шахматы по сети Сервер. Шахматная Идемпотентность | + 20 | ||
Добавил метод GetGameById, а иначе как мне кажется все желающие при двух или более открытых играх играли бы все в первую или последнюю, потому как ID игры никак не был задействован. Изменил роут в Web API под новый функционал. Добавил в MakeMove проверки на корректность хода: когда партия уже закончена - ходить нельзя, когда такой игры нет, играть в нее тоже нельзя. Идемпотентность что-то очень похожее на синглтон. При попытке повторить операцию получаем тот же ответ что получали прошлый раз. |
|||
Шахматы по сети Сервер. Ваш ход! | + 20 | ||
Сделал метод MakeMove в классе Logic и в контроллере, теперь можно играть. В конфигурации Web API поменял route с id на move, чтоб код смотрелся более логично Наверное нужно запоминать последний ход, и если после него статус игры поменялся на done игру закончить, показать обоим игрокам, спросить начинать ли новую партию и только тогда ее начинать. |
|||
Шахматы по сети Сервер. Официант без логики | + 20 | ||
Создал в модели новый класс Logic, куда из контроллера перенес всю логику, теперь он не занимается чужой работой. В метод NewGame добавил создание новой игры используя ChessRules.dll Managment Studio постоянно глючит, не мог долго поменять статус 2й игры на done, потому что при выборе EDIT оно ее просто не показывало, а при выборе SELECT показывало. Помог рестарт MS. |
|||
Шахматы по сети Сервер. Новая игра на JSON | + 19 | ||
В конфигурационном файле Global.asax отключил XML и подключил JSON. Обновил контроллер GetGame и создал NewGame, теперь уже есть запись новой игры в БД. Linq. Когда с ним не знаком самому понять как формировать запросы не очень просто. var games = db.Games.Where(g => g.Status == "play"); но тут вроде пока понятно все. |
|||
Шахматы по сети Сервер. Райский Эдем - EDM | + 19 | ||
Подключать БД к проекту Не запутаться во всех этих окнах при подключении БД |
|||
Шахматы по сети Сервер. Последняя версия | + 21 | ||
Создавать контроллер. Пришлось использовать 2 браузера, так как когда использовал вызов браузера по умолчанию, программа при закрытии закрывала и его тоже. Что тупо. Непонятно зачем они так сделали. Если мне не нужна страница по завершении программы я и сам могу ее закрыть. |
|||
Шахматы по сети База данных. ПЯТЫЙ ФИНАЛЬНЫЙ УРОК | + 20 | ||
Создавать таблицы, заполнять их, создавать между ними связи. Установить и настроить сервер, обойти ошибки связанные с его работой, точнее неработоспособностью |
|||
Шахматы по сети База данных. VIP. Красивая диаграма | + 22 | ||
Составлять диаграмму зависимомстей По кнопке добавить новую диаграмму выскакивала ошибка и получался пустой лист, но в него можно было перетащить все таблицы вручную из Object Explorer'a |
|||
Шахматы по сети База данных. VIP. Таблицы на вырост | + 21 | ||
Создавать зависимости между таблицами Соотнести русский перевод на видео с моим английским вариантом. Некий дискомфорт |
|||
Шахматы по сети База данных. Созидание | + 21 | ||
Создавать таблицы Установить SQL Server. 2017 так и не заработал. Никаких БД, только их анализ. 2014 с пол пинка |
|||
Шахматы по сети База данных. Упрощение | + 20 | ||
Упрощать. Раз мы отказались от всего и у нас остается только 1 таблица, то для удобства в нее можно добавить ход и полуход. Жалко столько всего вырезать. |
|||
Шахматы по сети База данных. Планирование | + 20 | ||
Проектировать БД. Не забыть никакую мелочь чтоб потом не переделывать |
|||
Шахматы по сети База данных. Management в студию! | + 21 | ||
Скачивать и устанавливать студию Сделать скрин установки когда Managment Studio уже стоит) |
|||
Шахматы по сети Интерфейс. ЧЕТВЁРТЫЙ ФИНАЛЬНЫЙ УРОК | + 21 | ||
Очень интересная часть. Расчет координат, передвижение фигур, подсветка, возможные варианты ходов, драгэнддроп пригодятся во многих играх. Делегаты |
|||
Шахматы по сети Интерфейс. Долгожданное превращение | + 19 | ||
Сделал превращение к которому так долго готовились. Все немного запутанно. Так же на картинке нарисовано что может походить черный Ферзь, а он не может потому что открывается ШАГ, но походить им не дает. |
|||
Шахматы по сети Интерфейс. Выставка фигур | + 19 | ||
Подготовил методы к превращению Переписать позицию без ошибок, вот она: "b1q1kn1r/1P1pp1Pp/5P2/8/8/1p3p2/p1PPP1pP/1R2KN1R w - - 0 1" |
|||
Шахматы по сети Интерфейс. Щепотка рефакторинга | + 19 | ||
Рефакторить вспомогательные методы. Благодаря рефакторингу уменьшил количество кода и улучшил его читаемость. Мы называли методы Square, Figure, FigureOnSquare. А тут вдруг CreateGameObject, не CreateFigure, не CreateSquare, не CreateFigureOnSquare, а именно CreateGameObject как класс GameObject из самой юнити, что немного сбивает с толку. |
|||
Шахматы по сети Интерфейс. VIP. Клетки прибытия | + 19 | ||
Показывать куда может ходить выбранная фигура. Не плохо бы сделать не только превращение, но и говорить статус ШАХ и др. Делегат. Но в этот раз уже проще, можно было делать по аналогии с 1м делегатом все. |
|||
Шахматы по сети Интерфейс. VIP. Клетки отправления | + 19 | ||
Подсвечивать фигуры. Так шахматы смотрятся гораздо круче. То ли я скачал бракованный комплект фигур, то ли еще не понятно что произошло, но у меня не было картинки 1х1, а подсветка белой клеточки почти не отличалась от самой белой клеточки, черная тоже бледнее, но ее видно. А белую пришлось переделывать, теперь она выглядит как в видео. 2 варианта: как было и как стало прикрепил. |
|||
Шахматы по сети Интерфейс. Проверка хода | + 21 | ||
Подключил проверку правильности хода из библиотеки. Теперь фигуры ходят по очереди и только туда куда могут. Так как пешка получается только на крайних линиях, можно над(под ней для черных) ней нарисовать 4 фигуры для выбора, будет понятно. |
|||
Шахматы по сети Интерфейс. Ход делегата | + 21 | ||
Ловить координаты фигуры откуда, куда. Делегат как был темным лесом, так и ничего не изменилось) |
|||
Шахматы по сети Интерфейс. Начальная позиция | + 21 | ||
Расставлять фигуры используя написанную ранее длл У черных выставлялись только пешки и 1 Ладья, на остальные фигуры писало GameObject.Find(figure).GetComponent<SpriteRenderer>().sprite; что в этой строке нулл референс экцепшн. Когда я переименовывал фигуры в редакторе юнити я поначалу нажимал энетер к конце каждого переименования, а потом для ускорения только клацал по след фигуре мышкой, в окне свойств менял букву и без энтера обходился. Хоть оно все и переименовало но видимо не сохранило. Удалил черные фигуры и произвел всю операцию переименования заново, нулл референс исчез а на поле появились фигуры. Хорошо что я не разобрался как тут дебажить, иначе поиск такой неявной ошибки мог и на сутки затянуться |
|||
Шахматы по сети Интерфейс. Генерация объектов | + 22 | ||
Рисовать доску. Немного изменил: GameObject square = GameObject.Find(((x + y) % 2 == 0 ? "Black" : "White") + "Square"); Сделать самому картинку из 1го пикселя, потому что у меня в комплекте не было ее. Но выход был найден http://www.1x1px.me |
|||
Шахматы по сети Интерфейс. План действий | + 21 | ||
Разместил и переименовал фигуры по фену Жалко было все грохать, а так же нет пустой картинки |
|||
Шахматы по сети Алгоритмы. VIP. Как пройти в библиотеку | + 21 | ||
В версии Unity 2018.2 уже не нужно переделывать длл под 3.5 Забыл прицепить скрипт на камеру и не мог понять чего же не работает то. |
|||
Шахматы по сети Алгоритмы. VIP. Можно пройти? | + 21 | ||
Рефакторить if (!IsValidMove()) return this; не хотело работать и выдавало ошибку. Даже повторяя 2хминутное видео где трудно ошибиться, можно накосячить. Не передал параметр move обычно наши булевские методы не принимал параметров и я написал по аналогии) |
|||
Шахматы по сети Алгоритмы. VIP. Шахматное супертестирование | + 22 | ||
Проходить супер тест. Найти места в коде откуда можно считать правильные параметры шага, взятия, рокировки. Мы вызываем методы много раз за ход при различных проверках, поэтому значения считанные из метода где происходит проверка например на шаг не верны. |
|||
Шахматы по сети Алгоритмы. ТРЕТИЙ ФИНАЛЬНЫЙ УРОК | + 20 | ||
Передавать данные о ходе через FEN, использовать это для расстановки фигур на доске Board. На уроке интересным образом этот FEN распарсили, там же сделали метод Init() простой, удобочитаемый, а значит понятный, тоже понравилось. Научился обратной передачи данных, как упаковать 11111111 в 8ку для генерации FEN. Познакомился с Yield. Знал о нем раньше, но не понимал как работает, разобрался. Создали вспомогательные функции DeltaXY, AbsDeltaXY, SignXY для определения правильности хода фигур. Маленькие, но очень полезные, очень легко с их помощью конструировать ходы для разных фигур. На примере движения короля, реализовал движение коня и угадал с первого раза. Следом реализовали движение дальнобойных фигур Ферзя, Ладьи (Ферзь, ограниченный по диагонали), Слона (Ферзь ограниченный по вертикали/горизонтали) не быстро, они по одной перебирают все клеточки в направлении движения, но мы и не торопимся. Отдельный урок для Пешки, сложно, много но зато теперь все ходят правильно. CanPawnJump(int stepY) можно заранее записать из условия клетку через которую мы прыгаем для "взятия на проходе" if (board.GetFigureAt(new Square( fm.from.x, fm.from.y + stepY)) == Figure.none) в какую-нибудь переменную. Научился превращать пешку в одну из четырёх фигур: Queen, Knight, Bishop и Rook. Сделали рефакторинг класса Board он стал чем-то вроде геттера, а новый класс nextBoard сеттера. Причем программа не сломалась и продолжала работать, удивительно. Реализовали "взятие на проходе" для пешки и "рокировку" для короля. В уроке "32 Зашита короля" научился делать шаг и пустой ход(это круто, для шага наоборот). На уроке "33 Шах и Мат!" научился проверять состояние игры: есть ли ШАГ, МАТ или ПАТ. Сделал проверку на НИЧЬЮ. Очень понравилось, крутые интересные алгоритмы, много интересных, оригинальных решей, один обманный ход чего стоит. Теперь в голове все разложено по полочкам (шучу), как на картинке Алисы в зазеркалье у нее были похожие шахматы, картинку прилагаю. Critical: Не работала функция String.Replace('1', Figure.none) пришлось заменить на собираемую вручную строку из StringBuilder'a. Из-за этого на поле вместо точек были 1ки. Это не было проблемой пока не дошли до реализации хода дальнобойных фигур, они вдур стали короткобойными) Ферзь, Слон, Ладья ходили только на 1 клеточку. Решив проблему с полем из единичек, проблема с ходами отпала сама собой. <br> Minor: Вторая проблема достаточно неприятная, но не смертельная - я добавил в референсы dll'ку (а нужно было добавить солюшн с кодом дллки) из Bin\Debug и долго удивлялся почему мне сначала нужно билдить длл и только потом запускать программу чтоб она работала уже с изменениями, а на всех видео она работала сразу |
|||
Шахматы по сети Алгоритмы. Шах и Мат! | + 19 | ||
Проверять состояние игры: есть ли ШАГ, МАТ или ПАТ. Сделать проверку на НИЧЬЮ не огромной простыней, а почти так же элегантно, как и у ЕВ. |
|||
Шахматы по сети Алгоритмы. Защита короля | + 20 | ||
Делать шаг, делать пустой ход - интересное решение, попробуй до такого догадаться сам.. очень круто. На картинке вид со стороны шахмат на наши мутки с FEN'ом. Когда делал конструктор без параметров куда-то пропали параметры из того конструктора который уже был ранее, это очень странно 100% его не трогал, пришлось писать их заново. Мистика. |
|||
Шахматы по сети Алгоритмы. Королевский паркур | + 19 | ||
Делать рокировку. Есть комментарий по поводу "взятия на проходе". Мы могли не делать новый метод для этого, а записывать значение прямо во время прыжка пешки. Она же прыгает через эту клетку и координаты ее нам известны Какой комбинацией клавиш вы отменяли автоформатирование текста после копипаста? Там где ифы сами выстраивались лесенкой. |
|||
Шахматы по сети Алгоритмы. Допрыгалась! | + 17 | ||
Делать взятие на проходе. Интересно. В конце запутался с рефакторингом где что писать, немножко потупил. |
|||
Шахматы по сети Алгоритмы. Рефакторинг на доске | + 18 | ||
Рефакторить код. Раньше я выносил повторяющиеся куски кода в отдельные методы и считал что все норм, код отрефакторил). Комментарии: я не умею пока так быстро печатать или набирать текст в слепую, но я знаю хитрые комбинации Студии. Это еще немножечко ускорит редактирование кода. Например когда меняли privat на protected это можно было сделать 1м движением. Зажимаем левые Alt+Shift и мышкой растягиваем прямоугольник. Теперь там где текс выделен мы можем или печатать и он будет меняться везде или вставить слово protected из буфера и это будет применено ко всему тексту. Держать в памяти где что находится. Хотя сейчас стало чуть проще. Все методы Get находятся в старом классе, а все Set в новом. И что действительно удивительно во всем этом, так это то что после рефакторинга программа все еще работает. |
|||
Шахматы по сети Алгоритмы. Четвёртое превращение | + 18 | ||
Делать превращения. Программирование - это магия. Добавление promotion в разные места кода. Сложно. Нужно время на обдумывание. |
|||
Шахматы по сети Алгоритмы. Храбрая пешка | + 18 | ||
Двигать пешку. Теперь танцуют все CanPawnJump(int stepY) можно заранее записать из условия клетку через которую мы прыгаем для взятия на проходе if (board.GetFigureAt(new Square( fm.from.x, fm.from.y + stepY)) == Figure.none) в какую-нибудь переменную. |
|||
Шахматы по сети Алгоритмы. Дальнобойщики | + 19 | ||
Дебажить как нога Акинфеева. Параллельно сделал методы для проверки возможности хода дальнобойных фигур. В InitFigures(string v) по какой-то неведомой причине строка v.Replace('1', (char)Figure.none); не работала и когда у всех после нее на выходе были точки у меня были единички. На скринах с предыдущих уроков видно. Ну единички и фиг с ними. В итоге когда дело дошло до хода Ферзя, Ладьи, Слона они все ходили как Король, на 1 клеточку. Пересмотреть урок 3 раза и сравнить все функции посимвольно не помогло, дебаг (а тут уже спасибо нашему не быстрому алгоритму где смотрятся все клеточки и ты сидишь их увлеченно щелкаешь по 1й..) тоже ничего не дал. Тогда было принято решение заняться единичками. Строку "v" оставил, все манипуляции провел в StringBuilder и потом только скопировал результат в строку "v" после этого все заработало. По какой причине строка кода выше не меняла единички на none сие есть тайна покрытая мраком, но из-за этого функция CanStraightMove() делала почти из всех фигур королей) потому что часть условия в цикле (board.GetFigureAt(at) == Figure.none) нормально не работало. Другое дело если бы оно не работало вообще ни как было бы проще, но Ферзь мог ходить в любую сторону по 1й клеточке, Ладья крестом по 1й клеточке, Слон по диагонали по 1й клеточке.. Жэсть жесточайшая. В итоге урок на 20 минут растянулся на несколько часов. |
|||
Шахматы по сети Алгоритмы. Ночью с Конём | + 18 | ||
Убрал немного лишних скобок, по сравнению с вариантом ЕВ где их нет вообще. Но не все Тут нужно понимать приоритеты логических операций. По идее && выполняется первой, а потом ||. Но чтоб точно было все без разночтений пару скобок решено оставить. |
|||
Шахматы по сети Алгоритмы. Куда идёт Король | + 18 | ||
Ограничивать ходы Короля и Коня. С новыми методами это легко. Пока так и не разобрался почему нужно компилировать длл перед каждым запуском и почему на поле 1ки. С yield разобрался. |
|||
Шахматы по сети Алгоритмы. Генератор ходов | + 18 | ||
Делать Yield, чтобы это ни значило. Комментарии: Рeaлизoвaть cтaтичнyю функцию Board().YieldMyFigureOnSquares() в уроке мы с ней заканчиваем на 12й минуте и статичной не делаем. Так надо ее делать статик или не надо? Сложно. Теперь нужно не только с полем из единичек разобраться, но и с елдом. |
|||
Шахматы по сети Алгоритмы. Сборка фена | + 18 | ||
Генерировать FEN. Интересный вариант с упаковкой 11111111 нужно будет тоже обдумать. По какой-то неведомой причине пустые места на поле отмечаются не точками а 1. Я даже Figure.none захардкодил как '.' но ничего не изменилось. И есть вопрос. Как сделать так чтоб дллку не приходилось билдить перед каждым запуском как в видео? Потому что если я после внесения изменений не создам новый ее билд то оно работает со старой версией. |
|||
Шахматы по сети Алгоритмы. Волшебные шахматы | + 18 | ||
Красивому способу распарсить FEN, когда был на марафоне не понял его логику работы, сейчас при дебаге в голове прояснилось. Так же понравился метод Init() и фраза что комментарий нужно заменить понятным методом. Так же узнал про правило 50 ходов, про которое ранее не знал. Разбор видео Гарри Поттера тоже зашел) Использование видео попадает под добросовестное использование, ютуб ничего не скажет. А тут источник откуда эта идея появилась у Поттера: https://zen.yandex.ru/media/history_world/krovavye-shahmaty-inkvizitora-5a9fb94e8c8be3ce579424db Мне все не давало покоя исправление в рабочем методе CanMoveFrom() и я взял обе части сравнения, получил их хеши и результат на скрине. |
|||
Шахматы по сети Классы. ВТОРОЙ ФИНАЛЬНЫЙ УРОК | + 18 | ||
Создавать UML диаграммы. В Студии 2017 их удалили, можно установить дополнительно. Теперь они называются диаграммы классов : https://docs.microsoft.com/ru-ru/visualstudio/ide/class-designer/how-to-add-class-diagrams-to-projects И тут как их подключить к Студии: http://www.nookery.ru/domain-specific-language/ Уверен что это было самое сложное задание из всех что были и из всех что будут. Как отдельный курс, сутки ушли на все про все. Вот курс по диаграммам: https://www.youtube.com/playlist?list=PLwwk4BHih4fguh8o7gYRmftnapy9cmZBt И по их использованию: https://www.youtube.com/playlist?list=PLwwk4BHih4fiQPuw29hsXYRwEd2sah_Cn |
|||
Шахматы по сети Классы. Консольная доска | + 17 | ||
Красиво рисовать доску в консоли с рюшечками и разукрашивать ее. Фигуры в порядке возрастания сложности: конь, офицер слон, ферзь, король, пешка. На счет исправления ошибки: в уроке вы исправили 1 метод bool CanMoveTo(). Сравниваем текущий цвет хода с фигурой на клеточке куда собираемся стать: board.moveColor != board.GetFigureAt(fm.to).GetColor(); оно как бы правильно, но мне кажется чуть более логично сравнивать fm.figure.GetColor() != board.GetFigureAt(fm.to).GetColor(); цвет фигуры которой мы хотим походить с цветом фигуры куда мы хотим стать, хотя это не принципиальная мелочь. А в описании к уроку появилось не анонсированная правка в методе bool CanMoveFrom() где все вроде было и так нормально: board.GetFigureAt(fm.from) == fm.figure; разве это не одно и то же? fm: this.figure = fs.figure; this.from = fs.square; очень похоже что мы сравниваем себя с собой же. |
|||
Шахматы по сети Классы. Шахматная бюрократия | + 17 | ||
Добавил конструктор не по фене, сделал ход, вернул фигуру по координатам. Удерживать в гове все связи. |
|||
Шахматы по сети Классы. Стой, кто идёт! | + 18 | ||
Метод bool CanMove позволяет нам ходить только в случае если оба метода bool CanMoveFrom() и bool CanMoveTo() возвращают истину. Но им трудно это сделать когда в одном стоит условие fm.figure.GetColor() == board.moveColor а во втором fm.figure.GetColor() != board.moveColor, кто-то из них не удержится и таки вернет false. В итоге CanMove всегда возвращает ложь. Найти ошибку, потому что все выглядело очень логично и правильно. Правильный вариант bool CanMoveTo() на скрине |
|||
Шахматы по сети Классы. Квадратная матрица | + 18 | ||
Создали доску к которой и применили все созданные ранее классы. Не сохранять скрины со словом "chess" в русской раскладке, а то и некультурно получается и весело одновременно. Издержки того, что пока не умею набирать слепым методом как ЕВ. И когда подымаешь глаза, часто ожидает сюрприз. |
|||
Шахматы по сети Классы. Фигурой марш! | + 16 | ||
Сделал из клетки хранилище для фигуры, передвижение фигуры. Понять как работает пустой класс-обертка и зачем он. Как все это работает вместе с движением, как работает движение. |
|||
Шахматы по сети Классы. Квадратная площадь | + 16 | ||
Создавать клетку, проверять попадает ли она на поле, получать имя клетки. В конструкторе Square(int x, int y) наверное стоило бы тоже добавить проверку на допустимые координаты как в Square(string name) |
|||
Шахматы по сети Классы. Цветная фигура | + 16 | ||
Расширять enum. Если уже делали свою Яву для .Net копируя все конструкции из оригинала, тут явно стратили. |
|||
Шахматы по сети Классы. Шахматная библиотека | + 17 | ||
Создавать dll, подключать, тестировать. В уроке все работало, что странно, мне же после изменения в коде dll приходилось делать build чтоб изменения подхватил тестовый модуль |
|||
Шахматы по сети Классы. Архитектура проекта | + 17 | ||
Самое простое, и мы это уже сделали, графическая часть и все что качается Unity. Самое сложное и для понимания и для реализации - серверная часть. |
|||
Шахматы по сети Доска. VIP. Запуск в Интернете | + 17 | ||
Билдить под веб. Заняло около 20 минут. Разобраться с тем почему не работает нигде кроме локального компьютера заняло еще 2-3 часа. Ссылка на шахматы в облаке https://chessexample.azurewebsites.net В любом браузере выскакивала ошибка: An error occurred running the Unity content on this page. See your browser JavaScript console for more info. The error was: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data. что не нравится '{" первый символ, и такое парсить не буду. Решается созданием файла web.config и добавлением его в папку Build. При чем в документации Unity касаемо gzip-компрессии под WebGL как раз и не хватает строчки для распознавания JSON, она выделена на скрине. |
|||
Шахматы по сети Доска. VIP. Запуск на Android | + 17 | ||
Билдить под андроид. Комментарии: в меню телефона 7 раз тапать по билду чтоб открыть меню разработчика. Первое что хочется сказать и что мне очень не хотелось делать, но пришлось, это то, что Unity пока не работает с Java 10, пришлось откатиться на 8ю. Про настройку Unity и винды в видео не сказано, потому что уже все было настроено, но так не у всех. Нужные настройки я опишу тут, неплохо бы добавить к описанию видео. Мне бы это сэкономило пару часов. В Unity в редакторе Edit/Preferences/External tools - тут указать пути к SDK и JDK. В переменных среды винды указать JDK_HOME JAVA_HOME как на скрине. Если не билдится и ругается на сборщик gradle в настройках билда поменять билд систем на internal |
|||
Шахматы по сети Доска. ПЕРВЫЙ ФИНАЛЬНЫЙ УРОК | + 16 | ||
Опрашивать мышку, перемещать фигуры, использовать для этого состояния Набрать шахматный текст. Ошибки были или из-за невнимательности или из-за того что торопился. И особенно доставало если ошибка в конце строки и нужно все начинать с начала, а не продолжать с места ошибки. |
|||
Шахматы по сети Доска. Запуск на Windows | + 16 | ||
Что настройка билдера х86_х64 на самом деле х64 и наоборот Опытным путем было выяснено, что с настройкой билда х86_х64 программа не запускается на 32хразрядной системе как это было бы логично предположить. Зато если выставить х86, то запускается и на 32 и на 64разрядных системах. |
|||
Шахматы по сети Доска. Смещение | + 17 | ||
Трюку со смещением. По какой-то невероятной причине содержимое методов Драг и Дроп было поменяно местами. Не знаю как я так сделал. И когда хочешь взять фигуру она не всегда берется, тащить не получается вообще. Но если 1 щелчком без зажатия кнопки бать, то все нормально и можно поставить на нужное место и сбросить, но фигура может опять прилипнуть. Смотрел отзывы у других людей не тащилось, возможно похожая ситуация была. |
|||
Шахматы по сети Доска. Подцеп фигуры | + 17 | ||
Вычислять координаты клика, определять фигуру находящуюся этим координатам. |
|||
Шахматы по сети Доска. Состояния переноса | + 17 | ||
Упрощать ненужные состояния. Ничего не работало потому что забыл добавить экшн в апдейт. |
|||
Шахматы по сети Доска. Фигуры | + 17 | ||
Расставлять фигуры) Сделать это оригинально. |
|||
Шахматы по сети Доска. Установка Unity 3D | + 17 | ||
6 ошибок, 1 подход, 98 сим/мин Да сложно капец! |
|||
Шахматы по сети План Шахматного проекта | + 17 | ||
С перечисленными технологиями знаком. Использовать все эти технологии в одном проекте. Это интересно. |
|||
Невидимка Невидимка - Сматываем удочки | + 19 | ||
Выгружать приложение из памяти. Тоже нужно поменять: Process[] list = Process.GetProcessesByName("xmrig"); |
|||
Невидимка Невидимка - Тихий старт | + 19 | ||
Незаметно запускать приложение и скрывать его из трея. Комментарии: прошло какое-то время и cpu.exe уже называется xmrig.exe, а config.txt = config.json. Так же строчку с конфигом нужно убрать, потому что сейчас приложение запускается без нее, с ней закрывается с ошибкой. Предлагаю обновить описание урока в свете новых событий. Код с правками вставил в поле "что было сложным". process.StartInfo.FileName = Application.StartupPath + "\\xmrig.exe"; //process.StartInfo.Arguments = Application.StartupPath + "\\config.json"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; |
|||
Невидимка Невидимка - На шухере | + 19 | ||
Определять происходили ли какие-либо действия/бездействия со стороны пользователя. Перетащить окно "Output" в нужное место, оно постоянно пропадало |
|||
Невидимка Невидимка - Автозапуск | + 18 | ||
Я ожидал увидеть консольное приложение или службу. А вот WindowsForms - это было внезапно) 1 Научился нестандартному использованию Форм. 2 Интересная практика с дебагом, который легко отключить в релизе. Из-за ошибки в пути, программа возвращала null reference exception. Долго разбирался в чем дело, пока не заметил что пропустил букву. На скрине это слово выделено, пропустил букву Т. |
|||
Невидимка Кто такая C# Невидимка? | + 17 | ||
Так уж получилось, что я еще до покупки курса разобрался с тем как майнить, а купил чтоб посмотреть как происходит процесс оплаты. Все понятно и удобно. Тык тык и ты уже изучаешь курс) Сложно было не забыть поменять ХХХХХ на свой айди. На 2х компьютерах запустил и прописал в конфиге, а на третьем нет, поторопился. Заметил после обновления странички с результатами что нет прироста к скорости, а так же появился "sharp.xxxxx change config!", хотя это мог быть и не я. Но я быстренька все поправил, потерял только 30 минут времени расчетов. |
|||
Нано-игры Арканоид - Уровень и ракетка | |||
|
|||
Бинарная жизнь Правила игры | |||
|
|||
Демо игры C# чего начать программировать | |||
|
|||
Клиент-серверный сокет Автоответчик | |||
|