Обучение языку 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.

В каждом уроке кроме видео есть фото-инструкция по изменению кода.
Отчёт отправил: 18783. Andrew Выполнено за 39 дней 1 час. 42 мин. [Показать отчёт]
Научился: Приспособил программу Sublime Text для набора html. Создал файл chess.html с доской. 
Сложности: Под звездочками пока сложно. 
2 Координатное поле 00:08:53
28 чел. ★ 5 Done
  На этом уроке мы увеличим клетки нашей доски,
чтобы они были одинаковыми в любой ситуации.
Уберём зазор между клетками.
Так же мы раскрасим доску по правилам игры,
чтобы правая-нижняя клетка была светлой.
Добавим координаты слева и снизу доски,
а для полноты картины добавил заголовок.
Отчёт отправил: 18783. Andrew Выполнено за 23 час. 27 мин. [Показать отчёт]
Научился: Добавил размеры [ширина, высота] для клеток. Раскрасил клетки доски (ферзь любит свой цвет). Добавил координаты (пока 0-7). Добавил заголовок.  
Сложности: Подумать о стилях 
3 Шахматные буквы 00:09:05
1 тест
28 чел. ★ 5 Done
  На этом уроке мы отобразим «шахматные» буквы на доске.
Для этого мы создадим массив, заполним его буквами,
которые кодируют фигуры по нотации FEN
и сделаем их отображение в таблице.
Отчёт отправил: 18783. Andrew Выполнено за 14 мин. [Показать отчёт]
Научился: Создал функцию init_map(). Добавил буквы в массив. Добавил центровку фигур. Отобразил фигуры на доске. 
Сложности: Ничего. 
4 Фигуры на доске 00:07:13
1 тест
28 чел. ★ 5 Done
  На этом уроке наши фигуры обретут свой облик,
для этого нам потребуется вспомогательная функция figure_to_html(),
которая будет возвращать облик нужной нам фигуры в формате HTML-Unicode.
Поиграемся с размером и цветом фигур.
Отчёт отправил: 18783. Andrew Выполнено за 3 дня 4 час. 16 мин. [Показать отчёт]
Научился: Убрал слово info под доской. Добавил функцию figure_to_html(). Добавил в нее фигуры HTML Unicode. Добавил возможность изменения размера и цвета.  
Сложности: Не было сложного. 
5 Светофор для фигур 00:08:35
27 чел. ★ 5 Done
  На этом уроке мы будем отмечать,
какими фигурами можно ходить и куда можно ходить.
Пока реализуем простое правило:
можно ходить на пустую клетку или клетку врага.
Для этого мы добавим ещё один массив inf,
для хранения возможных ходов выбранной фигуры.
Так же мы доработаем функцию show_map (),
чтобы она отображала подсказки из массива inf.
Отчёт отправил: 18783. Andrew Выполнено за 15 мин. [Показать отчёт]
Научился: Создал массив inf. Создал функцию  init_inf(). Доработал функцию show_map() для отображения подсказок. Вызываю init_inf() после init_map(). 
Сложности: Предложить свой вариант подсветки. 
6 Фигурная перекличка 00:07:49
2 теста
26 чел. ★ 5 Done
  На прошлом уроке мы статично отобразили
выбранную фигуру и поля, куда эта фигура может пойти.
Теперь наша задача реализовать это программно.
Для этого нам понадобится переменная для хранения цвета хода и
реализуем функции: mark_moves_from(), can_move_from() и get_color().
Протестируем результат изменив цвет хода.
Отчёт отправил: 18783. Andrew Выполнено за 1 час. 38 мин. [Показать отчёт]
Научился: Добавил переменную move_color для хранения цвета хода. Реализовал функции mark_moves_from(); can_move_from(); get_color(). 
Сложности: Ничего 
7 Шахматные выборы 00:11:58
26 чел. ★ 5 Done
  На этом уроке мы реализуем выбор фигуры для хода
через клик левой кнопкой мышки по нужной клетке.
Для этого мы сформируем вызов функции click_box()
с координатами клетки, по которой было нажато.

Отчёт отправил: 18783. Andrew Выполнено за 22 мин. [Показать отчёт]
Научился: Добавил функцию onclick ко всем клеткам. Реализовал функции click_box(); click_box_from(); mark_moves_to(); can_move_to(). Добавил заглушку для click_box_to(). 
Сложности: Не было сложного 
8 Завершение хода 00:07:30
1 тест
24 чел. ★ 5 Done
  На этом уроке мы напишем функцию click_box_to(),
для движения фигуры в указанную клетку -
нужно будет поменять место фигуры в матрице map.
Ещё напишем функцию turn_move() для передачи права хода.
Отчёт отправил: 18783. Andrew Выполнено за 31 мин. [Показать отчёт]
Научился: Реализовал три функции: click_box_to(); turn_move(); start(). разыграл микро-партию. 
Сложности: Не было 
9 ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
24 чел. ★ 5 Done
  Поздравляю, четверть курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за первую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
Отчёт отправил: 18783. Andrew Выполнено за 6 дней 16 час. 14 мин. [Показать отчёт]
Научился: Освоил немножко JavaScript и на последнем уроке FastStone Capture и Youtube. Отличный курс 
Сложности: Не рокировать самому и не дать это сделать сопернику). Иначе запись партии сбилась бы. 
Видеообзор: htwnccJo6Q4
10 Шахматная бюрократия 00:10:07
1 тест
24 чел. ★ 5 Done
  На этом уроке мы создадим функцию, которая будет проверять,
может ли фигура сходить так, как её попросят - то есть
реализовать алгоритмы передвижения для каждой фигуры
Отчёт отправил: 18783. Andrew Выполнено за 3 дня 17 мин. [Показать отчёт]
Научился: Созданы функции can_move() и is_correct_move(). Модифицирована mark_moves_from 
Сложности: Что должно быть в алгоритме is_correct_move Приоритетная проверка - если после хода, нашему королю остается шах, ход невозможен. Возможно, другой функцией проверять? В самом конце, если после любого хода шах остается, проверяем , а шах ли нам до хода, если нет, то это пат, зовем судью и фиксируем ничью, если шах есть,  то нам мат, сдаемся, расходимся. Определяем какой фигурой ходим. Затем проверки для каждой фигуры: Король. До восьми клеток вокруг - своих пропускаем, врага съедаем, доп проверка на  возможность рокировок. Ладья, проверяем горизонталь и вертикаль, до встречи со своими или с врагом, своих отбрасываем, врага бьем. Проверяем рокировку. Слон то же что и ладья, но диагонали вместо горизонталей и вертикалей, и не нужна проверка рокировок. Ферзь - это слон, стоящий на ладье,  но не нужна проверка рокировок. Конь, проверка до 8 полей по букве Гэ. Пешка - три поля: вверх, если там пусто, вверх влево, если там враг, вверх вправо, если там враг. Если в начальной позиции, и впереди 2 пустых поля, то вперед на 2. И проверка взятия на проходе.  
11 Кто есть кто? 00:10:59
1 тест
22 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_correct_move() и
добавим в неё проверку всех возможных фигур.
Так же добавим заглушки корректности хода для каждой фигуры.
Протестируем функции, найдём ошибку в коде и исправим её.
Отчёт отправил: 18783. Andrew Выполнено за 39 мин. [Показать отчёт]
Научился: Продолжил реализацию функции is_correct_move(). Написал 12 функций по 2 для каждой фигуры. Ошибку в коде подправил еще на прошлом уроке. 
Сложности: Степени сложности функций по возрастанию (предположил, что рокировка проверяется отдельной функцией и ее сложность не учитывается) 1. Ферзь (условно самое простое, реализовав слона и ладью) 2. Конь 3. Король (равен коню по сложности, но больше кода из-за рокировок) 4. Слон 5. Ладья  (равна слону по сложности, но больше кода из-за рокировок) 6. Пешка (самое сложное из-за взятия на проходе) 
12 Лошадью ходи! 00:07:32
1 тест
22 чел. ★ 5 Done
  На этом уроке мы реализуем самую простую функцию:
is_correct_knight_move() - конь ходит буквой Г :)

Отчёт отправил: 18783. Andrew Выполнено за 45 мин. [Показать отчёт]
Научился: Реализовал функции коня и короля 
Сложности: В этот раз ничего 
13 Королевские шаги 00:06:00
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_correct_king_move()
Потом немного повеселимся.
Увидим самый быстрый мат и отрывок из к/ф "Джентльмены удачи".
Отчёт отправил: 18783. Andrew Выполнено за 46 мин. [Показать отчёт]
Научился: Посмотрел видео партии Хмыря и Папанова.  Оказывается еще 4.Ne5 было ошибкой. Не знал эту историю) Функцию короля, как выяснилось, правильно написал на предыдущем уроке. Оставшиеся функции на JS не осилил самостоятельно. 
Сложности: Оставшиеся функции is_correct_move(). 
14 Горизонтальная вертикаль 00:08:04
1 тест
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию:
is_correct_rook_move()
Ладья ходит по вертикали или горизонтали.
Отчёт отправил: 18783. Andrew Выполнено за 3 час. 23 мин. [Показать отчёт]
Научился: Реализовал функцию is_correct_rook_move(). Затем коряво, но дописал её. 
Сложности: Не было сложного 
15 Не стой на пути! 00:09:09
21 чел. ★ 5 Done
  На этом уроке мы доработаем функцию is_correct_rook_move().
Добавим проверку, находится ли кто-то на пути фигуры.
Так же мы добавим функцию on_map() для
проверки нахождения координат в пределах доски.
Отчёт отправил: 18783. Andrew Выполнено за 1 час. 16 мин. [Показать отчёт]
Научился: Функция is_correct_rook_move() переработана. Функция is correct_bishop_move() написана. 
Сложности: Понять, что Math.sign() не работает в Internet Explorer 
16 Слоновья тропа 00:08:23
21 чел. ★ 5 Done
  На этом уроке мы реализуем функцию:
is_correct_bishop_move(), она будет похожа на
is_correct_rook_move(), но с небольшими изменениями.
Также оптимизируем циклы, добавим проверку границ доски.
Добавим функцию is_empty(), которая будет
проверять доступность хода на эту клетку.
Отчёт отправил: 18783. Andrew Выполнено за 50 мин. [Показать отчёт]
Научился: Оптимизированы или реализованы функции: is_correct_rook_move(); is_correct_bishop_move(); is_empty(); can_move_from(); can_move_to() Создал функцию is_correct_queen_move() на основе функций ладьи и слона. 
Сложности: Не было сложного. 
17 Дорогу Королеве! 00:04:03
1 тест
21 чел. ★ 5 Done
  На этом уроке мы ещё раз скопируем алгоритм проверки хода в функцию is_correct_queen_move().
С третьей попытки мы догадаемся вообще убрать проверку на корректность значений delta_x/delta_y.
Ваше задание - предложить свой вариант выделения общего алгоритма из эти трёх функций - is_correct_move_queen/bishop/rook().
Отчёт отправил: 18783. Andrew Выполнено за 1 час. 4 мин. [Показать отчёт]
Научился: Добавил функцию is_correct_queen_move() и тут же удалил. Попробовал реализовать общий алгоритм трех функций. 
Сложности: Реализовал is_correct_QueenRookBishop_move(), свитчем разогнал условия по фигурам 
18 Мелочь пузатая 00:13:23
1 тест
21 чел. ★ 5 Done
  На этом уроке мы порефакторим наш код,
выделив общий алгоритм из трёх функций:
is_correct_move_queen/bishop/rook().
Отчёт отправил: 18783. Andrew Выполнено за 32 мин. [Показать отчёт]
Научился: Функции is_correct_*_move() написаны. В функцию is_correct_line_move() помещен общий код. Реализованы функции is_correct_*_delta()  
Сложности: Пока все понятно. Хорошо, когда знаний мало. Легче учиться сразу маленьким функциям, чем переучиваться с больших :) 
19 ПОЛУФИНАЛЬНЫЙ УРОК без видео
21 чел. ★ 5 Done
  Поздравляю, половина курса позади.
Предлагаю немножко передохнуть и развлечься.
Напиши, чему ты научился за вторую часть этого курса.
Нравится ли тебе такой способ изложения материала.
Какие видишь преимущества и недостатки курса.
Разыграй любую партию и запиши на видео.
Можно без голоса.
Отчёт отправил: 18783. Andrew Выполнено за 20 час. 17 мин. [Показать отчёт]
Научился: Отлично построен курс, как по наполнению, так и по подаче материала. Хочется выполнять, урок за уроком. Особенно доставляет, если удается выполнить самостоятельные задания, а потом их сравнивать с эталонными. 
Сложности: Без рокировок тяжело играть, конечно :) 
Видеообзор: Q9fIXoM3DW8
20 Пешкины законы 00:09:37
19 чел. ★ 5 Done
  На этом уроке мы поговорим о пешках:
+ чем она отличается от других фигур?
+ какие у неё правила?
+ какие у неё исключения?

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

Лирическое задание - найти/нарисовать интересную картинку о пешках.
Отчёт отправил: 18783. Andrew Выполнено за 3 час. 8 мин. [Показать отчёт]
Научился: Эх, сменить бы пешки на рюмашки, Сразу б прояснилось на доске!  
Сложности: Сделал, опять же коряво, is_correct_white_pawn_move(). Отдал 4 переменные под хранение координат последнего хода. В click_box_to() надо проверять, побили ли на проходе и, если да, сносить чужую пешку. Там же проверять превращение пешки и, если да, сносить пешку и ставить фигуру.  
21 Судьба пешки 00:13:42
1 тест
19 чел. ★ 5 Done
  На этом уроке мы воспользуемся сайтом draw.io
для рисования схемы алгоритма пешки.

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

Отчёт отправил: 18783. Andrew Выполнено за 7 час. 2 мин. [Показать отчёт]
Научился: Нарисовал блок-схему алгоритма пешки. Реализовал алгоритм в функции is_correct_pawn_move(). Модифицировал is_correct_pawn_move() до is_correct_sign_pawn_move (исключив отдельные функции для каждого цвета) Модифицировал click_box_to (x, y) для удаления съеденной при взятии на проходе пешки и для превращения. Пока не смог реализовать превращение во все 4 фигуры, смог только в ферзя. 
Сложности: Изначально было видно, что две функции для разных цветов - не очень удачная идея. Заглянул чуть в будущие отчеты, и точно, смотрю - уже одна функция) Написал ее сам как смог, вроде все просто. Недостаток - 4 дополнительные глобальные переменные, как я и писал в прошлом отчете. Но пешки отлично работают, осталось только научить их превращаться в ладью, коня и слона на выбор. Хороший урок. 
22 Пешка на охоте 00:08:54
1 тест
19 чел. ★ 5 Done
  На этом уроке мы реализуем часть алгоритма
для функции is_correct_white_pawn_move()
на основе схемы, созданной на прошлом уроке.
Добавим заглушку для функции is_pawn_passant().
Отчёт отправил: 18783. Andrew Выполнено за 27 мин. [Показать отчёт]
Научился: Реализовал функцию is_correct_white_pawn_move() Добавил заглушку для функции is_pawn_passant() 
Сложности: Не было сложного, откатил свой вариант обратно до общей линии курса ) 
23 Пешка в сапогах 00:09:56
19 чел. ★ 5 Done
  На этом уроке мы доработаем алгоритм для функции
is_correct_white_pawn_move() на основе блок-схемы.
Так же подкорректируем нашу схему.
Отчёт отправил: 18783. Andrew Выполнено за 40 мин. [Показать отчёт]
Научился: Доработал функцию is_correct_white_pawn_move(). Доработал блок-схему алгоритма пешки. 
Сложности: Не было сложного. 
24 Взятие на проходе шустрых пешек 00:08:50
1 тест
19 чел. ★ 5 Done
  На этом уроке мы реализуем алгоритм взятия на проходе.
Для этого мы доработаем ранее созданную заглушку is_pawn_passant().
Добавим вспомогательные переменные для хранения координат
возможного взятия на проходе, они нам пригодится на следующем уроке.
Отчёт отправил: 18783. Andrew Выполнено за 2 час. 4 мин. [Показать отчёт]
Научился: Доработал функцию is_pawn_passant() 
Сложности: В моем алгоритме взятия на проходе, реализованном на уроке "Судьба пешки", я не брал во внимание сущность "битое поле", а только запоминал в 4-х переменных предыдущий ход соперника (откуда и куда, не важно кем). Алгоритм функции там был таков: 1. Клетка, куда идем, пустая? если нет , то false 2. Модуль разности координат sx-dx равен 1? если нет , то false 3. Координата sy == 4 ? если нет , то false 4. Координата dy == 5 ? если нет , то false 5. Координаты dx и x-откуда предыдущего хода соперника равны? если нет , то false 6. Координаты dx и x-куда предыдущего хода соперника равны? если нет , то false 7. Координата y-откуда предыдущего хода соперника ==6? если нет , то false 8. Координата y-куда предыдущего хода соперника ==4? если нет , то false 9. На клетке [dx, dy-1] стоит пешка? если нет , то false 10. возврат true. Пешка соперника снималась в функции click_box_to() следующим образом: Функция pawn_passant еще раз вызывается, и если она возвращает истину при входных (move_from_x, move_from_y, x , y), то затираем клетку [x, y-1]. Обратите внимание, что в click_box_to координаты move_from_x, move_from_y уже были обновлены к этому моменту. Потому я и вводил 4 переменные для старого хода. Ход сделан, и теперь в конце click_box_to() обновляем эти 4 переменные последнего хода.  
25 Радар для быстрых пешек 00:11:48
1 тест
18 чел. ★ 5 Done
  -- Куда торопимся?
-- Почему превышаем?
-- Покажите ваши координатики...
-- Пройдёмте, пешечка, в отделение...


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

Отчёт отправил: 18783. Andrew Выполнено за 47 мин. [Показать отчёт]
Научился: Доработал функцию click_box_to(). Создал отдельную функцию check_pawn_attack(). Добавил удаление враждебно настроенной пешки при взятии на проходе. 
Сложности: Всё понятно 
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().
Отчёт отправил: 18783. Andrew Выполнено за 36 мин. [Показать отчёт]
Научился: Функция is_correct_pawn_move() доработана. Функция is_pawn_passant() доработана. Реализована общая функция is_correct_sign_pawn_move(). Удалены устаревшие функции is_correct_white_pawn_move() и is_correct_black_pawn_move(). Плюсы объединения - универсальность функции, минусы - сложность чтения для участков, где используется sign. Я бы еще саму функцию  is_correct_sign_pawn_move() разбил на несколько функций. 
Сложности: Не реализовали взятие на проходе для черных. 
27 Пешкина мечта 00:07:44
1 тест
18 чел. ★ 5 Done
  На этом уроке мы исправим ошибку в функции click_box_to(),
чтобы чёрные пешки тоже могли съедать после взятия на проходе.
После чего мы перенесём рабочий код в функцию check_pawn_attack().

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

Отчёт отправил: 18783. Andrew Выполнено за 3 дня 38 мин. [Показать отчёт]
Научился: Доработана функция click_box_to() Реализована функция propote_pawn() 
Сложности: Реализация своего способа превращения фигуры (не реализовано) 
29 ТРЕТИЙ ЧЕТВЕРТЬФИНАЛЬНЫЙ УРОК без видео
1 тест
18 чел. ★ 5 Done
  Поздравляю, три четверти курса позади.
Предлагаю немножко передохнуть.

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

Приложи к отчёту любую шахматную карикатуру.
Отчёт отправил: 18783. Andrew Выполнено за 21 мин. [Показать отчёт]
Научился: Курс заходит отлично. Это подтверждается тем, что появилось желание после окончания повозиться с ним еще - переписать что-то, дополнить, улучшить. Может быть, курс слегка излишне растянут, но тут в плюс то, что все ясно и понятно. 
Сложности: Пока не возникло сложностей 
30 Случайный шах 00:08:07
17 чел. ★ 5 Done
  На этом уроке мы реализуем функцию is_check(),
чтобы король не ходил на клетку, которая под боем.

На время теста вы уберём все пешки и добавим функцию is_check()
с генерируемой случайностью шаха для всех фигур на поле.
Отчёт отправил: 18783. Andrew Выполнено за 46 мин. [Показать отчёт]
Научился: Доработана функция can_move() Добавлена функция is_check() 
Сложности: Не все ходы доступны, так как после условно недоступного хода был бы условный шах королю ходившей стороны. Мой алгоритм функции  is_check() : условно допустить сделанный ход, найти координату короля ходившей стороны (она могла поменяться, но не обязательно), проверить. может ли фигура соперника (Q R B N) пойти на координату с твоим королем, ИЛИ проверить, может ли пешка соперника побить наискосок координату с твоим королем. Если оба вопроса ложь, то возвращаем ложь, шаха нет. Если же координата под боем, возвращаем истину, нашему королю шах.  
31 Возврат хода 00:12:52
1 тест
17 чел. ★ 5 Done
  На этом уроке мы опишем псевдокод для функции is_check().
Добавим две глобальных переменных: move_figure и to_figure.
Так же добавим функции: move_figure() и back_figure().
Модернизируем функции click_box_to() и promote_pawn()
для поддержки новой системы передвижения фигур по доске.
Отчёт отправил: 18783. Andrew Выполнено за 28 мин. [Показать отчёт]
Научился: Убрал random из функции is_check() Добавил функции move_figure() и back_figure() Модернизировал функции click_box_to() и promote_pawn() 
Сложности: Не было сложного 
32 Король в розыске 00:10:18
1 тест
17 чел. ★ 5 Done
  На этом уроке мы добавим в функцию is_check() вызов move_figure() и back_figure().
Реализуем вспомогательную функцию find_figure() и поэкспериментируем.
Отчёт отправил: 18783. Andrew Выполнено за 45 мин. [Показать отчёт]
Научился: Добавил вызов move_figure() и back_figure() в функцию is_check(). Реализовал функцию find_figure(). Протестировать - пока невозможно - но хотя бы ничего не сломалось. Нестандартные ситуации необходимо стандартизировать. 
Сложности: Не было сложного 
33 Служба безопасности короля 00:12:58
1 тест
17 чел. ★ 5 Done
  На этом уроке мы продолжим дорабатывать функцию is_check().
Переберём все ходы противника, чтобы исключить
из возможных ходов короля клетки, которые под боем.
Отчёт отправил: 18783. Andrew Выполнено за 1 час. 35 мин. [Показать отчёт]
Научился: Доработал функцию is_check() 
Сложности: Алгоритм функции is_check() достаточно сложен, по моему мнению. Беспокоят рокировки, насколько сильно он должен будет измениться при их реализации.  
34 Шах вперёд - шаг назад 00:14:09
1 тест
16 чел. ★ 5 Done
  На этом уроке мы выделим часть кода из функции is_check()
в новую функцию: is_check_after_move(), которая
будет вызываться для проверки возможности хода.
Сама же функция is_check() останется независимой
и может вызываться тогда, когда нам будет нужно.
Отчёт отправил: 18783. Andrew Выполнено за 51 мин. [Показать отчёт]
Научился: Модифицировал функцию is_check(). Реализовал функцию is_check_after_move(). 
Сложности: Невозможность срубить на проходе при шахе вызвана, вероятно, цветозависимостью функции is_pawn_passant. Надо подойти ответственнее  к смене цветов в функции is_check_after_move() или попытаться проверить шах в функции is_pawn_passant 
35 Информационная панель 00:13:07
1 тест
16 чел. ★ 5 Done
  На этом уроке мы выведем информацию о текущем состоянии игры.
Для этого мы реализуем функцию show_info(),
которая будет вызываться при каждой генерации доски.

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

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

Оптимизируем определение очерёдности хода.
Отчёт отправил: 18783. Andrew Выполнено за 1 час. 32 мин. [Показать отчёт]
Научился: Реализовал функцию show_info(). Реализовал функции is_checkmate() и is_stalemate(). Доработал функцию mark_moves_from(). Оптимизировал определение очерёдности хода. 
Сложности: Упустил, защита от шаха пешки путем взятия её же на проходе остается пока не реализованной? 
36 Подвиг безымянной пешки 00:15:36
1 тест
16 чел. ★ 5 Done
  На этом уроке мы добавим проверку на
пешечный подвиг по спасению короля:
может ли она взять на проходе вражескую
пешку, которая угрожает королю шахом.

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

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

Отчёт отправил: 18783. Andrew Выполнено за 51 мин. [Показать отчёт]
Научился: Реализовал функцию move_pawn_attack(). Реализовал функцию back_pawn_attack(). Модифицировал функциии check_pawn_attack(), move_figure() и back_figure(). Посмотрел мультфильм. Не превращается пешка в короля. 
Сложности: Вот теперь всё в порядке. 
37 ФИНИШНАЯ ПРЯМАЯ без видео
1 тест
16 чел. ★ 5 Done
  Быстро сказка сказывается, не быстро дело делается.
Наша программа практически завершена,
осталось самую малость - научить короля прятаться за ладьёй,
это таинство называется "рокировка".

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



Отчёт отправил: 18783. Andrew Выполнено за 29 мин. [Показать отчёт]
Научился: Настроился на финишную прямую. 
Сложности: Алгоритм возможна ли рокировка() 1. Король уже ходил? (в т.ч. рокировался)  да - false 2. Ладья с рокируемой стороны уже ходила?да - false 3. Под боем ли какая-либо из трех клеток (та, где стоит король, та, по которой он пройдет и та, куда он попадет) ? да -  false 4. Заняты ли кем-либо клетки куда должны попасть король с ладьей (в случае длинной рокировки также поля b1 для белых или b8 для черных)? да -  false 5. true 
38 Правила рокировки 00:09:54
1 тест
16 чел. ★ 5 Done
  На этом уроке мы обсудим правила рокировки короля.
Так же обсудим необходимы действия для её совершения.
Найти интересную картинку на тему рокировки.

Отчёт отправил: 18783. Andrew Выполнено за 17 час. 26 мин. [Показать отчёт]
Научился: Псевдоалгоритм составил на прошлом уроке. Блок-схему прилагаю. 
Сложности: Всё просто. 
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().
Отчёт отправил: 18783. Andrew Выполнено за 2 час. 29 мин. [Показать отчёт]
Научился: Добавил четыре флага - can_white/black_castle_left/right Реализовал функцию update_castle_flags(). Модифицировал функцию click_box_to(). 
Сложности: Ничего сложного 
40 Король всемогущий 00:12:13
1 тест
16 чел. ★ 5 Done
  На этом уроке мы добавим проверку для короля,
может ли он сделать рокировку - can_castle().

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

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

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

Напиши, что ещё можно добавить в эту программу.
Отчёт отправил: 18783. Andrew Выполнено за 8 дней 7 час. 24 мин. [Показать отчёт]
Научился: Курс просто супер. Не ожидал, что мне он так легко дастся. Есть желание его оптимизировать, добавить нотацию и запись партии, дописать оставшиеся правила (троекратное повторение, правило 50 ходов, 75 ходов). И вообще надо правила почитать, а то они меняются каждый год :) 
Сложности: Записать видео, придумать тему обзора. В итоге сплагиатил идею 
Видеообзор: _9Sozp8wpgk
46 VIP урок - Минное поле 00:11:37
14 чел. ★ 5 Done
  На этом уроке мы реализуем функцию mark_attack(),
чтобы отображать все битые поля на шахматной доске,
куда может атаковать противник сразу после вашего хода.
Доработаем функцию show_map() для отображения полей.
Отчёт отправил: 18783. Andrew Выполнено за 52 мин. [Показать отчёт]
Научился: Реализовал функцию mark_attack(). Доработал функцию show_map(). 
Сложности: Не возникло сложностей 
47 VIP урок - Бестолковый интеллект 00:10:38
13 чел. ★ 5 Done
  На этом уроке мы реализуем функцию doRandMove(),
для случайного выбор какой фигурой пойти,
Так же столкнём два "рандомайзера" на шахматной доске.


Отчёт отправил: 18783. Andrew Выполнено за 12 час. 26 мин. [Показать отчёт]
Научился: Реализовал функцию doRandMove(). Столкнул ботов между собой. Назвал функцию в едином стиле с другими функциями: do_rand_move (). Сделал, чтобы компьютер сам ходил за чёрных.  
Сложности: Написать функцию для оценки позиции и сделать выбор лучшего хода - это, конечно, для топ-кодеров задание. Вот бы курс такой запилили... Из имеющегося функционала, думаю, доступно одно - если есть мат в один ход, ИИ должен его ставить. 
Видеообзор: 1ngKe-5dCpA
  Итого:   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 ходов). И вообще надо правила почитать, а то они меняются каждый год :)
Трудности: Записать видео, придумать тему обзора. В итоге сплагиатил идею