modified: package-lock.json modified: package.json modified: pages/_app.tsx modified: pages/_document.tsx modified: pages/index.tsx modified: pages/posts/[slug].tsx new file: posts/arcade-python-1.mdx new file: posts/arcade-python-2.mdx modified: posts/robot-lego-ev3-short-track.mdx new file: posts/robot-vex-iq-short-track.mdx modified: posts/robot-vex-iq-small.mdx new file: public/blog/dev/phyton/arcade/01.png new file: public/blog/dev/phyton/arcade/02.png renamed: public/blog/robot_builds/short_track/lego_ev3_short_track.ev3 -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track.ev3 renamed: public/blog/robot_builds/short_track/lego_ev3_short_track.jpg -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track.jpg renamed: public/blog/robot_builds/short_track/lego_ev3_short_track.lmsp -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track.lmsp renamed: public/blog/robot_builds/short_track/lego_ev3_short_track.pdf -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track.pdf renamed: public/blog/robot_builds/short_track/lego_ev3_short_track_class_rom.jpg -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track_class_rom.jpg renamed: public/blog/robot_builds/short_track/lego_ev3_short_track_lab.jpg -> public/blog/robot_builds/short_track_lego/lego_ev3_short_track_lab.jpg renamed: public/blog/robot_builds/short_track/progLab_ult.jpg -> public/blog/robot_builds/short_track_lego/progLab_ult.jpg renamed: public/blog/robot_builds/short_track/short_ult.ev3 -> public/blog/robot_builds/short_track_lego/short_ult.ev3 new file: public/blog/robot_builds/short_track_vex_iq/linePD.iqblocks new file: public/blog/robot_builds/short_track_vex_iq/main.jpg new file: public/blog/robot_builds/short_track_vex_iq/prog.jpg new file: public/blog/robot_builds/short_track_vex_iq/vex_iq_short.pdf new file: styles/atom-one-dark.min.css modified: styles/globals.css new file: styles/prism-onedark.css modified: yarn.lockmaster
@ -0,0 +1,76 @@ |
||||
--- |
||||
title: Урок 1. 2D игра на Python с библиотекой Arcade |
||||
description: Создание смайлика |
||||
date: '2023-01-09' |
||||
--- |
||||
|
||||
# Урок 1. Простой рисунок |
||||
|
||||
### Установка |
||||
Для создания игры при помощи библиотеки Arcade необходимо установить её. Для установки выполните данную команду в терминале. |
||||
|
||||
```sh |
||||
pip install --user arcade |
||||
``` |
||||
## Задание №1. Простой рисунок |
||||
Первое задание создать простой рисунок при помощи готовых функций в библиотеки ArCade. |
||||
|
||||
```python |
||||
import arcade |
||||
|
||||
# Задать константы для размеров экрана |
||||
SCREEN_WIDTH = 600 |
||||
SCREEN_HEIGHT = 600 |
||||
|
||||
# Открыть окно. Задать заголовок и размеры окна (ширина и высота) |
||||
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, "ArCade") |
||||
|
||||
# Задать белый цвет фона. |
||||
arcade.set_background_color(arcade.color.WHITE) |
||||
|
||||
# Начать процесс рендера. Это нужно сделать до команд рисования |
||||
arcade.start_render() |
||||
|
||||
# Нарисовать лицо |
||||
x = 300 |
||||
y = 300 |
||||
radius = 200 |
||||
arcade.draw_circle_filled(x, y, radius, arcade.color.YELLOW) |
||||
|
||||
# Нарисовать правый глаз |
||||
x = 370 |
||||
y = 350 |
||||
radius = 20 |
||||
arcade.draw_circle_filled(x, y, radius, arcade.color.BLACK) |
||||
|
||||
# Нарисовать левый глаз |
||||
x = 230 |
||||
y = 350 |
||||
radius = 20 |
||||
arcade.draw_circle_filled(x, y, radius, arcade.color.BLACK) |
||||
|
||||
# Нарисовать улыбку |
||||
x = 300 |
||||
y = 280 |
||||
width = 120 |
||||
height = 100 |
||||
start_angle = 190 |
||||
end_angle = 350 |
||||
arcade.draw_arc_outline(x, y, width, height, arcade.color.BLACK, start_angle, end_angle, 10) |
||||
|
||||
# Завершить рисование и показать результат |
||||
arcade.finish_render() |
||||
|
||||
# Держать окно открытым до тех пор, пока пользователь не нажмет кнопку “закрыть” |
||||
arcade.run() |
||||
``` |
||||
<Image |
||||
alt={`Простой рисунок`} |
||||
src={`/blog/dev/phyton/arcade/01.png`} |
||||
width={602} |
||||
height={640} |
||||
priority |
||||
/> |
||||
|
||||
|
||||
На главную [Главная](/) |
@ -0,0 +1,66 @@ |
||||
--- |
||||
title: Урок 2. 2D игра на Python с библиотекой Arcade |
||||
description: Урок 2. Изучение функций и циклов |
||||
date: '2023-01-11' |
||||
--- |
||||
|
||||
# Урок 2. Изучение функций и циклов |
||||
|
||||
## Задания |
||||
+ Задание 1. Измените размер смайлика в 4 раза и уменьшите код программы. |
||||
+ Задание 2. Научится перемещать смайлик по экрану. |
||||
+ Задание 3. Сделать несколько смайликов не копируя строчки кода. |
||||
+ Задание 4. Разместить смайлики в 4 столбика на при максимальном количестве рядов |
||||
|
||||
```python |
||||
import arcade |
||||
|
||||
# Задать константы для размеров экрана |
||||
SCREEN_WIDTH = 600 |
||||
SCREEN_HEIGHT = 600 |
||||
|
||||
def face(x,y): |
||||
# Нарисовать лицо |
||||
arcade.draw_circle_filled(x, y, 50, arcade.color.YELLOW) |
||||
|
||||
# Нарисовать правый глаз |
||||
arcade.draw_circle_filled(x+20, y+20, 5, arcade.color.BLACK) |
||||
|
||||
#Нарисовать левый глаз |
||||
arcade.draw_circle_filled(x-20, y+20, 5, arcade.color.BLACK) |
||||
|
||||
# Нарисовать улыбку |
||||
arcade.draw_arc_outline(x, y-10, 50, 30, arcade.color.BLACK, 190, 350, 10) |
||||
|
||||
# Открыть окно. Задать заголовок и размеры окна (ширина и высота) |
||||
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, "ArCade") |
||||
|
||||
# Задать белый цвет фона. |
||||
arcade.set_background_color(arcade.color.WHITE) |
||||
|
||||
# Начать процесс рендера. Это нужно сделать до команд рисования |
||||
arcade.start_render() |
||||
|
||||
x = 80 |
||||
for n in range(0,2): |
||||
for i in range(0,2): |
||||
for j in range(0, 5): |
||||
face(x+i*105, 540-j*120) |
||||
x = 400 |
||||
|
||||
# Завершить рисование и показать результат |
||||
arcade.finish_render() |
||||
|
||||
# Держать окно открытым до тех пор, пока пользователь не нажмет кнопку “закрыть” |
||||
arcade.run() |
||||
``` |
||||
<Image |
||||
alt={`Простой рисунок`} |
||||
src={`/blog/dev/phyton/arcade/02.png`} |
||||
width={602} |
||||
height={640} |
||||
priority |
||||
/> |
||||
|
||||
|
||||
На главную [Главная](/) |
@ -0,0 +1,42 @@ |
||||
--- |
||||
title: Робот на VEX IQ для соревнований Шорт-трект |
||||
description: Данный робот создавался как демонстрационный для выполнения задания |
||||
date: '2023-01-10' |
||||
--- |
||||
|
||||
## Робот на VEX IQ для соревнований Шорт-трект |
||||
|
||||
<Image |
||||
alt={`Робот на VEX IQ для соревнований Шорт-трект`} |
||||
src={`/blog/robot_builds/short_track_vex_iq/main.jpg`} |
||||
width={3532} |
||||
height={2665} |
||||
priority |
||||
/> |
||||
* [Скачать инструкцию в формате pdf](/blog/robot_builds/short_track_vex_iq/vex_iq_short.pdf) |
||||
|
||||
### Подключение датчиков и электромоторов |
||||
+ Левый датчик света подключается в порт 3 |
||||
+ Правый датчик света подключается в порт 4 |
||||
+ Датчик ультразвука подключается в порт 5 |
||||
+ Левый электромотор подключается в порт 7 |
||||
+ Правый электромотор подключается в порт 12 |
||||
|
||||
### Программа для робота |
||||
|
||||
> В программе используется ПД регулятор для движения робота по черной линии. |
||||
Основная настройка программы идет в качестве подбора коэффициентов которые в программе обозначены именами **k** - основная переменная для реагирования робота на изменение черной линии, переменная **d** это дифференциальная составляющая отвечает за проверку выравнивание робота на черной линии. |
||||
Если робот слишком глубоко заехал на черную линию коэффициент **d** увеличит усиливающие значение для моторов и робот быстрее вернется на белую область. |
||||
|
||||
### Движение по черной линии с автоматической остановкой перед впереди едущим роботом |
||||
<Image |
||||
alt={`Программа на VEX IQ для соревнований Шорт-трект`} |
||||
src={`/blog/robot_builds/short_track_vex_iq/prog.jpg`} |
||||
width={1696} |
||||
height={920} |
||||
priority |
||||
/> |
||||
* [Скачать программу для робота среда VEX IQ Code](/blog/robot_builds/short_track_vex_iq/linePD.iqblocks) |
||||
|
||||
|
||||
На главную [Главная](/) |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 727 KiB After Width: | Height: | Size: 727 KiB |
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |
After Width: | Height: | Size: 669 KiB |
After Width: | Height: | Size: 224 KiB |
@ -0,0 +1 @@ |
||||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} |
@ -0,0 +1,172 @@ |
||||
/** |
||||
* prism.js default theme for JavaScript, CSS and HTML |
||||
* Based on dabblet (http://dabblet.com) |
||||
* @author Lea Verou |
||||
*/ |
||||
code[class*="language-"], |
||||
pre[class*="language-"] { |
||||
color: #ABB2BF; |
||||
background: none; |
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
||||
text-align: left; |
||||
white-space: pre; |
||||
word-spacing: normal; |
||||
word-break: normal; |
||||
word-wrap: normal; |
||||
line-height: 1.5; |
||||
-moz-tab-size: 4; |
||||
-o-tab-size: 4; |
||||
tab-size: 4; |
||||
-webkit-hyphens: none; |
||||
-moz-hyphens: none; |
||||
-ms-hyphens: none; |
||||
hyphens: none; |
||||
} |
||||
|
||||
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, |
||||
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { |
||||
text-shadow: none; |
||||
background: #383e49; |
||||
} |
||||
|
||||
pre[class*="language-"]::selection, pre[class*="language-"] ::selection, |
||||
code[class*="language-"]::selection, code[class*="language-"] ::selection { |
||||
text-shadow: none; |
||||
background: #9aa2b1; |
||||
} |
||||
|
||||
@media print { |
||||
code[class*="language-"], |
||||
pre[class*="language-"] { |
||||
text-shadow: none; |
||||
} |
||||
} |
||||
/* Code blocks */ |
||||
pre[class*="language-"] { |
||||
padding: 1em; |
||||
margin: .5em 0; |
||||
overflow: auto; |
||||
} |
||||
|
||||
:not(pre) > code[class*="language-"], |
||||
pre[class*="language-"] { |
||||
background: #282c34; |
||||
} |
||||
|
||||
/* Inline code */ |
||||
:not(pre) > code[class*="language-"] { |
||||
padding: .1em; |
||||
border-radius: .3em; |
||||
white-space: normal; |
||||
} |
||||
|
||||
.token.comment, |
||||
.token.prolog, |
||||
.token.doctype, |
||||
.token.cdata { |
||||
color: #5C6370; |
||||
} |
||||
|
||||
.token.punctuation { |
||||
color: #abb2bf; |
||||
} |
||||
|
||||
.token.selector, |
||||
.token.tag { |
||||
color: #e06c75; |
||||
} |
||||
|
||||
.token.property, |
||||
.token.boolean, |
||||
.token.number, |
||||
.token.constant, |
||||
.token.symbol, |
||||
.token.attr-name, |
||||
.token.deleted { |
||||
color: #d19a66; |
||||
} |
||||
|
||||
.token.string, |
||||
.token.char, |
||||
.token.attr-value, |
||||
.token.builtin, |
||||
.token.inserted { |
||||
color: #98c379; |
||||
} |
||||
|
||||
.token.operator, |
||||
.token.entity, |
||||
.token.url, |
||||
.language-css .token.string, |
||||
.style .token.string { |
||||
color: #56b6c2; |
||||
} |
||||
|
||||
.token.atrule, |
||||
.token.keyword { |
||||
color: #c678dd; |
||||
} |
||||
|
||||
.token.function { |
||||
color: #61afef; |
||||
} |
||||
|
||||
.token.regex, |
||||
.token.important, |
||||
.token.variable { |
||||
color: #c678dd; |
||||
} |
||||
|
||||
.token.important, |
||||
.token.bold { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.token.italic { |
||||
font-style: italic; |
||||
} |
||||
|
||||
.token.entity { |
||||
cursor: help; |
||||
} |
||||
|
||||
pre.line-numbers { |
||||
position: relative; |
||||
padding-left: 3.8em; |
||||
counter-reset: linenumber; |
||||
} |
||||
|
||||
pre.line-numbers > code { |
||||
position: relative; |
||||
} |
||||
|
||||
.line-numbers .line-numbers-rows { |
||||
position: absolute; |
||||
pointer-events: none; |
||||
top: 0; |
||||
font-size: 100%; |
||||
left: -3.8em; |
||||
width: 3em; /* works for line-numbers below 1000 lines */ |
||||
letter-spacing: -1px; |
||||
border-right: 0; |
||||
|
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
|
||||
} |
||||
|
||||
.line-numbers-rows > span { |
||||
pointer-events: none; |
||||
display: block; |
||||
counter-increment: linenumber; |
||||
} |
||||
|
||||
.line-numbers-rows > span:before { |
||||
content: counter(linenumber); |
||||
color: #5C6370; |
||||
display: block; |
||||
padding-right: 0.8em; |
||||
text-align: right; |
||||
} |