Обучение языку c#

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

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE В начале было поле 00:09:49
1 тест
33 чел. ★ 4.9 Done
  Мы начинаем «МикроШахматы на JavaScript».
В начале было поле.
И было на поле 64 клетки.

Цель курса - запрограммировать все правила игры в шахматы.
На выходе мы получим скрипт для игры в шахматы для двух игроков, с соблюдением всех правил.

На этом уроке мы выведем на экран доску, используя JavaScript и HTML.

В каждом уроке кроме видео есть фото-инструкция по изменению кода.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 52 мин. [Показать отчёт]
Научился: здесь есть курс "Наношахматы", посмотреть позднее В аргументах функции добавил переменную размера, которую задействовал в тегах width и height - доска подросла в размерах 
2 Координатное поле 00:08:53
28 чел. ★ 5 Done
  На этом уроке мы увеличим клетки нашей доски,
чтобы они были одинаковыми в любой ситуации.
Уберём зазор между клетками.
Так же мы раскрасим доску по правилам игры,
чтобы правая-нижняя клетка была светлой.
Добавим координаты слева и снизу доски,
а для полноты картины добавил заголовок.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: &nbsp -неразрывный пробел (non-breaking space) — элемент компьютерной кодировки текстов, отображающийся внутри строки подобно обычному пробелу, но не позволяющий программам отображения и печати разорвать в этом месте строку 
3 Шахматные буквы 00:09:05
1 тест
28 чел. ★ 5 Done
  На этом уроке мы отобразим «шахматные» буквы на доске.
Для этого мы создадим массив, заполним его буквами,
которые кодируют фигуры по нотации FEN
и сделаем их отображение в таблице.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 11 мин. [Показать отчёт]
Научился: фигуры: rook - ладья knight - конь bishop - слон queen - ферзь king - король Объявлять переменную необходимо перед ее использованием. Переменная создается (объявляется) с помощью ключевого слова var, за которым следует имя переменной, например, var map;.  
4 Фигуры на доске 00:07:13
1 тест
28 чел. ★ 5 Done
  На этом уроке наши фигуры обретут свой облик,
для этого нам потребуется вспомогательная функция figure_to_html(),
которая будет возвращать облик нужной нам фигуры в формате HTML-Unicode.
Поиграемся с размером и цветом фигур.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: заменили вывод фигур из массива map, когда они возвращались в виде букв, на графические представления шахмат из готовых кодов HTML-Unicode Конвертация литералов в графику реализовано свич-кейсом 
5 Светофор для фигур 00:08:35
27 чел. ★ 5 Done
  На этом уроке мы будем отмечать,
какими фигурами можно ходить и куда можно ходить.
Пока реализуем простое правило:
можно ходить на пустую клетку или клетку врага.
Для этого мы добавим ещё один массив inf,
для хранения возможных ходов выбранной фигуры.
Так же мы доработаем функцию show_map (),
чтобы она отображала подсказки из массива inf.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 18 мин. [Показать отчёт]
Научился: занялись лоцией на шахматном фарватере Был объявлен и создан массив для хранения доступных для хождения клеток Массив лоции был задействован в функции show_map в ветвлении if-else с проверкой на значение 1(стоит фигура) и 2(куда может идти) Красивый вариант доступных ходов - мигающие клетки 
Сложности: Боролся со знаками "равно". На первой иллюстрации - прозевал знак присвоения при создании массива в init_inf -> долго думал, откуда ошибка в браузере Затем в ветвлении if-else вместо знака "эквивалентно" == присобачил присвоение и никак не мог понять, почему поля не раскрашиваются как надо Всё заб0рото, всем спасибо. Катайтесь - не ломайтесь, создавайте правильные стейтменты )) 
6 Фигурная перекличка 00:07:49
2 теста
26 чел. ★ 5 Done
  На прошлом уроке мы статично отобразили
выбранную фигуру и поля, куда эта фигура может пойти.
Теперь наша задача реализовать это программно.
Для этого нам понадобится переменная для хранения цвета хода и
реализуем функции: mark_moves_from(), can_move_from() и get_color().
Протестируем результат изменив цвет хода.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 49 мин. [Показать отчёт]
Научился: цвет по умолчанию move_color - белый Функция mark_moves_from (откуда можно ходить) перебирает все клетки поиском в циклах Функция can_move_from определяет можно ли ходить с клетки ДА или НЕТ Если ДА - клетка помечается 1 (единицей) 
7 Шахматные выборы 00:11:58
26 чел. ★ 5 Done
  На этом уроке мы реализуем выбор фигуры для хода
через клик левой кнопкой мышки по нужной клетке.
Для этого мы сформируем вызов функции click_box()
с координатами клетки, по которой было нажато.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 49 мин. [Показать отчёт]
Научился: занялись функционалом выбора фигуры для выполнения хода Переменные move_from_x move_from_y нужны для запоминания координаты ОТКУДА ходит фигура 
Сложности: Не сразу дошло, отчего кликая по фигурам противника не получал аналогичной картины, как для своих фигур - второй раз пересмотрел урок, ошибок не выявил, и лишь затем допёр, что надо поменять текущие фигуры в переменной с white на black ))) 
8 Завершение хода 00:07:30
1 тест
24 чел. ★ 5 Done
  На этом уроке мы напишем функцию click_box_to(),
для движения фигуры в указанную клетку -
нужно будет поменять место фигуры в матрице map.
Ещё напишем функцию turn_move() для передачи права хода.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 34 мин. [Показать отчёт]
Научился: ход фигуры выполняется методом копирования  элемента массива map с координатами по х и у и, последующим затиранием клетки ОТКУДА сходили пробелом Чей ход определяет функция turn_move простой заменой переменной move_color белого на черный и обратно Функция mark_moves_from "закрывает" режим хода и показывает поле снова с возможными для хода клетками 
Видеообзор: s307imeG4v4
9 ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
24 чел. ★ 5 Done
  Поздравляю, четверть курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за первую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 31 мин. [Показать отчёт]
Научился: Весь документ пасётся на двух дивблоках, определяемых про идентификаторам Определены пара массивов: с фигурами и с полем доступных ходов Переменная move_color отвечает за то, чей сейчас ход - белых или красных )) Используются переменные для координат по икс и игрек ОТКУДА ходит кликнутая фигура Функция init_inf занимается лишь тем, что обнуляет массив поля доступных ходов, присваивая каждой из шестидесяти четырёх клеток значение пробела " " Функция mark_moves_from обнуляет массив ходов и перебрав во вложенных циклах все 64 клетки проверяет их функцией can_move_from(x, y) с передачей в него в аргументы икса и игрека, на предмет ДОПУСТИМОСТИ хода, и там где допустимо помечает единицей "1" (метит фигуры игрока, чей сейчас ход) Функция mark_moves_to действует почти аналогично предыдущей mark_moves_from, но уже помечает двойкой "2" те клетки, КУДА можно сходить (требует доработки), проверка условия выполняется функцией can_move_to(x, y) с передачей в него в аргументы икса и игрека get_color (x, y) отвечает за цвет отображения фигуры click_box (x, y) в зависимости от индекса в клетке поля ходов вызывают функцию хода откуда или хода куда click_box_from (x, y) помещает координаты откуда сходила фигура figure_to_html (figure) меняет литералы фигур на картинки click_box_to (x, y) перемещает фигуру (делает ход) turn_move () переводит право хода init_map () расставляет фигуры для новой игры show_map () рисует доску, рисует клетки, закрашивает их, вызывает функцию замены литералов на картинки фигур, отрабатывает клики по фигурам - ЭТО САМАЯ НАГРУЖЕННАЯ ИНСТРУКЦИЯМИ ФУНКЦИЯ start () вызывает функции начала игры, установки стартовой позиции фигур и отрисовки доски 
Видеообзор: g0wVKG5JwhU
10 Шахматная бюрократия 00:10:07
1 тест
24 чел. ★ 5 Done
  На этом уроке мы создадим функцию, которая будет проверять,
может ли фигура сходить так, как её попросят - то есть
реализовать алгоритмы передвижения для каждой фигуры
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт]
Научился: is correct_move должна свич-кейсом подбирать для фигуры доступные поля, куда она может сходить 
11 Кто есть кто? 00:10:59
1 тест
22 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_correct_move() и
добавим в неё проверку всех возможных фигур.
Так же добавим заглушки корректности хода для каждой фигуры.
Протестируем функции, найдём ошибку в коде и исправим её.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт]
Научился: по сложности на взгляд неспециалиста: 1 - король самый простой (ходит на одну клетку, всех боится, живет до первого тупика) 2 - ферзь (линейное движение) 3 - слон (пол-ферзя) 4 - тура (похожа на урезанного ферзя с другой стороны) 5 - конь (что за выдумка с ходом Г, вот загадка) 6 - пешка самая сложная (ходит вперед, рубит диагональю, может стать ферзём, прохождение опять же надо реализовать) 
12 Лошадью ходи! 00:07:32
1 тест
22 чел. ★ 5 Done
  На этом уроке мы реализуем самую простую функцию:
is_correct_knight_move() - конь ходит буквой Г :)

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: оказалось, что самый предсказуемый - это Эквус, по современному конь ) Реализация хода коня в паре проверок смещения (по иксу на единицу + по игреку на два) и наоборот 
13 Королевские шаги 00:06:00
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_correct_king_move()
Потом немного повеселимся.
Увидим самый быстрый мат и отрывок из к/ф "Джентльмены удачи".
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: ошибка в одном символе - бац, ничего не работает JavaScript, он такой! Алгоритм проверки хода короля в допуске смещения по оси абсцисс и по оси ординат не более единицы 
14 Горизонтальная вертикаль 00:08:04
1 тест
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию:
is_correct_rook_move()
Ладья ходит по вертикали или горизонтали.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 42 мин. [Показать отчёт]
Научился: rook - ладья sx - стартовая координата  фигуры по горизонтали sy - стартовая координата  фигуры по вертикали dx - координата клетки назначения фигуры по горизонтали dy - координата клетки назначения фигуры по вертикали Применили промежуточные переменные, принимающие значения +1 или -1 в зависимости от направления движения туры Для исключения движения ладьи по диагонали складывали модули промежуточных переменных осей абсцисс и ординат Отксорили, если не ошибаюсь 
15 Не стой на пути! 00:09:09
21 чел. ★ 5 Done
  На этом уроке мы доработаем функцию is_correct_rook_move().
Добавим проверку, находится ли кто-то на пути фигуры.
Так же мы добавим функцию on_map() для
проверки нахождения координат в пределах доски.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 18 мин. [Показать отчёт]
Научился: начало проверки на наличие препятствий для ладьи до запуска цикла - изменение координаты на единицу - чтобы не вернулся результат "УПЕРСЯ САМ В СЕБЯ" Реализовали через do while )) Цикл работает до совпадения стартовых координат с финишными хода фигуры sx и sy инкрементируются каждый цикл, и при значении в массиве map ПРОБЕЛ - эта клетка считается годной для хода и цикл повторяется Функция on_map проверяет координаты x и y на соответствие диапазону от нуля до семи Класс Math.sign возвращает NaN, ноль, 1 или -1 при: не числе, нуле, любом положительном числе или любом отрицательном числе 
16 Слоновья тропа 00:08:23
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию:
is_correct_bishop_move(), она будет похожа на
is_correct_rook_move(), но с небольшими изменениями.
Также оптимизируем циклы, добавим проверку границ доски.
Добавим функцию is_empty(), которая будет
проверять доступность хода на эту клетку.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 40 мин. [Показать отчёт]
Научился: функция is_empty (x, y) проверяет невыход за пределы игровой доски (с помощью функции on_map) - возвращает FALSE, если выход "за флажки", и возвращает значение ПРОБЕЛ элементу массива map с координатами полученными на входе функции 
17 Дорогу Королеве! 00:04:03
1 тест
21 чел. ★ 5 Done
  На этом уроке мы ещё раз скопируем алгоритм проверки хода в функцию is_correct_queen_move().
С третьей попытки мы догадаемся вообще убрать проверку на корректность значений delta_x/delta_y.
Ваше задание - предложить свой вариант выделения общего алгоритма из эти трёх функций - is_correct_move_queen/bishop/rook().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 48 мин. [Показать отчёт]
Научился: свой вариант выделения общего алгоритма из эти трёх функций - is_correct_move_queen/bishop/rook -> Базовая function is_correct_queen_move (sx, sy, dx, dy) целиком. Расширяется ифом для слона и ладьи. Попробовал сам реализовать свой вариант - труа фиаско. Даже отправил с нерабочим кодом своего предложения отчёт. Затем сел думать снова над кодом и тут меня допёрло - я же в вызов функции is_correct_queen_move(sx, sy, dx, dy НЕ ДОПИСАЛ ВОТ ЭТО, ЧТОБЫ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ПОДТЯГИВАЛИСЬ -> , delta_x, delta_y); Добавил это:  , delta_x, delta_y И ВСЁ ВЗЛЕТЕЛО! Я счастлив. 
Сложности: Решиться махать крыльями самостоятельно. Но школа Евгения Витольдовича творит чудеса - я наклепал что-то сам! Учитель, спасибо! Это удивительное осознание, когда чего-то сам состряпал, пусть и малую часть. 
18 Мелочь пузатая 00:13:23
1 тест
21 чел. ★ 5 Done
  На этом уроке мы порефакторим наш код,
выделив общий алгоритм из трёх функций:
is_correct_move_queen/bishop/rook().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 0 мин. [Показать отчёт]
Научился: Предложенный вариант рефакторинга Игромистра отличается от моих удачных опытов из прошлого отчёта, тем лучше - увидел, что правильный путь не один, реализации одного и того же возможны разными путями 
19 ПОЛУФИНАЛЬНЫЙ УРОК без видео
21 чел. ★ 5 Done
  Поздравляю, половина курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за вторую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт]
Научился: впервые сам без ментора наваял рефакторинг, который ещё и работает! У Игромистра вариант с тремя функциями был реализован иначе, любопытно, что он скажет о моём варианте, если заметит, конечно предыдущий отчёт Курс прекрасен дополнением к видео - скриншотами с кодом в каждом уроке - можно отсмотреть видео, намотать на ус, а затем править строки, как предлагается За эту часть курса чуть яснее стало перечисление входящих в сигнатуру функции параметров ЗАЧЕМ ОНИ - эти данные входят в функцию как в мясорубку на входе для обработки ВАЖЕН ЛИ ПОРЯДОК ПЕРЕЧИСЛЕНИЯ ЧЕРЕЗ ЗАПЯТУЮ? - нет, главное перечислить те, которые необходимы return - то, что вывалится из функции после обработки (как фарш из мясорубки))) 
Видеообзор: g5zDJpq3vaQ
20 Пешкины законы 00:09:37
19 чел. ★ 5 Done
  На этом уроке мы поговорим о пешках:
+ чем она отличается от других фигур?
+ какие у неё правила?
+ какие у неё исключения?

Мы реализуем функцию is_correct_pawn_move()
и заглушки для вспомогательных функций:
is_correct_white_pawn_move() и is_correct_black_pawn_move().

Лирическое задание - найти/нарисовать интересную картинку о пешках.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 53 мин. [Показать отчёт]
Научился: пешка самая мудрёная единица, фигурой называть её избегать Зависимость от цвета в правилах хода - это преррогатива компьютерного подхода Для игроков ходит она одинаково, ведь доску можно перевернуть для удобства, чего не сделаешь в программе (точнее излишне это делать) Первый ход может быть на две клетки, после - только на одну вперед Рубит только вперед на диагональ En passant На линиях 0 и 7 может меняться на свою фигуру, кроме короля 
Сложности: My dog destroyed my chess set. I tried to replace the missing pieces... but the pawn shop was closed. 
21 Судьба пешки 00:13:42
1 тест
19 чел. ★ 5 Done
  На этом уроке мы воспользуемся сайтом draw.io
для рисования схемы алгоритма пешки.

На схеме отобразим следующие правила для пешек:
1. направление зависит от цвета;
2. положение может быть на горизонталях 1-6;
3. могут ходить только прямо и только на одну клетку;
4. с 1/6 горизонтали могут ходить на две клетки через пустую;
5. рубят наискосок на одно поле вперёд-влево/вправо;
6. могут рубить на битое поле (взятие на проходе);
7. на последней линии превращается в слона/коня/ладью/ферзя своего цвета.
Превращение пешки будет реализовано в функции завершения хода box_click_to().

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: https://www.draw.io/ - вещь! 
22 Пешка на охоте 00:08:54
1 тест
19 чел. ★ 5 Done
  На этом уроке мы реализуем часть алгоритма
для функции is_correct_white_pawn_move()
на основе схемы, созданной на прошлом уроке.
Добавим заглушку для функции is_pawn_passant().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: стала понятнее роль диаграмм при создании кода Предварительно построив графическое изображение жизненного цикла будущей программы, проще кодить Визуальное представление программы даёт подмогу в момент написания инструкций - не надо держать в голове множество подробностей, они уже на виду Меньше возможностей для ошибки и пропуска инструкций Диаграмма разделяет работу на две меньшие по нагрузке части 
23 Пешка в сапогах 00:09:56
19 чел. ★ 5 Done
  На этом уроке мы доработаем алгоритм для функции
is_correct_white_pawn_move() на основе блок-схемы.
Так же подкорректируем нашу схему.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 17 мин. [Показать отчёт]
Научился: проверке первого и последующих ходов 
24 Взятие на проходе шустрых пешек 00:08:50
1 тест
19 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм взятия на проходе.
Для этого мы доработаем ранее созданную заглушку is_pawn_passant().
Добавим вспомогательные переменные для хранения координат
возможного взятия на проходе, они нам пригодится на следующем уроке.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: pawn_attack_x && pawn_attack_y предположительно должны устанавливаться для каждой пешки, которая предприняла ход на две клетки Только в этом случае актуально взятие на проходе и в случае хода на две клетки целесообразно отслеживать, а не вздумает ли кто срубить пешечку en passant 
25 Радар для быстрых пешек 00:11:48
1 тест
18 чел. ★ 5 Done
  -- Куда торопимся?
-- Почему превышаем?
-- Покажите ваши координатики...
-- Пройдёмте, пешечка, в отделение...


На этом уроке мы доработаем функцию click_box_to(),
добавив проверку прыгнула ли пешка через клетку.прыгнула, то мы сохраняем координаты,
по которым её можно поймать.
Вынесем написанный алгоритм в отдельную функцию check_pawn_attack()
После чего мы уберём пешку противника в отделение для сбитых фигур.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 33 мин. [Показать отчёт]
Научился: взятие на проходе удалось провести! 
26 Афроамериканская пешка 00:10:32
18 чел. ★ 5 Done
  На этом уроке мы реализуем правила движения
чёрных пешек по аналогии с белыми.

Для начала мы перенесём общую проверку
из функций is_correct_*_pawn_move()
в функцию is_correct_pawn_move().

Доработаем функцию is_pawn_passant().
Объединим функции is_correct_*_pawn_move()
в общую функцию is_correct_sign_pawn_move().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: черные тоже люди! 
Сложности: Учиться ближе к полуночи - не лучший выбор. Надо искать время утром. 
27 Пешкина мечта 00:07:44
1 тест
18 чел. ★ 5 Done
  На этом уроке мы исправим ошибку в функции click_box_to(),
чтобы чёрные пешки тоже могли съедать после взятия на проходе.
После чего мы перенесём рабочий код в функцию check_pawn_attack().

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: проверка удаления взятой на проходе пешки выполняется ифэлзом с проверкой цвета фигуры 
28 Волшебное превращение пешки 00:14:53
18 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм превращения пешки.
Для этого нам понадобится новая функция promote_pawn().
Выбор фигуры реализуем через функцию prompt().
Добавим проверку, чтобы можно было выбирать только разрешённые фигуры.
Доработаем функцию click_box_to() - добавим вызов
превращения пешки если это необходимо.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 10 час. 48 мин. [Показать отчёт]
Научился: надо пересмотреть урок. Поймал баг, видно на скринах, не понял откуда пока. 
Сложности: Утро вечера мудренее 
29 ТРЕТИЙ ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
1 тест
18 чел. ★ 5 Done
  Поздравляю, три четверти курса позади.
Предлагаю немножко передохнуть.

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

Приложи к отчёту любую шахматную карикатуру.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 11 мин. [Показать отчёт]
Научился: оказывается кодить и видеть результат можно не только в IDEшке, но и в простом браузере. F12 спасает, если накуролесил в инструкциях и то-то пошло не так как ожидалось. Если инструкция работает криво в отображении - браузер покажет либо полную чистоту экрана, либо коряво отработает измененные строки. Вместо методов сишарпа в JavaScript это же называем функциями, доступны те же ветвления, циклы, переменные, комментарии. Внимательность к деталям - наше всё. Супербюрократичность программирования явлена в курсе в полной мере - скрипт отработает ровно так, как ты ему напишешь. И никак иначе. Если что-то выполняется не так - оно выполняется именно так, как ты и написал. Ныряем в код и смотрим, что за чем отрабатывает и что куда записывает. Дело Мастера боится. Лишь бы Мастер не убоялся дела ) Авторам спасибо за усилия, курсантам - терпения и холодного разума. 
30 Случайный шах 00:08:07
17 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_check(),
чтобы король не ходил на клетку, которая под боем.

На время теста вы уберём все пешки и добавим функцию is_check()
с генерируемой случайностью шаха для всех фигур на поле.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 18 мин. [Показать отчёт]
Научился: проверка на шах подразумевает определение фигур противника способных следующим ходом сходить на клетку, где стоит король Защита от шаха включает в себя способы: а) уйти б) закрыться в) срубить наглеца, поставившего шах Его Величеству 
31 Возврат хода 00:12:52
1 тест
17 чел. ★ 5 Done
  На этом уроке мы опишем псевдокод для функции is_check().
Добавим две глобальных переменных: move_figure и to_figure.
Так же добавим функции: move_figure() и back_figure().
Модернизируем функции click_box_to() и promote_pawn()
для поддержки новой системы передвижения фигур по доске.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт]
Научился: функция отката хода берет значение откуда ходили из переменной from_figure Клетка куда ходили заполняется из переменной to_figure 
32 Король в розыске 00:10:18
1 тест
17 чел. ★ 5 Done
  На этом уроке мы добавим в функцию is_check() вызов move_figure() и back_figure().
Реализуем вспомогательную функцию find_figure() и поэкспериментируем.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт]
Научился: неформальная обстановка на уроке  помогает понять суть происходящего 
33 Служба безопасности короля 00:12:58
1 тест
17 чел. ★ 5 Done
  На этом уроке мы продолжим дорабатывать функцию is_check().
Переберём все ходы противника, чтобы исключить
из возможных ходов короля клетки, которые под боем.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 43 мин. [Показать отчёт]
Научился: turn_move() функция меняет очередность хода, адаптируя функцию is_correct_move() на время перебора фигур противника. Затем ход возвращается обратно Условие в цикле может быть множественным через && или || 
Сложности: В прошлом уроке прозевал указать map в инструкции (первый скриншот в центре выделил) - карта не отрисовывалась. Утро оказалось мудренее вечера - сегодня нашел в чём ошибка. Исправил - всё взлетело, король под шах не идёт. Внимательность - наше всё )) 
34 Шах вперёд - шаг назад 00:14:09
1 тест
16 чел. ★ 5 Done
  На этом уроке мы выделим часть кода из функции is_check()
в новую функцию: is_check_after_move(), которая
будет вызываться для проверки возможности хода.
Сама же функция is_check() останется независимой
и может вызываться тогда, когда нам будет нужно.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 11 час. 49 мин. [Показать отчёт]
Научился: is_check() не позволяет выполнить ход противнику в случае шаха, любой, кроме обеспечивающего нейтрализацию шаха королю (находящемуся под шахом) 
35 Информационная панель 00:13:07
1 тест
16 чел. ★ 5 Done
  На этом уроке мы выведем информацию о текущем состоянии игры.
Для этого мы реализуем функцию show_info(),
которая будет вызываться при каждой генерации доски.

Так же нам надо будет реализовать вспомогательные
функции: is_checkmate() и is_stalemate().

Доработаем функцию mark_moves_from() для подсчёта
количества возможных ходов текущего игрока.

Оптимизируем определение очерёдности хода.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт]
Научился: info отображает чей ход, наличие мата, пата, шаха В функцию, оказывается, можно передавать тернарный оператор, не знал 
36 Подвиг безымянной пешки 00:15:36
1 тест
16 чел. ★ 5 Done
  На этом уроке мы добавим проверку на
пешечный подвиг по спасению короля:
может ли она взять на проходе вражескую
пешку, которая угрожает королю шахом.

Для этого вынесем проверку взятия на проходе
в отдельную функцию move_pawn_attack().

Для корректной работы кода нам понадобится
ещё одна функция back_pawn_attack().

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 31 мин. [Показать отчёт]
Научился: что-то прозевал - не взлетело Буду смотреть утром. 
37 ФИНИШНАЯ ПРЯМАЯ без видео
1 тест
16 чел. ★ 5 Done
  Быстро сказка сказывается, не быстро дело делается.
Наша программа практически завершена,
осталось самую малость - научить короля прятаться за ладьёй,
это таинство называется "рокировка".

Ваше задание.
1. Найти/нарисовать хорошую картинку на тему "Рокировки" и приложить её к отчёту.
2. Выписать все правила, при которых возможна рокировка.



Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 15 мин. [Показать отчёт]
Научился: рокировка возможна: если ладья под боем если ладья, стоящая на ферзевом фланге, при рокировке проходит через битое поле (таковыми могут оказаться поля b1 и b8, где в начале игры у обоих игроков стоят кони) если король ранее был под шахом, и от шаха избавились, прикрывшись или взяв шахующего другой фигурой (но при этом не сдвинули короля с начальной позиции) Рокировку делать нельзя: если король делал ходы (включая рокировку) если ладья уже ходила с ладьёй, полученной превращением из пешки если поле, пройденное королём во время рокировки, находится под боем противника если король перед началом рокировки находится под шахом, или после её осуществления попадает под шах если между королём и ладьей для рокировки, находится какая-либо любая фигура 
38 Правила рокировки 00:09:54
1 тест
16 чел. ★ 5 Done
  На этом уроке мы обсудим правила рокировки короля.
Так же обсудим необходимы действия для её совершения.
Найти интересную картинку на тему рокировки.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт]
Научился: начинай рокровку перемещением короля - он не может ходить в обычном ходе как в рокировке, значит невозможна двоякая трактовка твоих действий Той же рукой перемещай ладью (туру), той же рукой жми часики (если они есть) 
39 Флаг над замком 00:14:39
1 тест
16 чел. ★ 5 Done
  На этом уроке мы создадим 4 глобальных флага:
can_white_castle_left, can_white_castle_right,
can_black_castle_left, can_black_castle_right.

Реализуем вспомогательную функцию update_castle_flags().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 7 час. 56 мин. [Показать отчёт]
Научился: снова поймал бага, ходы выполняются неверно, надо пересматривать код 
40 Король всемогущий 00:12:13
1 тест
16 чел. ★ 5 Done
  На этом уроке мы добавим проверку для короля,
может ли он сделать рокировку - can_castle().

Добавим заглушки для вспомогательных функций:
can_white_castle() и can_black_castle().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: С королем всё прошло успешно. За пешки разбираюсь - иду курс заново на другом компе, понял, что спешка и занятость на других работах в понимании ни разу не подмога. Но разобраться надо. Ибо кайф от пойманного бага я уже вкусил и в курсе как это приятно, когда код начинает делать то что надо, а не то, что ему вздумается от твоей личной программистской ошибочки. По невнимательности, не непрофессионализму или по некомпетентности - дело второе. Важно, что код должен быть правильным. А это на автомате не происходит. Однако ) 
41 Рокировка под шахом 00:11:13
1 тест
16 чел. ★ 5 Done
  На этом уроке мы доработаем функцию can_castle(),
добавив проверку на шах и оптимизируем is_check().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: реализовали невозможность рокировки при шахе. Если шах - королю доступен лишь побег в дамском платье ) 
42 Белолевая рокировка 00:14:23
1 тест
16 чел. ★ 5 Done
  На этом уроке мы отрефакторим функцию can_castle(),
добавив заглушки вспомогательных функций can_white/black_cl/cr().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт]
Научился: порефакторил до нового бага. Есть о чем подумать с утра  
43 Рокировка на все времена 00:08:36
1 тест
16 чел. ★ 5 Done
  На этом уроке мы реализуем функции can_white/black_cl/cr().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 4 час. 10 мин. [Показать отчёт]
Научился: баги уничтожаются, король начал видеть свои допустимые клетки для рокировки. 
44 Ладейный паркур 00:10:07
1 тест
16 чел. ★ 5 Done
  На этом уроке мы реализуем функцию move_castling_rook(),
чтобы при рокировке наши ладьи тоже перемещались.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 6 час. 6 мин. [Показать отчёт]
Научился: снова баги. Курс требует второго подхода, не иначе. Разберемся ) 
45 ФИНАЛЬНЫЙ УРОК без видео
14 чел. ★ 5 Open
  Поздравляю с завершением курса!

Оставь, пожалуйста, отзыв об этом курсе.

Запиши видеообзор созданной программы.

Напиши, что ещё можно добавить в эту программу.
46 VIP урок - Минное поле 00:11:37
14 чел. ★ 5 $
  На этом уроке мы реализуем функцию mark_attack(),
чтобы отображать все битые поля на шахматной доске,
куда может атаковать противник сразу после вашего хода.
Доработаем функцию show_map() для отображения полей.
47 VIP урок - Бестолковый интеллект 00:10:38
13 чел. ★ 5 $
  На этом уроке мы реализуем функцию doRandMove(),
для случайного выбор какой фигурой пойти,
Так же столкнём два "рандомайзера" на шахматной доске.

  Итого:   47 видеоуроков 7 час. 14 мин.
32 теста
13 чел. ★ 5  
  Финалисты:   Иван Воронин,   Алексей В.,   Tekashnik,   Артём,   Сергей Соколов,   Yefim,   Константин,   Елена,   Дмитрий,   Andrew,   Tom,   Александр Шлома,   MaxB .

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





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

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

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

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


Научился: Записывать партию
Трудности: Запрограммировать запись партии
Курс Микрошахматы на Javascript получился не просто хорошим, а сказочно шикарным! До курса мне казалось, что программирование шахмат это заоблачные высоты. И хотя Я понимаю, то, что сделано - это еще не игра в полном смысле этого слова, но фундамент заложен основательный. Почти из каждого урока я узнавал о каком-то новом программистском приеме и почти каждый раз не переставал восторгаться красотой и простой кода. Причем все было настолько понятно, что можно было самому вносить свои изменения, не опасаясь, что-то испортить. Попутно много интересного узнавал о самих шахматах. Конечно, осталось место для совершенствования программы и добавления дополнительных опций. Сейчас, при клике на фигуру, программа показывает возможные ходы этой фигуры. На стадии отладки программы - это очень полезный инструмент. Для новичков шахматной игры - это также прекрасная возможность быстрее освоить правила игры. Однако, опытных игроков такой подход может даже раздражать, т.к. эта своеобразная подсказка сопернику. Компромисс - сделать это в виде опции. Что ещё можно добавить в прoгpаммy ? 0. Навести косметический ремонт (Отразить реальные шахматные координаты) 1. Контроль времени. 2. Запись партии. 3. Установка начальной позиции для шахматных задач. 4. Возврата хода(как опция). 5. Симуляция партии 6. Введение анимации при движении фигур. Хочу еще раз поблагодарить Евгения Витольдовича за прекрасный курс. Предлагаю Евгению Витольдовичу подумать над продолжением курса в плане научить программу самостоятельно делать ходы. Для начала - решать шахматные задачи. Я думаю найдется немало желающих пройти этот курс. Для видео отчета я доработал программу и теперь можно записать партию заранее, а затем программа демонстрирует игру на полуавтомате.


Научился: Курс просто супер. Не ожидал, что мне он так легко дастся. Есть желание его оптимизировать, добавить нотацию и запись партии, дописать оставшиеся правила (троекратное повторение, правило 50 ходов, 75 ходов). И вообще надо правила почитать, а то они меняются каждый год :)
Трудности: Записать видео, придумать тему обзора. В итоге сплагиатил идею