background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course"

input logo icon
Теги видео
|

Теги видео

javascript
javascript mastery
js mastery
master javascript
decentralized applications
ethereum code
smart contracts
web3
web3 explained
web3 tutorial
web3 development
web based game development
web game development
browser game development
web 3.0
web 3
web 3.0 explained
web3 game development
web 3 nft
web 3 nft tutorial
nft card game
nft board game
nft development tutorial
avalanche
avalanche blockchain
reactjs
reactjs game
react js game
js game
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
Веб 3.0 может изменить
00:00:04
Интернет, каким мы его знаем, навсегда, ты
00:00:07
еще рано уловить тенденцию
00:00:09
сейчас и создаем свой первый блокчейн
00:00:12
приложение привет и добро пожаловать в
00:00:15
видео проекта, где вы будете строить и
00:00:17
развернуть онлайн
00:00:19
многопользовательская карточная игра Web 3 NFD
00:00:24
от Avalanche создайте своих персонажей
00:00:27
создавайте и присоединяйтесь к живым боям, выбирайте свой
00:00:31
Поле боя и сражайтесь с другими игроками
00:00:35
в реальном времени с потрясающим дизайном
00:00:38
интерактивный игровой процесс, умный кошелек
00:00:41
сочетание живого взаимодействия с умными
00:00:43
контракты и, самое главное,
00:00:46
возможность сражаться с другими игроками в реальном времени
00:00:49
time avax Gods — лучший и единственный
00:00:52
многопользовательская карточная онлайн-игра web 3, которая
00:00:56
в настоящее время вы можете найти на YouTube вас
00:00:59
может быть интересно, почему какие
00:01:01
предпосылки для создания такого
00:01:02
фантастическая игра, которую нужно знать
00:01:04
JavaScript и чувствовать себя комфортно с
00:01:06
отреагируйте, если это ваш первый раз
00:01:08
Learning Web 3 Предлагаю вам посмотреть
00:01:11
создать и развернуть современную веб3
00:01:13
сначала видео о блокчейн-приложении, а потом приходите
00:01:16
назад, чтобы посмотреть, как этот строит это
00:01:18
феноменальная игра даст вам должное
00:01:20
понимание того, как создавать регулярные
00:01:23
веб-игры, но это также даст
00:01:25
вы подробно рассказываете о мире
00:01:28
web3 как взаимодействовать со смартом
00:01:30
пара контрактов со смарт-кошельками и
00:01:33
слушать события смарт-контракта, которые мы
00:01:36
собираюсь начать с простого, а затем перейти к
00:01:38
более сложные темы, я объясню каждую
00:01:41
шаг на пути к созданию этого
00:01:43
приложение, вы также узнаете, как
00:01:46
подключить обычное приложение act.js
00:01:48
к блокчейну и выполнить сопряжение с вашим
00:01:51
кошельке, вы также узнаете о
00:01:53
язык программирования Solidity и как
00:01:55
смарт-контракты, написанные на Solidity, работают
00:01:58
вы научитесь создавать умные
00:02:00
контракты и децентрализованные приложения
00:02:02
на платформе Avalanche Avalanche
00:02:05
самая быстрая платформа смарт-контрактов
00:02:08
там это позволяет вам быстро строить
00:02:11
недорогие приложения, совместимые с Solidity, сверху
00:02:14
из этого с подсетями Avalanche позволяет
00:02:17
вы можете построить свою собственную сеть
00:02:19
оптимизирован для соответствия всем вашим проектам
00:02:22
потребности
00:02:23
подсети дадут полноценные игры Web3
00:02:26
контроль над своими собственными настраиваемыми
00:02:28
сети блокчейн без жертвования
00:02:31
безопасность или децентрализация, которая позволяет
00:02:35
вы можете быстро масштабировать свою пользовательскую базу
00:02:38
настраиваемые правила для вашего блокчейна
00:02:39
и сосредоточиться на игровом процессе, по существу, с
00:02:43
лавины, вы научитесь
00:02:45
создать полноценный веб 3.0 онлайн
00:02:49
многопользовательскую игру и изучите все тонкости и
00:02:51
основы блокчейна в одном видео
00:02:54
помимо скорости и дешевизны
00:02:57
использую Avalanche, то, что мне нравится
00:03:00
это скорее всего наоборот
00:03:02
совместимость с существующим Ethereum
00:03:04
инструменты и рабочие процессы виртуальных машин позволяют
00:03:07
я объясню, предположим, у тебя есть опыт
00:03:10
создание веб-3D-приложений для любого Ethereum
00:03:13
виртуальную машину или используйте такие инструменты, как
00:03:15
метамаска Remix трюфельная каска web3js
00:03:19
ethers JS или откройте Zeppelin and More в
00:03:23
в таком случае точно такие же скрипты
00:03:26
и рабочие процессы будут работать в Avalanche
00:03:29
без каких-либо изменений, это не так уж и здорово
00:03:33
мы будем использовать наиболее востребованные
00:03:35
Технологии сегодня, и я научу вас
00:03:37
как развернуть свою игру в Интернете, чтобы вы
00:03:40
можешь поиграть с друзьями, поделись
00:03:42
с вашими потенциальными работодателями и расскажите об этом
00:03:44
в вашем портфолио, если это видео достигнет
00:03:46
20 000 лайков записываю очередной веб 3
00:03:50
видео
00:03:51
то, что я только что показал, может показаться тебе
00:03:53
просто, но поверьте мне, их много
00:03:56
происходит логика блокчейна и web3
00:03:59
за кулисами, и я твердо верю
00:04:01
что создание этого приложения — лучший способ
00:04:04
чтобы по-настоящему понять, как работают Web3 и Smart
00:04:07
с учетом сказанного контракты работают отлично
00:04:10
есть еще один важный
00:04:12
объявление, которым я хочу поделиться с вами
00:04:14
прежде чем мы углубимся в проект
00:04:16
так как это веб 3 тяжелый
00:04:18
видео на основе проекта, которое я также подготовил
00:04:21
для вас двоих совершенно бесплатно в Интернете 3
00:04:24
resources one — это комплексный веб3
00:04:27
дорожная карта, а другая – это солидность
00:04:30
шпаргалка, ссылка для скачивания
00:04:32
ресурсы совершенно бесплатно находятся в
00:04:34
описание помимо этого у меня также есть
00:04:37
создал курс Web 3.0, в котором вы будете
00:04:40
построить полностью функциональный nft
00:04:43
Торговая площадка этого 10-часового курса погружений
00:04:47
во все, что вам нужно знать о
00:04:48
Solidity Web3 и смарт-контракты также
00:04:52
так как ты смотришь это видео от
00:04:54
используя ссылку в описании, вы
00:04:56
я получу специальный код скидки, который
00:04:58
будет автоматически подано заявление на
00:05:00
вы во время оформления заказа это новаторское
00:05:03
проект поразит ваш потенциал
00:05:04
работодатели делают
00:05:06
jsmastery.pro единственный источник
00:05:09
знания, необходимые для достижения вашей мечты
00:05:11
оплачиваемая работа в web3, от которой вы можете получать удовольствие
00:05:14
через много лет после этого сказано, давайте
00:05:17
Погрузитесь прямо в сегодняшнее видео
00:05:20
[Музыка]
00:05:28
для начала мы собираемся создать
00:05:31
пустая новая папка на рабочем столе, давайте
00:05:34
назовите это nft подчеркивание карты подчеркивание
00:05:37
игра, я также открыл пустую визуальную
00:05:40
Окно кода студии, поэтому просто перетащите его и
00:05:43
скиньте эту папку
00:05:45
как только ты это сделаешь, у нас будет
00:05:48
папка открыта в самом популярном коде
00:05:50
редактор там
00:05:51
так что теперь мы можем пойти в
00:05:54
просмотреть, а затем терминал, это будет
00:05:57
откройте встроенный интегрированный код vs
00:06:00
терминал, мы также можем нажать прямо здесь, чтобы
00:06:03
открываем Проводник и мы готовы
00:06:05
приступим к настройке структуры нашего проекта
00:06:07
мы собираемся начать это видео с
00:06:10
с точки зрения блокчейна Web 3
00:06:12
Итак, чтобы начать, давайте щелкнем правой кнопкой мыши
00:06:15
прямо здесь и создайте новую папку
00:06:18
называется web3 теперь внутри нашего терминала
00:06:22
мы можем записать компакт-диск или изменить каталог на web3
00:06:26
теперь, чтобы правильно инициализировать наш
00:06:28
блокчейн-сторона того, что мы собираемся сделать
00:06:30
надо сделать пару шагов и бежать
00:06:32
пара команд, но не волнуйся, я
00:06:35
покажу тебе, как делать все шаг
00:06:37
шаг за шагом, чтобы сделать все еще проще для
00:06:40
ты, я создал целый GitHub
00:06:42
репозиторий с финальным кодом, пока
00:06:45
ты здесь, не стесняйся, поставь звезду
00:06:48
здесь вы можете прокрутить вниз и вы можете
00:06:51
посмотреть все инструкции по настройке
00:06:53
написана часть web3 их проектов
00:06:55
шаг за шагом, но не волнуйся, мы идем
00:06:58
пройти через все вместе и
00:07:00
Я покажу тебе, как пройти
00:07:02
каждый из этих шагов, чтобы
00:07:04
убедитесь, что вы можете хорошо следовать
00:07:06
еще одна замечательная вещь, которую мы недавно сделали
00:07:08
на канале GSM YouTube создан
00:07:12
специальное сообщество Discord в этом Discord
00:07:14
Сообщество огромно, и мы уже на
00:07:18
более 14 000 участников, но это не то
00:07:22
Я хочу поделиться с тобой тем, чего я хочу
00:07:24
хочу поделиться с вами этим особенным видео
00:07:27
раздел помощи здесь, у нас будет
00:07:30
специальная доска форума для каждого
00:07:32
одно из наших видео, так что если вы
00:07:34
возникли проблемы с настройкой
00:07:36
лучший способ получить помощь – это не
00:07:39
быть через комментарии на YouTube, а это
00:07:41
Будет, создав новую справочную публикацию в
00:07:44
это специальное видео-помощь на канале здесь
00:07:47
я другие администраторы и прочее
00:07:49
люди смогут вам помочь
00:07:52
с учетом сказанного, начнем с
00:07:54
инициализация нашей веб-стороны 3
00:07:56
как только мы окажемся в каталоге web3, мы сможем
00:08:00
запустите команду каски MPX
00:08:03
вам может быть предложено установить жесткий
00:08:05
в этом случае просто нажмите Y и
00:08:08
нажмите Enter, как только вы это сделаете, мы сможем
00:08:11
выбери машинописный текст, но не беспокойся, нет
00:08:13
знание машинописного текста обязательно
00:08:15
для получения корня проекта в каске просто нажмите
00:08:18
входить
00:08:19
и нажмите Enter еще раз
00:08:23
вот и все, это только что инициализировало
00:08:25
проект внутри нашего каталога web3
00:08:28
если прокрутить немного вверх, то можно это увидеть
00:08:30
нам нужно установить некоторые зависимости для
00:08:32
запустим пример проекта, так что давайте просто
00:08:34
скопируйте это сообщение прямо сюда
00:08:36
вставьте его и нажмите Enter, это
00:08:39
собираюсь установить парочку Dev
00:08:40
зависимости
00:08:42
это займет всего минуту и
00:08:44
Я скоро вернусь вместе с этими Девами.
00:08:47
зависимости, нам также понадобится
00:08:49
пара обычных зависимостей, так что давайте
00:08:51
запустить npm install добавить открыть Zeppelin
00:08:56
контракты с косой чертой
00:08:59
dot EnV в nomic Labs сильно ударьте вперед
00:09:04
шапка Dash эфиров и можно нажимать Enter
00:09:07
эти зависимости действительно установлены
00:09:09
быстро, если вы хотите быть уверены, что получите
00:09:11
нужные, вы можете просто скопировать это
00:09:13
команда отсюда также
00:09:15
вот и мы можем очистить терминал
00:09:18
теперь мы установили все важное
00:09:20
зависимости, которые мы собираемся использовать для Интернета
00:09:22
3 стороны вещей, следующее, что у нас есть
00:09:25
нужно установить браузерный кошелек
00:09:28
расширение
00:09:30
это позволит нам взаимодействовать
00:09:32
с блокчейном через наш браузер
00:09:33
наше приложение будет написано на
00:09:36
прочность
00:09:37
но мы будем использовать Avalanche для создания
00:09:40
приложение быстрее и с меньшими затратами, поэтому
00:09:44
это позволит нам запустить их
00:09:46
Эфириум работает еще быстрее с
00:09:49
транзакции происходят мгновенно, потому что
00:09:51
из этого мы будем использовать лавину
00:09:54
специальное ядро ​​кошелька ядро ​​— это метамаска
00:09:58
альтернатива децентрализованным приложениям Avalanche
00:10:01
приложение, которое вы создадите сегодня, будет
00:10:03
отлично работает с кошельком метамаски
00:10:05
но поскольку мы строим на основе
00:10:08
ядро лавины будет намного больше
00:10:11
быстрее, и поскольку мы создаем игру
00:10:13
нам нужно быть максимально интерактивными
00:10:17
поэтому я решил использовать ядро
00:10:20
кошелек, чтобы получить основной кошелек на
00:10:22
Браузер Chrome, в который можно просто зайти
00:10:24
Интернет-магазин Chrome, а затем найдите
00:10:27
основной
00:10:28
если вы используете другой браузер, который
00:10:30
пока не поддерживает ядро, я бы предложил
00:10:32
перехожу на Chrome хотя бы на время
00:10:34
целей этого видео, потому что Chrome
00:10:36
также позволяет нам иметь несколько учетных записей
00:10:38
который нам придется использовать для проверки
00:10:41
функциональность многопользовательской онлайн-игры, поэтому
00:10:43
это может быть хороший шанс переключиться на
00:10:45
Chrome, если нет, если вы действительно этого хотите
00:10:48
в таком случае используйте другой браузер
00:10:49
тебе придется использовать метамаску, так что оставайся в курсе
00:10:52
Имейте в виду, что транзакций будет немного
00:10:54
медленнее, чем на ядре
00:10:56
с учетом сказанного я полностью удалил
00:10:59
core из моего браузера, чтобы я мог помочь вам
00:11:01
шаг за шагом о том, как его установить так
00:11:04
давайте нажмем «Добавить в Chrome»
00:11:06
это автоматически откроется
00:11:08
окно, и вы можете нажать «Создать новый»
00:11:11
кошелек
00:11:13
вы можете нажать «Я согласен»
00:11:15
здесь вы можете ввести имя своего кошелька
00:11:17
Я собираюсь сделать что-то вроде JS Mastery
00:11:19
ты можешь выбрать свой пароль, я собираюсь
00:11:22
выберите что-нибудь действительно простое
00:11:24
и вы можете согласиться и признать и
00:11:27
нажмите «Сохранить»
00:11:28
теперь здесь ты получишь свое
00:11:30
секретная фраза восстановления это самая
00:11:33
священный пароль, когда он придет
00:11:36
для блокчейн-кошельков, конечно, на моем
00:11:38
реальных средств не будет, поэтому я смогу
00:11:40
покажи это тебе, но оставь это при себе
00:11:42
ты сам запиши это где-нибудь, потому что
00:11:45
нам это понадобится для инициализации нашего
00:11:47
кошелек, я скопирую его
00:11:49
сохраните его где-нибудь, нажмите «Понять» и
00:11:53
Нажмите "Далее
00:11:54
теперь я вставлю сюда в URL то, что я
00:11:57
скопировано, чтобы мы могли видеть слова и
00:12:00
просит нас проверить это секретное восстановление
00:12:02
фраза, поэтому давайте выберем слово, которое
00:12:05
идет за мулом, давай найдем его, это
00:12:07
будет слово SEC, которое будет следовать после
00:12:10
ядерная энергия будет изображением и
00:12:13
слово, которое идет после поверхностного
00:12:16
это будет безопасно, и давайте нажмем
00:12:19
следующий
00:12:21
Итак, наш кошелек здесь, и давайте
00:12:24
просто нажмите вкладку «Расширения» и давайте
00:12:27
поверните его для облегчения доступа
00:12:29
вот и наш кошелек, вот и мы
00:12:33
собираюсь установить его в качестве кошелька по умолчанию, как
00:12:35
ну, отлично, теперь то, что нам нужно сделать, как
00:12:38
ну открыто расширение
00:12:41
нажмите на настройки прямо здесь,
00:12:43
нажав на гамбургер-меню
00:12:44
перейдите в раздел «Дополнительно» и затем включите тест
00:12:48
сетевой режим, это позволит нам
00:12:50
взаимодействовать с тестовыми сетями
00:12:53
отлично, теперь нам нужно пополнить наш кошелек
00:12:56
из крана Avax сделать это вы можете
00:12:59
нажмите ссылку внизу в описании
00:13:00
это приведет вас к
00:13:03
faucet.avax.network вы можете выбрать
00:13:06
сеть Fuji C Chain Avax — это токен
00:13:09
и вы можете нажать «Подключиться»
00:13:11
это немедленно подскажет вам
00:13:12
кошелек, и вы можете нажать «Одобрить» и
00:13:15
просто нажмите запрос на Avax и поехали
00:13:18
транзакция прошла успешно и всего за
00:13:21
пару секунд, если ты откроешь свой
00:13:23
кошелек снова, вы должны увидеть
00:13:25
два авакса прямо здесь, это так здорово, что
00:13:29
мы получили жетоны очень быстро, когда вы
00:13:31
установите ядро, скорее всего, так и будет
00:13:34
дать вам много сообщений, чтобы у вас было
00:13:36
чтобы щелкнуть этот значок прямо здесь, перейдите к
00:13:39
настройки консоли, а затем щелкните выбранное
00:13:42
контекст только потому, что таким образом вы можете
00:13:45
отфильтровать все связанные с эфирами
00:13:47
Сообщения
00:13:48
теперь мы можем вернуться в нашу Visual Studio
00:13:50
код, и мы сможем создать новый DOT EnV
00:13:54
файл внутри папки web3, так что это
00:13:57
снова будет точка EnV, убедитесь, что
00:14:01
он находится внутри папки web3, как мы
00:14:03
у меня будет еще одна EnV для клиента
00:14:05
там создайте личное подчеркивание
00:14:09
ключевая переменная, и сейчас мы собираемся
00:14:12
оставь это пустым, теперь здесь у нас будет
00:14:14
поместить закрытый ключ нашего кошелька так
00:14:17
вот как заставить его открыть ядро
00:14:19
расширение
00:14:20
нажмите на гамбургер-меню в левом верхнем углу
00:14:23
перейти в безопасность и конфиденциальность
00:14:26
нажмите показать фразу восстановления
00:14:29
а затем введите свой пароль
00:14:32
как только ты это сделаешь, он тебе покажет
00:14:34
еще раз твоя фраза восстановления, сохрани ее
00:14:37
вам нужно скопировать его, а затем
00:14:40
ты можешь отправиться в
00:14:42
Wallet.avax.network еще раз ссылка
00:14:44
будет внизу в описании
00:14:46
нажмите доступ к кошельку
00:14:49
выберите мнемоническую ключевую фразу
00:14:52
и вставьте свою фразу прямо сюда
00:14:54
вы сразу же войдете в свой
00:14:57
кошелек и здесь, если он не выбран
00:14:59
уже
00:15:00
выберите тестовую сеть Fuji в качестве
00:15:03
подключен к нему, теперь перейдите к управлению ключами на
00:15:07
левую боковую панель и нажмите «Вид C».
00:15:10
цепочка секретных ключей
00:15:13
окончательно
00:15:14
скопируйте его, теперь мы можем вернуться к коду vs
00:15:17
и вы можете вставить его прямо сюда, равный
00:15:20
ваш личный ключ
00:15:21
отлично, теперь у нас есть средства и мы
00:15:25
подключен к нашему кошельку, мы можем закрыть
00:15:27
это откройте папку и перейдите в
00:15:32
hardhat.config.ts здесь у нас есть
00:15:34
базовая конфигурация, что вы можете сделать
00:15:37
прямо сейчас переходим к описанию
00:15:39
это видео и найти суть GitHub, которую я
00:15:41
предоставлено только для тебя, там ты будешь
00:15:44
возможность найти новое и обновленное
00:15:46
hardhat.config точка DS, и вы можете просто
00:15:50
вставьте сюда эту конфигурацию каски
00:15:53
содержит немного больше настроек, которые нужно сделать
00:15:56
убедитесь, что наше приложение правильно развернуто на
00:15:58
Тестовая сеть Fuji, кроме того, я
00:16:01
также включил несколько комментариев прямо здесь
00:16:03
объясняя, как развернуть этот контракт
00:16:06
позже в вашей собственной подсети изначально
00:16:10
децентрализованное приложение, которым вы являетесь
00:16:12
собираюсь строить в этом видео будет
00:16:14
развернут в цепочке C нашего основного
00:16:16
подсеть в нашей тестовой сети под названием Fuji, и мы
00:16:20
со временем я смогу увидеть это прямо здесь, поскольку
00:16:23
ваше приложение растет, вам, вероятно, захочется
00:16:25
переместите его в свою подсеть
00:16:28
если вы хотите узнать больше о подсетях
00:16:30
зачем вам вообще нужно развертывать
00:16:32
подсети или как бы вы развернули
00:16:35
подсеть, то вы найдете это
00:16:37
ссылки невероятно полезные по сути
00:16:41
Тестовая сеть 4G C отлично подходит для
00:16:43
в разработке, но при запуске вашего приложения
00:16:46
растешь и начинаешь много ездить
00:16:48
транзакции и комиссии за газ, тогда это может быть
00:16:51
было бы хорошей идеей мигрировать в подсеть
00:16:54
вместо первой ссылки у вас много
00:16:56
информации о том, когда вы можете захотеть
00:16:58
использовать подсеть вместо тестовой сети c Chain
00:17:01
и внутри второй ссылки у вас есть
00:17:04
Полная документация о том, как
00:17:06
сделать это самостоятельно, по сути
00:17:08
транзакции в цепочке C могут занять
00:17:11
от 2 до 10 секунд, те, что на
00:17:14
подсеть будет намного быстрее и на C
00:17:17
цепочка, в которой мы полагаемся на токен Avax
00:17:19
подтверждать транзакции, но в подсети
00:17:22
по сути, мы можем создать свой собственный токен
00:17:25
вы будете полностью контролировать
00:17:28
работа сети и ее внутреннее устройство, и я
00:17:31
также не включил структуру для добавления
00:17:34
подсеть прямо здесь, на случай, если вы захотите сделать
00:17:36
это позже само по себе отлично, это
00:17:39
это будет для нашей конфигурации каски
00:17:41
DS, теперь мы можем закрыть это и идти.
00:17:44
в сценарии и откройте файл Deploy.ts
00:17:47
сценарий внутри здесь вы можете увидеть некоторые
00:17:50
демо-код, который снова создала каска
00:17:53
внизу в описании там же
00:17:55
GitHub gist вы можете найти обновленную
00:17:58
скрипт Deploy.ts, и вы можете просто
00:18:01
вставьте сюда, это так же просто, как
00:18:04
создание нового контракта Фабричное право
00:18:06
здесь, а затем развертываем его после того, как сделаем
00:18:09
что единственное, что мы хотим получить, это
00:18:11
адрес развернутого смарта
00:18:13
контракт, который является единственным, что
00:18:16
этот сценарий развертывания отлично работает и
00:18:19
доработать нашу сторону веб3
00:18:21
конечно, самая важная часть
00:18:23
отсутствует, и это контракты и
00:18:27
конечно, наш смарт-контракт, который мы собираемся
00:18:29
удалите этот журнал, эта Душа, так как это
00:18:32
демонстрационный смарт-контракт, и мы собираемся
00:18:34
создайте нашу собственную под названием Avax Gods dot Sol
00:18:39
смарт-контракт, созданный для этого
00:18:42
приложение имеет около 500 строк, и я
00:18:47
не хочу, чтобы вы просто копировали и вставляли
00:18:49
что я набираю 500 строк и так еще раз
00:18:52
в той же сути GitHub в
00:18:54
описание внизу будет
00:18:56
будь полным аваксом
00:18:58
Смарт-контракт gods.soul
00:19:00
как видите, это длинный контракт и
00:19:04
там много кода, но не волнуйтесь
00:19:07
мы собираемся пройти через все
00:19:08
вместе, и я собираюсь объяснить все
00:19:11
самые важные функции, которые я использовал
00:19:14
долго об этом думаю, что
00:19:16
Я хочу, чтобы вы просто скопировали все
00:19:18
персонаж, которого я пишу за эти 500
00:19:20
линии или я бы хотел связать это с
00:19:24
переднюю часть, а затем вернуться и
00:19:27
местами ссылаться на смарт-контракт
00:19:29
где это имеет смысл, чтобы мы могли
00:19:32
вернитесь и изучите конкретные функции
00:19:35
именно там, где мы их используем таким образом
00:19:38
мы еще собираемся объяснить все
00:19:40
самая важная функция, но вы
00:19:43
также иметь возможность увидеть, что он делает на
00:19:45
интерфейс и как он ведет себя в моем
00:19:48
мнение, о котором вы узнаете
00:19:49
события о функциях конструкторов и
00:19:53
все будет намного лучше, если мы это покажем
00:19:56
как это уже написано и то
00:19:58
объясните это, надеюсь, это поможет
00:20:00
смысл, с другой стороны, если бы вы
00:20:02
как я, чтобы создать полный курс
00:20:04
где мы углубимся в написание этого
00:20:07
смарт-контракт вручную, вы можете позволить мне
00:20:09
узнайте в комментариях, и если это так
00:20:11
что-то, что вам было бы интересно и
00:20:13
тебе это нужно прямо сейчас, тогда у меня есть
00:20:15
феноменальные новости для вас, совсем недавно мы
00:20:19
опубликовал криптокад целиком nft
00:20:21
Курс по применению Marketplace внутри
00:20:24
этот 12-часовой курс, который ты собираешься пройти
00:20:26
создайте свой собственный блокчейн на основе
00:20:29
Приложение Marketplace, где люди могут
00:20:31
открыть для себя создание покупки и продажи nfts
00:20:34
и самое лучшее в этом то, что
00:20:37
все написано солидно от
00:20:40
поцарапать, что означает, что ты собираешься
00:20:42
освоить твердость, создав целое
00:20:45
смарт-контракт с нуля, ты собираешься
00:20:47
научитесь использовать и тестировать умные
00:20:50
контракты используют силу
00:20:52
блокчейн и использовать его на реальном Nexgs
00:20:55
приложение имеет красивый дизайн и
00:20:57
ты научишься создавать
00:20:59
изучить список страниц nfts nfts мой nfts
00:21:03
и как загрузить свой собственный nfts на
00:21:06
блокчейн, так что еще раз, если это так
00:21:09
что-то, что вам было бы интересно
00:21:10
ссылка будет недоступна
00:21:12
описание и потому что вы смотрите
00:21:14
это видео будет для тебя особенным
00:21:16
уникальный код скидки YouTube
00:21:19
так что не стесняйтесь проверить это с этим
00:21:21
сказал, что теперь у нас есть смарт-контракт
00:21:24
наш скрипт развертывания и наша каска
00:21:27
config, мы готовы развернуть смарт
00:21:29
контракт на блокчейн и, как я уже говорил
00:21:32
сказал, не волнуйся, мы вернемся
00:21:34
и изучить функциональные возможности
00:21:36
подробно о смарт-контракте, как мы
00:21:39
реализуя их на переднем конце
00:21:41
чтобы развернуть наш смарт-контракт, мы можем пойти
00:21:43
для просмотра, а затем терминал
00:21:45
сначала нам нужно его скомпилировать, так что давайте запустим
00:21:48
команду компиляции каски MPX и
00:21:52
убедитесь, что вы находитесь в сети3
00:21:53
каталог, который будет занимать этот процесс
00:21:56
пара секунд и я буду
00:21:58
обратно
00:22:00
и вот, договор заключен
00:22:02
наконец скомпилировано, нам нужно развернуть
00:22:05
смарт-контракт в тестовой сети Fuji от
00:22:08
запуск команды MPX в каске run
00:22:12
скрипты косая черта развертывание точка TS тире
00:22:17
даш Сеть космос Фудзи
00:22:21
этот процесс обычно занимает около
00:22:23
минута, и ваш смарт-контракт готов
00:22:25
быть развернутым, я был неправ, на самом деле
00:22:28
прошло около пяти секунд и вот оно
00:22:30
теперь есть еще одна важная вещь, которую мы
00:22:33
нужно сделать, а именно сохранить адрес
00:22:36
развернутого смарт-контракта, поэтому для
00:22:39
теперь давайте просто безопасно сохраним его внутри
00:22:42
точки EnV, так скажем, контракт
00:22:45
адрес подчеркивания равен и давайте
00:22:49
положи сюда, мы воспользуемся им позже
00:22:52
на стороне клиента для доступа ко всем
00:22:54
функциональные возможности контракта, а также
00:22:57
позже мы собираемся использовать контракт
00:23:00
ABI, который находится прямо здесь, чтобы иметь возможность
00:23:03
получить все функции на клиенте
00:23:05
сторону, чтобы мы могли позвонить им и мы могли
00:23:07
манипулировать данными на смарте
00:23:09
договор
00:23:10
отлично, что сказали, что мы закончили с
00:23:13
Веб-3 сторона вещей, но, как я уже сказал,
00:23:16
мы разрабатываем интерфейс и
00:23:18
интегрируя смарт-контракт, мы
00:23:20
собираюсь вернуться много раз в
00:23:22
смарт-контракт для проверки таких вещей, как
00:23:24
создать битву, создать разных игроков
00:23:27
и собственно работа с игрой
00:23:29
функциональность, которую мы собираемся изучить все
00:23:32
этот код, когда мы его разрабатываем
00:23:35
тем не менее, теперь мы готовы создать наш
00:23:37
интерфейсная часть, а затем мы
00:23:39
уметь соединить эти два, чтобы сделать
00:23:41
инициализация и запуск нашего
00:23:44
на стороне клиента немного проще, я подготовил
00:23:48
стартовая папка клиента для вас, это
00:23:50
позволит нам очень быстро получить
00:23:52
вы готовы к работе, и тогда мы сможем сосредоточиться
00:23:55
о том, что важно, что строится
00:23:57
логика приложения, создающая пользовательский интерфейс
00:24:00
и ux и, наконец, интегрируем их с
00:24:04
смарт-контракт web3, так что внизу
00:24:07
в описании вы можете найти ссылку на
00:24:10
заархивированная версия стартового клиента
00:24:12
просто скачайте его, разархивируйте, а затем вы
00:24:15
можно зайти в файловый менеджер прямо
00:24:17
нажмите, а затем нажмите «Вставить», наконец, мы
00:24:21
можно переименовать это во что-то вроде клиента
00:24:23
что является клиентской стороной нашего
00:24:25
приложение, если мы расширим нашего клиента, мы
00:24:28
вижу, что это обычная реакция.
00:24:31
приложение, созданное с использованием Veet Veet — это
00:24:36
новое и современное приложение Create React
00:24:38
альтернатива, которая намного быстрее, чем
00:24:41
создать реагирующее приложение
00:24:43
здесь я также установил базовый хвостовой плавник
00:24:46
конфигурация с некоторыми цветами, которые
00:24:48
мы будем использовать фоновые изображения и
00:24:52
семейство шрифтов, наряду с которым существует
00:24:55
package.json, который содержит всего пару
00:24:57
зависимостей
00:24:59
как видите, мы будем использовать пакеты
00:25:01
как эфиры и модель web3, чтобы сделать
00:25:04
интеграция с web3 возможна, тогда мы
00:25:08
использовать модель реагирования, чтобы показать некоторые
00:25:10
информация на экране, которую мы будем использовать
00:25:12
инструмент реагирования на наклон и реакцию параллакса
00:25:15
вкладка, чтобы сделать вещи немного больше
00:25:17
интерактивный и, наконец, мы используем
00:25:19
отреагировать на маршрутизатор Dom, чтобы, конечно, создать
00:25:21
маршрутизация, теперь мы можем погрузиться в исходный код
00:25:24
папка для более глубокого изучения приложения
00:25:28
здесь, кажется, много
00:25:30
происходящих вещей, но все это
00:25:33
в основном просто пустая папка с базовыми
00:25:35
стартовые файлы, поэтому давайте посмотрим на
00:25:38
папка с ресурсами, первая здесь, которую я подготовил
00:25:41
для тебя все фоновые изображения все звуки
00:25:46
как защита от атаки и взрыв
00:25:48
они будут использоваться на протяжении всего
00:25:49
приложение, и я также подготовился к
00:25:52
вы атакуете и защищает значки, а также
00:25:56
все карты, которые есть, такие вот
00:25:59
будет интересное видео, но
00:26:01
как вы можете видеть, файлов много
00:26:04
поэтому мне нужно было убедиться, что у тебя есть
00:26:06
все, чтобы быть готовым начать работу
00:26:09
с кодированием логики, когда она придет
00:26:12
среди компонентов есть только один
00:26:13
компонент, подготовленный для вас здесь, который
00:26:16
бортовая модель это базовая часто
00:26:19
использован компонент web3, который просто проверяет
00:26:22
что все настроено правильно
00:26:24
убеждается, что у нас есть основной кошелек
00:26:27
установили все и убедитесь, что мы
00:26:30
подключен к нашему кошельку и что мы
00:26:32
в правой Сети и, наконец, что мы
00:26:35
у нас достаточно токенов Avax, но поскольку мы
00:26:38
хорошо со всеми этими проверками, мы
00:26:40
вообще не должен видеть модель, которая есть
00:26:42
почему я предоставил его для включения этой модели
00:26:45
у нас также есть встроенные утилиты и даже
00:26:49
что еще важнее, у нас есть
00:26:51
файл анимации.js, который предоставляет нам
00:26:55
анимацию взрыва, которую мы будем использовать
00:26:57
это длинный файл, но это не тот
00:27:00
код, который я создал с нуля, я
00:27:03
нашел это на этом замечательном кодепане
00:27:05
Репозиторий
00:27:06
как вы можете видеть, эта анимация была
00:27:08
созданный Дэвидом, и нам просто нужно
00:27:11
нажмите, чтобы увидеть 8-битное действие Dom
00:27:14
поэтому я собираюсь щелкнуть по нему пару раз
00:27:16
раз и это будет именно
00:27:18
что наши игроки увидят, когда
00:27:21
карты отлично атакованы, наконец, сверху
00:27:24
из этого у нас есть базовая домашняя страница, и мы
00:27:28
у нас есть несколько часто используемых стилей, которыми мы будем
00:27:30
использование в нашем приложении, например, текста
00:27:33
Стили у нас также есть более высокого порядка
00:27:35
Страницы полей боя стилей компонентов и
00:27:39
обычные контейнеры — отлично, и наконец мы
00:27:42
есть файл index.css, в котором мы находимся
00:27:45
импортируем попутный ветер и шрифт, которым мы будем
00:27:47
используя во всем нашем приложении
00:27:50
наконец, есть файл main.jsx, где
00:27:53
мы импортировали маршруты или маршрутизатор
00:27:56
из реагирующего маршрутизатора Дом и прямо сейчас
00:27:58
там есть только один маршрут, который
00:28:01
Домашний маршрут великолепен, теперь вы знаете
00:28:04
все, что нужно знать о нашем
00:28:06
текущая стартовая папка для запуска нашей
00:28:08
приложение, которое нам нужно перейти для просмотра и
00:28:11
затем терминал, затем нам нужно CD точка точка
00:28:14
вернуться в One Directory назад, а затем мы
00:28:17
нужно записать компакт-диск в клиент, наконец, мы сможем
00:28:20
запустите npm install, чтобы установить все
00:28:23
необходимые зависимости
00:28:25
этот процесс займет всего лишь
00:28:27
пару секунд, потому что большая часть
00:28:29
все будет кодировать с нуля и
00:28:32
наконец, как только это будет сделано, вы сможете запустить
00:28:34
mpm run Dev, который запустит нашу
00:28:38
veed-приложение на локальном хосте 5173 и
00:28:42
вот и пустой белый экран, который
00:28:45
говорит Avax Gods Web 3 в боевом стиле NFT
00:28:50
карточная игра, созданная с любовью на JavaScript
00:28:52
Мастерство, и, как вы можете видеть, я думаю, что
00:28:55
теперь ты можешь мне поверить, что это просто
00:28:57
пустая стандартная папка, потому что
00:28:59
на экране ничего нет нет
00:29:01
функциональность, какую бы мы ни собирались
00:29:04
напишите все с нуля и сделайте это
00:29:08
выглядеть так
00:29:09
Итак, чтобы начать, мы можем теперь разместить наш
00:29:12
браузер бок о бок с нашим редактором и
00:29:16
наконец-то мы можем закрыть наш терминал и
00:29:19
можно перейти к исходному коду, а затем домой, это
00:29:22
будет отправной точкой нашего приложения
00:29:25
сразу же мы начнем с
00:29:27
что-то феноменальное, чего не так много
00:29:30
люди учат тебя
00:29:31
если вы посмотрите готовый сайт
00:29:33
вы можете заметить, что у нас есть свой дом
00:29:36
Добро пожаловать на страницу evax Gods a web 3 NFD
00:29:39
карточная игра, чтобы начать, подключите свой кошелек
00:29:42
разыгрываем лучшую боевую карту Web 3
00:29:44
игра, это здорово, но если мы переедем
00:29:47
для косой черты создать Dash, сразись с тобой
00:29:51
можно видеть, что дизайн по существу
00:29:54
тот же логотип, у нас есть
00:29:57
заголовок, у нас также есть подзаголовок, и мы
00:30:00
есть изображение и нижний колонтитул
00:30:02
внизу, но что изменилось, так это содержание
00:30:05
для текста прямо здесь здесь и потом
00:30:08
ввод внутри компонента
00:30:10
и, как я уже сказал, я очень взволнован
00:30:13
эта часть, потому что я собираюсь научить тебя
00:30:15
как добиться разумности кода в
00:30:18
реагировать, используя компоненты более высокого порядка
00:30:22
это то, чего не так много
00:30:24
люди тебя учат, так что давай сразу погрузимся
00:30:27
внутрь
00:30:28
начать создавать наш высший порядок
00:30:30
компонент, мы можем открыть компоненты
00:30:32
и создайте новый файл прямо внутри
00:30:35
назовем это page hoc, как выше
00:30:39
компонент заказа Dot jsx
00:30:42
внутри там вы можете запустить rafce
00:30:47
создать базовый функционал реагирования
00:30:49
структура компонента, если это не сработало
00:30:51
для вас вы можете перейти к расширениям и
00:30:54
затем введите es7 Plus
00:30:56
Подобные фрагменты это расширение
00:31:00
вам нужно иметь возможность один раз запустить RAF CE
00:31:03
вы установите это, это должно работать
00:31:05
совершенно внутри нашего высокого порядка
00:31:07
компонент, который на данный момент выглядит так же, как
00:31:09
обычный компонент, мы можем импортировать
00:31:12
используйте навигационный крючок, полученный из реакции
00:31:17
маршрутизатор Дом, как мы собираемся сделать позже
00:31:19
используйте его для повторной навигации куда-нибудь, где мы можем
00:31:22
также импортируйте логотип и героя
00:31:26
ИМГ
00:31:27
исходит из ресурсов с точечной косой чертой
00:31:31
и мы также можем импортировать эти стили
00:31:34
как импорт по умолчанию, исходящий из точки
00:31:38
Слэш Стили — огромная разница
00:31:41
между компонентом более высокого порядка и
00:31:44
регулярный компонент заключается в том, что в качестве первого
00:31:46
параметр, он будет принимать новый
00:31:49
компонент, в который мы собираемся перейти
00:31:51
по сути, он будет действовать как
00:31:54
обертка для меньшего внутри
00:31:57
компонент, мы также можем передать некоторые
00:31:59
дополнительные вещи, такие как заголовок и
00:32:02
описание
00:32:04
наконец-то из-за того, как мы будем звонить
00:32:07
наш компонент более высокого порядка, который мы должны
00:32:09
добавьте еще одну функцию прямо здесь
00:32:11
по сути это будет функция
00:32:13
внутри функции
00:32:16
ты очень быстро увидишь, как
00:32:18
мы собираемся позвонить сюда, мы можем
00:32:20
инициализируйте этот навигационный крючок, сказав
00:32:23
константная навигация равна использованию навигации
00:32:26
наконец, приступим к созданию макета
00:32:29
сначала у нас будет div, который
00:32:31
будет иметь имя класса, равное
00:32:34
Стили точечного контейнера
00:32:39
внутри там у нас будет
00:32:41
еще один div, у которого будет класс
00:32:43
имя
00:32:44
равно стилям
00:32:47
точечное поле содержимого
00:32:51
и если вам интересно, где эти
00:32:53
стили исходят от вас, вы всегда можете
00:32:55
удерживайте Ctrl, а затем нажмите на это имя
00:32:58
он покажет вам, что именно
00:33:00
здесь используются стили, и это
00:33:03
используя Tailwind, поэтому, если вы не уверены
00:33:06
что py8 или small или PX означает, что вы можете
00:33:10
быстро поищите это в документации Tailwind
00:33:12
просто зайдите на Tailwindcss.com и найдите
00:33:16
например, сразу же ты будешь
00:33:20
видеть, что это служит вашему
00:33:23
дополнение, и оно обеспечивает дополнение y
00:33:26
ось Y означает вертикаль, если хотите
00:33:29
найдите что-нибудь еще, например Flex call
00:33:31
посмотрим вызов Flex Dash и сразу
00:33:35
вы можете видеть, что это используется для
00:33:37
расположите предметы вертикально, так что
00:33:40
теперь вы знаете, что можете исследовать любую
00:33:42
имущество, которое мы используем прямо здесь, с
00:33:44
тем не менее, давайте продолжим макет
00:33:46
внутри этого div давайте также создадим
00:33:49
изображение, которое будет самозакрывающимся
00:33:52
тег изображения с источником, равным логотипу
00:33:55
alt равно имени класса логотипа, равному
00:33:59
Стили точечного логотипа, и он будет
00:34:04
иметь свойство unclick с обратным вызовом
00:34:06
функция, в которой мы собираемся Просто
00:34:09
перейдите к простому значению косой черты
00:34:12
домашняя страница
00:34:14
отлично, если мы сохраним это, ничего не будет
00:34:17
произойдет, потому что мы еще не
00:34:20
используя компонент высшего порядка этой страницы
00:34:22
Итак, теперь позвольте мне показать вам, как мы можем его использовать
00:34:25
прежде чем мы это сделаем, давайте экспортируем его из
00:34:28
нашу папку компонентов, создав новую
00:34:31
файл index.js, а затем внутри него
00:34:33
мы можем импортировать его, сказав страницу импорта
00:34:37
специальный
00:34:39
с этой косой страницы, и тогда мы сможем
00:34:42
скажем, объект экспорта, и тогда мы сможем поместить
00:34:45
вот этот компонент, это сейчас
00:34:48
собираемся позволить нам вернуться домой
00:34:50
а затем импортируйте страницу внутри
00:34:55
фигурные скобки, подобные этой странице импорта, hoc
00:34:59
из компонентов «точка-точка-слэш» — это здорово, так что
00:35:05
наконец, как вы его используете, что такое
00:35:07
разница между высшим порядком
00:35:08
компонент и обычный компонент
00:35:11
ну, компонент высокого порядка может обернуть
00:35:14
другой компонент
00:35:16
и в этом случае мы собираемся обернуть наш
00:35:18
дома прямо внизу, где
00:35:20
эксперт прямо здесь, давайте позвоним
00:35:23
специальная страница
00:35:25
давайте назовем это функцией и
00:35:27
первый параметр будет таким
00:35:29
второй компонент, который будет
00:35:31
дом сейчас, если мы сохраним это и перезагрузим
00:35:35
страница
00:35:36
сразу видно, что все
00:35:39
становится темно, и мы видим логотип
00:35:41
это исходит с нашей страницы, но
00:35:45
это пока не так интересно, потому что
00:35:47
мы не можем видеть ничего другого, как мы можем
00:35:50
увидеть этот контент на главной странице как
00:35:52
ну, это пользовательский контент, верно
00:35:55
ну, чтобы увидеть, что мы можем идти
00:35:57
вернемся на страницу hoc, и мы сможем использовать
00:36:00
первая опора, которая является компонентом, поэтому
00:36:03
прямо под изображением мы можем создать его
00:36:06
больше дел
00:36:07
давайте дадим ему имя класса, равное
00:36:10
Стили точечной оболочки тела и внутри
00:36:15
отсюда давайте сделаем самозакрытие
00:36:19
тег компонента и сохраните его
00:36:22
как только ты это сделаешь, ты сможешь
00:36:24
едва вижу все ее сообщения
00:36:26
появился прямо здесь, хотя это так
00:36:29
сейчас темно, мы знаем, что оно там
00:36:32
так как еще мы можем изменить более высокий порядок
00:36:35
компонент ну, мы указали, что это
00:36:38
собираюсь принять дополнительный реквизит, так что
00:36:40
давайте пройдем мимо них, давайте пройдем пустой
00:36:43
фрагмент реакции, который скажет
00:36:45
добро пожаловать в Avax Gods, давайте также добавим
00:36:49
Разорвите тег здесь, и тогда мы сможем сказать паутину.
00:36:52
3 карточная игра NFD, это название, давайте
00:36:58
также добавьте еще один фрагмент и сюда
00:37:00
скажем, подключиться
00:37:03
Ваш кошелек
00:37:05
начать играть
00:37:07
и давайте добавим тег разрыва, а затем мы
00:37:10
можно сказать, что это настоящая битва Web3
00:37:14
карточная игра
00:37:15
конечно, нам нужно поставить запятую правильно
00:37:18
здесь
00:37:19
отлично, так как же нам это получить
00:37:22
данные внутри нашего компонента высокого порядка
00:37:24
ну, у нас есть название и описание
00:37:27
реквизит, прямо здесь, внутри помещения
00:37:31
обертка тела, давайте продолжим и создадим
00:37:34
div
00:37:35
у этого div будет имя класса
00:37:38
равно строке Flex Flex Dash и W Dash
00:37:44
полностью внутри мы можем визуализировать H1
00:37:47
элемент, который будет отображать заголовок
00:37:51
и прямо под этим мы можем отобразить p
00:37:54
элемент имейте в виду, что мы ниже этого
00:37:57
div прямо здесь, который будет отображаться
00:37:59
описание теперь давайте сохраним его и
00:38:03
мы сразу же сможем увидеть наш текст правильно
00:38:05
здесь конечно это не совсем так стилизовано
00:38:08
давайте применим несколько стилей к rh1, давайте
00:38:12
дайте ему имя класса, равное тому, что он собирается
00:38:15
быть строкой шаблона flex теперь
00:38:18
динамический знак доллара, фигурные скобки, стили
00:38:21
текст с точкой и, наконец, текст с тире
00:38:26
если мы сохраним это, это уже ищется
00:38:29
лучше, теперь мы сможем уменьшить масштаб
00:38:31
а также давайте добавим стили в
00:38:34
описание, говоря, что имя класса
00:38:37
равно долларовым фигурным скобкам Стили
00:38:40
обычный текст с точкой, а также мой для поля y
00:38:45
10 и сохрани там, поехали, это
00:38:50
выглядит великолепно, давай немного расширим его
00:38:53
вот и все, теперь оно выглядит еще лучше и
00:38:56
а пока давайте удалим эти три
00:38:58
элементы, поскольку они нам больше не нужны, мы
00:39:01
иметь все внутри нашего высшего
00:39:03
компонент заказа
00:39:05
теперь давайте вернемся к этому и давайте
00:39:08
примените изображение, а также нижний колонтитул как
00:39:11
хорошо
00:39:12
для этого мы можем пойти ниже нашего компонента
00:39:15
сейчас и ниже еще одного div
00:39:17
давайте создадим тег P, который будет
00:39:20
иметь имя класса
00:39:22
равен тексту нижнего колонтитула с точкой и в
00:39:27
там можно сказать сделано с любовью JSM
00:39:33
если мы сохраним это, мы сможем увидеть это правильно
00:39:35
вот и просто чтобы немного соответствовать теме
00:39:37
еще мы можем изменить это на «мокрое» и
00:39:40
затем это фиолетовое сердце прямо здесь и из
00:39:43
конечно, не стесняйтесь изменить это имя на
00:39:45
наконец-то твой собственный, давай сделаем это здорово
00:39:47
изображение ниже метки скорости и ниже
00:39:50
еще один div, мы можем создать последний div
00:39:53
этого компонента он будет иметь
00:39:56
имя класса, равное flex и flex тире
00:39:59
one, и внутри него мы можем визуализировать
00:40:02
самозакрывающееся изображение, которое будет иметь
00:40:05
источник равен Hero IMG, который мы собираемся
00:40:09
также дайте ему тег ALT-героя Dash IMG
00:40:12
и мы дадим ему имя класса
00:40:15
равно
00:40:17
W-4 на очень больших устройствах высота
00:40:21
тоже полный, и это будет объект
00:40:24
крышка
00:40:25
теперь, если мы сохраним это, у нас будет красивый
00:40:29
компонент домашней страницы, но не только
00:40:32
это не просто дом, мы уже
00:40:35
обсуждали, что мы собираемся использовать
00:40:37
тот же макет для домашней страницы для
00:40:39
создать страницу битвы на выбор
00:40:41
Страница поля боя и панель присоединения
00:40:44
страница, на три-четыре разные
00:40:46
страницы у них будут похожие
00:40:48
макет, поэтому позвольте мне показать вам, как мы можем
00:40:51
в полной мере использовать наш высший порядок
00:40:53
компонент и как мы можем создавать вещи
00:40:55
многоразовый, давайте создадим новую страницу правильно
00:40:59
внутри папки страниц под названием create
00:41:03
Battle.jsx, а сейчас мы можем скопировать
00:41:06
всю домашнюю страницу, а затем вставьте ее правильно
00:41:09
здесь единственное, что нам нужно сделать, это
00:41:11
измените дом в строках 5 и 14 на
00:41:15
создать битву внутри создания битвы
00:41:19
мы собираемся сказать что-то вроде
00:41:21
создайте БР и тогда прямо здесь мы сможем сказать
00:41:26
новая битва и под описанием мы
00:41:30
могу сказать что-то вроде создай свой собственный
00:41:34
сражайтесь и ждите, пока другие игроки
00:41:39
присоединиться к вам
00:41:40
вот и наконец нам пора идти
00:41:43
внутри основного
00:41:45
там нам придется импортировать
00:41:47
создайте битву из папки Pages
00:41:50
давайте сначала экспортируем его, щелкнув правой кнопкой мыши
00:41:53
страницу и создав новый файл с именем
00:41:56
index.js, туда мы можем импортировать наш дом
00:41:59
страница, идущая из дома с точкой-косой чертой
00:42:02
и мы также можем импортировать нашу битву создания
00:42:06
страница из раздела «Создать битву», и мы
00:42:10
может экспортировать оба из них внутри
00:42:13
объект, который будет выглядеть так
00:42:15
домой и создать битву
00:42:17
это позволит нам вернуться в
00:42:19
Основной и импортный как дома
00:42:23
и создать бой в одну линию
00:42:27
чисто и просто, и это будет
00:42:29
со страницы с косой чертой
00:42:32
теперь мы можем дублировать этот маршрут
00:42:35
измените его, чтобы создать битву с косой чертой
00:42:38
и измените страницу рендеринга, чтобы создать
00:42:42
боевой
00:42:43
теперь, если мы сохраним это
00:42:45
мы можем вручную перейти к косой черте
00:42:48
создайте Dash Battle и проверьте его
00:42:52
тот же макет, но другой текст и
00:42:55
разные элементы, если мы сейчас вернемся назад
00:42:58
вы можете увидеть разницу, мы это сделали
00:43:00
просто буквально имея пустую
00:43:03
компонент и использование страницы более высокого порядка
00:43:06
компонент
00:43:07
конечно, здесь, теперь мы можем
00:43:10
создайте дополнительные элементы, такие как H1
00:43:13
с именем класса давайте напишем текстовое тире
00:43:16
белый и поздороваться из создания битвы
00:43:21
теперь, если мы сохраним это и перейдем вперед
00:43:25
косая черта создайте весло Dash, которое вы можете увидеть
00:43:28
привет из Create Battle, давай сделаем это
00:43:31
немного больше, поэтому напишите Dash XL, и мы сможем
00:43:35
скопируйте это и вставьте то же самое в
00:43:37
дом
00:43:38
который собирается поздороваться из дома
00:43:41
и теперь мы можем продолжать переключаться между
00:43:43
два, что означает, что теперь мы можем иметь
00:43:46
вся конструкция такая же, как у
00:43:49
практически без усилий, как это
00:43:52
компонент уже закодирован, но мы
00:43:54
может продолжать менять то, что происходит внутри
00:43:58
эти компоненты с логикой и с
00:44:00
все остальное там идеально
00:44:02
Я очень рад, что так рано
00:44:05
видео, которое я должен показать вам силу
00:44:08
используя компоненты более высокого порядка, если вы
00:44:11
как эта часть видео, перейдите к
00:44:13
комментарии прямо сейчас и дайте мне знать
00:44:15
если ты это сделаешь, я постараюсь научить этому
00:44:18
лекции как можно чаще в будущем
00:44:21
видео также, если вам нравится этот сегмент
00:44:24
Вам понравится то, что мы делаем
00:44:27
jsmastery.pro у нас есть профессиональные
00:44:30
10-часовые курсы плюс курсы, в которые мы погружаемся
00:44:33
Углубление в темы реагирования, подобные этой
00:44:36
один
00:44:37
у нас сейчас два курса фильма
00:44:39
Курс в парке, в котором подробно рассказывается о
00:44:41
реакция, а затем торговая площадка nft
00:44:44
курс, который требует Nextges и Web 3
00:44:47
развитие надежности на новый уровень
00:44:49
еще раз, я просто хотел это выложить
00:44:51
с учетом сказанного, мы теперь готовы
00:44:54
продолжать развитие нашего
00:44:56
отличное приложение, хотите верьте, хотите нет
00:44:58
мы собираемся сразу же приступить к делу, мы
00:45:02
собираюсь закрыть или создать битву
00:45:04
Аппаратный компонент и основной, и мы
00:45:06
собираюсь сосредоточиться непосредственно на приложениях
00:45:09
контекст, чтобы мы могли перейти к источнику и
00:45:12
можно создать новую папку в исходнике
00:45:14
папка под названием context, это не произойдет
00:45:18
это будет обычный контекст, это будет
00:45:21
быть контекстом, через который мы проходим
00:45:23
чтобы подключить наше интерфейсное приложение к
00:45:25
смарт-контракт web3, давайте создадим
00:45:28
новый
00:45:29
внутри файла index.jsx мы можем
00:45:33
реакция на импорт, мы тоже собираемся импортировать
00:45:36
создать 8 контекстов
00:45:38
использовать контекст, использовать эффект, использовать ссылку и использовать
00:45:44
Состояние, я думаю, что вы уже можете видеть
00:45:47
что мы используем почти все
00:45:50
функциональные возможности из реакции, так что это будет
00:45:53
быть длинным компонентом, и это не будет
00:45:56
легко, но мы пройдем через это
00:45:58
мы также собираемся импортировать кое-что известное
00:46:01
поскольку эфиры происходят из эфиров, это
00:46:04
пакет, который позволит нам
00:46:06
взаимодействовать со смарт-контрактом, который мы
00:46:08
собираюсь также импортировать модель web3 как
00:46:12
импорт по умолчанию
00:46:13
вот так из модели web3, поскольку мы
00:46:18
обсуждалось до того, как это поможет
00:46:20
мы как бы настраиваем процесс адаптации
00:46:23
наше приложение, чтобы убедиться, что
00:46:25
пользователь правильно подключен к
00:46:27
приложение, а также давайте импортируем
00:46:31
использовать навигационный крючок, исходящий из
00:46:34
реакции-маршрутизатор Dash Dom, тогда мы можем начать
00:46:37
создавая наш контекст, мы можем сказать const
00:46:39
Глобальный контекст равен созданию
00:46:44
такой контекст
00:46:46
и тогда мы можем сказать: «export const Global»
00:46:51
поставщик контекста равен функции
00:46:55
у которого есть только один реквизит детей и
00:46:59
оно будет иметь возврат, поскольку это
00:47:01
обычный компонент реагирования теперь то, что мы хотим
00:47:04
возвращение будет глобальным
00:47:07
поставщик контекстных точек — компонент, который
00:47:10
выглядит так и принимает одну опору
00:47:14
которое называется значением, это объект
00:47:17
куда мы можем передать все значения
00:47:19
которым мы хотим поделиться с каждым
00:47:21
компонент в нашем приложении, так что правильно
00:47:24
здесь, внутри контекста, который мы собираемся
00:47:26
взаимодействовать и подключаться к нашим умным
00:47:29
контракт, а затем мы перейдем
00:47:31
все эти ценности здесь, чтобы мы могли
00:47:34
использовать их из каждого отдельного компонента
00:47:36
в нашем приложении, наконец, мы
00:47:39
также будет иметь вспомогательную функцию или
00:47:42
вспомогательный хук под названием «export const use»
00:47:46
Глобальный контекст, который будет
00:47:48
равно функции обратного вызова, где мы
00:47:52
собираемся вызвать контекст использования, и мы
00:47:54
пройдет в этом глобальном контексте
00:47:56
это позволит нам позвонить ему
00:47:58
из других компонентов в качестве примера для
00:48:01
теперь давайте передадим демонстрационную переменную
00:48:05
равно для проверки нашего значения вот так и
00:48:10
теперь мы можем попытаться получить к этому доступ
00:48:12
ценность других наших компонентов
00:48:15
первое, что нам нужно сделать, это пойти
00:48:17
внутри Main, и нам нужно обернуть наш
00:48:19
все приложение с нашим провайдером, поэтому
00:48:23
прямо здесь мы можем сказать импорт
00:48:25
Поставщик глобального контекста из точечной косой черты
00:48:29
контекст, а затем прямо здесь, над маршрутами
00:48:31
мы можем создать поставщика глобального контекста
00:48:35
компонент, и мы можем поместить все
00:48:37
маршруты внутри него, давайте обязательно
00:48:40
сделать правильный отступ
00:48:42
вот и все маршруты идут внутрь
00:48:45
надеюсь, это имеет смысл, и что мы
00:48:48
только что закончили, мы завернули все наши
00:48:51
приложение с глобальным контекстом
00:48:54
провайдера, это означает, что теперь внутри
00:48:57
дом, который мы должны иметь возможность
00:48:59
успешно использовать демонстрационную переменную, которую мы
00:49:02
создали, теперь собираемся вернуться
00:49:04
на домашнюю страницу здесь
00:49:06
теперь причина, по которой мы не видим наше приложение, заключается в том, что
00:49:08
потому что мы ничего не возвращаем
00:49:10
из нашего контекста, как вы можете видеть, это
00:49:13
пусто, поэтому мы должны поставить
00:49:16
дети прямо здесь, что означает возвращение
00:49:18
все, что мы передаем нашему приложению в
00:49:21
этот чемодан станет нашим домом
00:49:24
компонент отличный
00:49:27
теперь, как я и обещал, давайте попробуем протестировать
00:49:30
контекст внутри нашего дома
00:49:32
приложение прямо здесь, мы можем импортировать
00:49:36
использовать глобальный контекст, исходящий из
00:49:40
Контекст – единственное, что нам нужно сделать, чтобы
00:49:44
получить эту демонстрационную переменную, скажем, const demo
00:49:48
равно
00:49:50
используйте глобальный контекст, и теперь мы можем
00:49:54
запишите это в консоль или, что еще лучше, мы можем
00:49:56
распечатайте это, так что давайте прямо здесь создадим
00:49:59
H1, давайте дадим ему имя класса
00:50:02
равно
00:50:05
текст Dash XL и текст Dash белый и
00:50:09
внутри давайте отрендерим демо
00:50:12
переменная
00:50:13
как только мы это сделаем, мы сможем увидеть тест
00:50:15
а это значит, что мы успешно
00:50:17
передача значения из нашего глобального
00:50:20
поставщик контекста вплоть до нашего дома
00:50:22
компонент
00:50:23
хотя передача чего-то вроде демо-версии
00:50:26
не так уж и круто, поэтому мы собираемся удалить
00:50:27
это на данный момент
00:50:29
и удали отсюда также то, что есть
00:50:32
круто — это получить все данные из
00:50:34
смарт-контракт, а затем иметь возможность
00:50:37
передать это прямо здесь, чтобы это было точно
00:50:39
что мы собираемся делать дальше, мы собираемся
00:50:42
иметь ряд эффектов использования, которые
00:50:44
мы собираемся использовать для подключения к нашему
00:50:46
смарт-контракт, как только
00:50:48
загрузка приложений
00:50:50
сначала нам нужно подключиться к нашему смарту
00:50:53
кошелек с ядром, чтобы сделать это, давайте
00:50:56
создайте новое поле состояния использования, которое
00:50:59
будет называться адресом кошелька и по адресу
00:51:03
в начале он будет установлен как
00:51:05
пустая строка
00:51:06
теперь давайте создадим обновление функции const
00:51:09
текущий адрес кошелька
00:51:14
это будет асинхронно
00:51:15
функция
00:51:17
и прямо внутри этого мы можем сказать
00:51:19
константные счета равны весу
00:51:22
запрос точки окна Ethereum Dot, а затем
00:51:28
внутри мы можем передать метод
00:51:30
равно учетным записям запроса eth с подчеркиванием
00:51:36
теперь вам может быть интересно, что это такое
00:51:38
Объект Ethereum на объекте окна, как
00:51:42
оно существует, пойдем проверять
00:51:45
давайте откроем консоль и наберем
00:51:48
окно Dot Ethereum
00:51:51
как только ты это сделаешь, ты это увидишь
00:51:53
существует много разных переменных
00:51:55
который мы можем назвать
00:51:57
здесь у нас есть конструкторы, назначающие
00:51:59
создавать много разных вещей
00:52:01
происходит здесь, и это связано с
00:52:04
тот факт, что у нас установлено одно и то же ядро
00:52:06
что-то происходит с метамаской
00:52:08
внедряет функциональные возможности Web3 прямо в
00:52:11
ваш браузер, теперь давайте попробуем консоль
00:52:14
войти в эти аккаунты
00:52:17
вот и все
00:52:19
Я собираюсь открыть элемент проверки
00:52:22
консоль и теперь, конечно, нам придется
00:52:25
вызовите эту функцию, поэтому давайте создадим использование
00:52:27
эффект
00:52:28
мы собираемся вызвать его только в начале
00:52:31
это означает, что наш массив зависимостей
00:52:33
будет пусто
00:52:35
и мы собираемся вызвать наше обновление
00:52:38
текущий адрес кошелька вот так
00:52:41
давай сохраним это
00:52:43
теперь мы получаем сообщение, что по сути
00:52:46
говорит, что мы пока не можем подключиться и что
00:52:49
потому что мы еще не настроили
00:52:51
поставщик смарт-контрактов, так что давайте сделаем это
00:52:54
прямо сейчас я создам еще один
00:52:57
используйте эффект и потерпите, будет
00:53:00
будь парой в этом индексном файле, так что давай
00:53:03
создайте новый эффект использования прямо под этим
00:53:06
один
00:53:07
и он также будет вызван только в
00:53:10
начало приложения так
00:53:12
массив зависимостей будет пустым
00:53:15
там мы можем создать новую функцию const
00:53:18
установить смарт-контракт и провайдера
00:53:23
и это также будет
00:53:25
асинхронная функция, которую мы собираемся
00:53:27
вызовите эту функцию немедленно, как только
00:53:29
как веб-сайт загружает причину, по которой мы
00:53:32
пришлось создать эту функцию и не только
00:53:34
напишите код здесь, потому что это
00:53:35
асинхронно, к которому мы хотим получить доступ
00:53:38
какой-то асинхронный код
00:53:39
Итак, давайте инициализируем модель web3
00:53:42
константная модель web3 равна новой модели web3
00:53:47
модель, и мы называем ее функцией const
00:53:50
соединение равно весу web3
00:53:53
модель точка подключения
00:53:56
константный новый поставщик равен
00:54:00
новые провайдеры эфиров dot web3
00:54:05
провайдера, и мы собираемся передать это
00:54:08
связь, которую мы установили здесь, затем мы
00:54:11
нужно получить подписывающую сторону, которая подписывает
00:54:13
контракт, который будет равен
00:54:15
новый провайдер, подписывающий точку
00:54:19
и, наконец, мы получим новый
00:54:21
контракт, который будет равен
00:54:24
новый ethers.contract и здесь у нас есть
00:54:27
передать данные из смарт-контракта
00:54:30
что мы создали, но, конечно, мы
00:54:33
у нас еще нет этих данных или у нас все хорошо
00:54:37
технически да, но это внутри
00:54:40
папка web3, которую нам еще предстоит передать
00:54:43
в наше клиентское приложение, но
00:54:45
даже после внесения этого изменения вы можете увидеть
00:54:48
что мы получили основное уведомление, которое
00:54:51
отлично, сейчас я откажусь от этого, так как
00:54:53
сначала мы собираемся подключиться позже
00:54:55
давайте добавим наш смарт-контракт в нашу
00:54:58
интерфейсное приложение, которое мы собираемся сделать
00:55:00
это создав новую пустую папку
00:55:03
внутри исходной папки под названием
00:55:05
договор
00:55:07
внутри него мы собираемся создать
00:55:10
новый файл index.js
00:55:12
вот нам нужно будет это экспортировать
00:55:15
адрес, который мы сохранили ранее, так что он будет
00:55:18
быть экспортным константным адресом, и все будет готово
00:55:22
быть равным пустой строке и
00:55:24
наконец-то мы можем вернуться в Web 3. ЭнВ
00:55:28
и мы можем скопировать этот адрес контракта, который мы
00:55:30
сохранил и удалил его отсюда, обязательно
00:55:33
скопировать адрес контракта, а не
00:55:35
закрытый ключ и, наконец, вы можете вставить его
00:55:38
вот еще кое-что, что мы сделаем
00:55:40
нужно сделать, и это взять
00:55:43
контракты артефактов, а затем скопировать и
00:55:46
вставьте havax gods.json прямо внутрь
00:55:50
нашей папки контракта, поэтому просто перетащите
00:55:53
и брось это прямо сюда, а затем внутрь
00:55:55
индекс, который мы можем импортировать
00:55:58
контракт на импорт из dot slash evox
00:56:02
gods.json, а затем мы сможем экспортировать ABI
00:56:06
из этого контракта, поэтому экспортируйте const
00:56:08
внутри объекта ABI, равный ABI в
00:56:12
заглавные буквы или просто двоеточие справа
00:56:15
здесь и тогда равно контракту
00:56:19
если вам интересно, что такое API
00:56:21
ABI — это двоичный интерфейс приложения.
00:56:24
это контекст, который вы можете рассматривать как
00:56:27
интерфейс между двумя программными модулями
00:56:29
по сути, это позволяет нашей интерфейсной стороне
00:56:32
для вызова функций, которые у нас есть
00:56:34
созданный внутри нашего смарт-контракта, мы
00:56:37
это нужно для правильного сопряжения двух
00:56:39
с учетом сказанного, теперь мы можем вернуться внутрь
00:56:42
нашего контекста, и мы действительно можем передать
00:56:44
правильные значения, конечно, давайте
00:56:47
сначала импортируйте их, чтобы вверху мы могли
00:56:50
скажи импорт
00:56:52
ABI и адрес все с заглавной буквы, начиная с точки.
00:56:57
слэш, это будет контракт
00:57:02
и, наконец, мы можем передать их прямо здесь
00:57:05
новый контракт на эфиры, который мы передадим
00:57:08
адрес
00:57:10
ABI и подписывающее лицо, вот и все
00:57:15
нам нужно правильно создать новый
00:57:17
договор
00:57:18
и что мы собираемся с этим делать
00:57:19
контракт, давайте установим его в штат
00:57:22
чтобы мы могли использовать его позже
00:57:24
Я собираюсь создать два новых поля состояния
00:57:27
использовать состояние
00:57:29
это будет провайдер
00:57:32
установил провайдера и вначале все идет
00:57:35
быть установлен в пустую строку, а также
00:57:37
использовать состояние
00:57:40
контракт, набор контрактов, и всё пошло
00:57:44
также будет установлена ​​​​пустая строка
00:57:47
наконец-то мы можем прокрутить вниз и сделать это
00:57:49
скажем, поставщик установки
00:57:51
и мы собираемся передать новый
00:57:53
поставщика, и мы можем сказать, установили контракт и
00:57:56
принять новый контракт, что означает
00:57:58
что мы успешно устанавливаем эти
00:58:00
значения для состояния и, как вы можете видеть
00:58:02
обновить текущий адрес кошелька, где
00:58:05
мы запрашиваем учетные записи сейчас на самом деле
00:58:08
появляется прямо здесь, так что давайте нажмем
00:58:10
одобряю отлично, это означает, что у нас есть
00:58:14
подключили наш кошелек к нашему приложению
00:58:16
теперь это приложение не собирается
00:58:18
зайдите снова вместо входа в консоль
00:58:21
счета, давайте установим их состояние
00:58:23
поэтому мы можем сказать, если
00:58:24
Счета
00:58:26
затем установите адрес кошелька на ноль учетных записей
00:58:32
потому что мы хотим установить только первый
00:58:34
один теперь мы хотим вызвать эту функцию в
00:58:36
первая перезагрузка, которая происходит здесь и
00:58:39
мы также можем вызывать его всякий раз, когда меняем
00:58:41
кошелек внутри ядра, потому что ядро ​​дает
00:58:44
нам возможность сделать это
00:58:46
скажем, окно Dot Ethereum
00:58:50
расставить точку
00:58:52
учетные записи изменены
00:58:55
там мы хотим назвать обновление текущим
00:58:58
адрес кошелька тоже идеален, теперь мы
00:59:02
установили два разных эффекта использования
00:59:04
раз уж нас будет много, давайте
00:59:06
правильно документировать их первый
00:59:08
вот здесь, что на самом деле является функцией
00:59:10
вызывается внутри эффекта использования
00:59:12
давайте скажем так
00:59:14
установите адрес кошелька в состояние
00:59:18
вот что он делает, а потом это
00:59:21
один прямо здесь, он будет использоваться для
00:59:25
установка, а установка смарт-контракта
00:59:30
и поставщик государству
00:59:33
и теперь вы можете свернуть их,
00:59:35
щелкните стрелку прямо здесь
00:59:37
это облегчит нам
00:59:40
продолжить разработку нашего приложения как
00:59:42
у нас будет много функций
00:59:43
и много эффектов использования, но отличная работа
00:59:46
на данный момент наш кошелек действительно подключен
00:59:49
этого само по себе должно быть достаточно, чтобы пройти
00:59:52
эти данные в наш домашний компонент и
00:59:55
начнем подключать нашего первого пользователя, так что давайте
00:59:58
сделайте именно это, если мы перейдем к значению вправо
01:00:01
здесь мы можем передать наш контракт как один из
01:00:05
реквизит и адрес кошелька в качестве
01:00:08
второй
01:00:09
возвращаясь домой, мы теперь можем получить
01:00:12
этот контракт и адрес кошелька
01:00:15
прямо из контекста я думаю, что
01:00:18
теперь ты можешь увидеть силу того, чем мы являемся
01:00:20
Следующее, что нам нужно сделать, это
01:00:23
создайте этот ввод, а также
01:00:25
кнопку регистрации, чтобы мы могли успешно
01:00:28
регистрируйте пользователей в нашей замечательной игре
01:00:31
давайте начнем с того, что дадим этому разработчику
01:00:34
имя класса
01:00:35
равен гибкому и гибкому угольу Dash внутри
01:00:40
здесь мы хотим отобразить два пользовательских
01:00:42
компоненты, первый в списке
01:00:45
будет индивидуальный многоразовый
01:00:48
самозакрывающийся тег ввода, конечно, это
01:00:52
компонент еще не существует, но мы
01:00:54
собираюсь создать его прямо сейчас, поехали
01:00:57
в наши компоненты давайте создадим новый
01:01:00
обычай
01:01:02
input.jsx и давайте запустим rafce внутри
01:01:06
вот давайте перейдем к индексу
01:01:08
компоненты теперь внутри компонентов
01:01:11
index.js мы можем экспортировать только что созданный
01:01:14
пользовательский компонент ввода, импортировав его
01:01:16
здесь
01:01:17
пользовательский ввод, и тогда, наконец, мы сможем
01:01:21
экспортируйте его, поехали, давайте сохраним его.
01:01:25
вернуться к домашнему компоненту
01:01:27
и здесь мы можем импортировать пользовательские
01:01:30
входной компонент из компонентов давайте
01:01:34
сохраните его и вернитесь в наше приложение
01:01:37
и если вы перезагрузите страницу, вы должны быть
01:01:39
возможность видеть пользовательский ввод прямо здесь, в
01:01:43
Черные буквы, теперь давайте создадим собственный
01:01:46
штат прямо здесь, внутри дома
01:01:48
назвал имя игрока
01:01:50
здесь будет использоваться имя игрока штата
01:01:54
и задайте имя игрока прямо здесь и
01:01:57
наконец, он станет пустым
01:01:59
строка в начале
01:02:02
теперь на этот вход мы можем передать метку
01:02:05
равно имени
01:02:08
мы также можем передать заполнитель, равный
01:02:11
чтобы ввести свое имя игрока
01:02:14
мы также можем передать значение, равное
01:02:17
изменение имени игрока и значения дескриптора
01:02:21
равнозначно установке имени игрока в этом пользовательском режиме
01:02:25
вход будет невероятно
01:02:27
многоразовый компонент, поэтому мы сразу
01:02:29
передавая все как реквизит и, наконец,
01:02:32
нам, конечно, придется импортировать использование
01:02:35
состояние от реакции вот и мы теперь можем
01:02:39
перейдите в пользовательский компонент ввода и
01:02:41
мы можем начать его развивать
01:02:43
не волнуйся, это будет красиво
01:02:45
простой
01:02:46
обо всем по порядку, нам нужно импортировать
01:02:49
стили из точечной косой черты Стили, которые мы собираемся
01:02:54
чтобы также создать определенный регулярный
01:02:56
выражение, так что назовем его регулярным выражением
01:02:59
начинается с косой черты
01:03:01
тогда у нас есть знак морковки
01:03:04
внутри квадратных скобок у нас есть от А до Я
01:03:08
все в верхнем регистре, тогда у нас есть от A до Z
01:03:12
строчными буквами, а затем от 0 до 9, вот так, и
01:03:17
тогда мы можем поставить плюс и знак доллара
01:03:20
и мы можем закрыть его другим нападающим
01:03:22
слэш вот это обычное дело
01:03:25
выражение для всех символов, которые
01:03:28
в пределах от А до Я заглавные от А до Я строчные буквы
01:03:31
или цифры, это единственные действительные
01:03:34
вместо этого символы для нашего имени игрока
01:03:37
из наших пользовательских данных мы также принимаем
01:03:39
некоторые реквизиты, которые мы отправили ранее, например
01:03:42
Значение заполнителя метки и значение дескриптора
01:03:46
меняемся, мы передаем их прямо из дома
01:03:50
наш компонент будет пустым
01:03:53
фрагмент реакции, внутри которого мы находимся
01:03:55
будет лейбл, этот лейбл
01:03:58
будет иметь свойство html4, равное
01:04:01
имя в такой строке
01:04:03
тогда мы дадим ему имя класса
01:04:05
равно точечной метке стиля, и мы
01:04:09
будет передан настоящий ярлык в
01:04:12
как видите, у нас правильное имя
01:04:14
вот, наконец, мы собираемся создать
01:04:16
самозакрывающийся тег ввода ниже, давайте дадим
01:04:19
это тип, равный тексту
01:04:21
давайте дадим ему заполнитель, равный
01:04:24
заполнитель
01:04:25
прямо сейчас мы можем увидеть что-то
01:04:27
но, конечно, это пока не выглядит хорошо
01:04:30
давайте добавим значение, равное Value, давайте
01:04:34
добавить свойство при изменении и это
01:04:36
изменение будет равно обратному вызову
01:04:39
функция, в которой мы получаем событие, но затем
01:04:42
нам нужно проверить, есть ли точка e Target dot
01:04:45
значение не пустое
01:04:48
или если
01:04:50
регулярное выражение.тест
01:04:53
e.target.value означает, проходит ли оно наше
01:04:55
тест на то, чтобы быть только персонажем или
01:04:59
номер, только если это так, мы можем
01:05:01
вызвать изменение значения дескриптора и предоставить
01:05:04
целевое значение сейчас, если вы попытаетесь ввести
01:05:06
буквы или цифры, это сработает
01:05:09
но если вы попробуете использовать специальные символы
01:05:11
оно не позволит тебе это
01:05:13
именно то, что мы хотели, наконец, давайте
01:05:15
дайте ему имя класса
01:05:18
равно вводу точки в стилях
01:05:22
отлично, это выглядит намного лучше
01:05:25
Мне это нравится, конечно, это не так
01:05:28
пока есть функциональность, но она скоро появится
01:05:30
теперь, конечно, для каждого ввода также требуется
01:05:34
кнопка, которая что-то с этим делает
01:05:35
ввод, поэтому нашей следующей задачей будет
01:05:38
иди домой и прямо здесь мы сможем творить
01:05:41
компонент пользовательской кнопки, самозакрывающийся
01:05:45
тег, он будет принимать заголовок в качестве
01:05:48
реквизит, который будет говорить о регистрации
01:05:50
он примет щелчок ручки
01:05:54
который сейчас мы собираемся установить как
01:05:56
пустая функция обратного вызова
01:05:57
и он также примет отдых
01:06:00
Стили, которые будут конкретными
01:06:03
стили для этой конкретной кнопки и
01:06:05
в качестве маржи будет установлено значение МТ6
01:06:08
наверх, конечно, если мы сохраним это, это
01:06:11
не сработает, потому что кнопка
01:06:12
не существует, но давайте продолжим и
01:06:14
создать это
01:06:15
внутри компонентов мы можем создать новый
01:06:18
файл под названием
01:06:20
button.jsx или, скорее, мы назвали его custom
01:06:23
кнопка.jsx
01:06:25
запустим rafce и давайте также экспортируем его из
01:06:29
индекс
01:06:30
это будет прямо здесь, по обычаю
01:06:33
кнопка из пользовательской кнопки с точкой и косой чертой и
01:06:37
мы добавили прямо здесь и сейчас, если вернемся назад
01:06:41
и перезагрузить страницу нам, конечно, придется
01:06:44
вернись домой и импортируй это отсюда
01:06:48
обычай
01:06:50
кнопка, и вот, написано: «Пользовательский»
01:06:53
кнопка, но она еще не настроена, как мы
01:06:56
не стилизовал его, поэтому давайте перейдем к
01:06:59
папку компонентов и давайте откроем папку
01:07:01
пользовательскую кнопку, и давайте сразу перейдем к
01:07:04
кнопка будет четной
01:07:06
проще, чем ввод внутри здесь, мы
01:07:09
можно импортировать стили из стилей с косой чертой
01:07:13
и мы можем сразу принять все
01:07:16
реквизит, который мы передали, например, заголовок
01:07:20
обработать щелчок
01:07:22
и стили отдыха
01:07:26
и мы можем ими воспользоваться
01:07:28
мы собираемся вернуть простую кнопку
01:07:31
компонент
01:07:33
кнопка будет иметь тип равный
01:07:36
застегивать
01:07:38
у него будет имя класса, равное
01:07:41
строка шаблона, в которой будет написано
01:07:44
Styles.btn, а также остальные стили
01:07:49
и, наконец, мы собираемся дать этому возможность
01:07:51
щелкните равно, чтобы обработать щелчок и давайте
01:07:54
передайте заголовок, как только мы это сделаем
01:07:57
и сохраните, вы увидите кнопку регистрации
01:08:00
прямо здесь и сейчас кажется, что мы отдыхаем
01:08:03
стили не применяются, потому что мы
01:08:06
не вижу этого верхнего края, так что пойдем
01:08:08
вернуться домой
01:08:09
и остальные стили выглядят так, как будто я набрал rest
01:08:13
напишите вот это должно было быть
01:08:15
остальные стили, и вот, теперь у нас есть
01:08:19
красивая домашняя страница с вводом и
01:08:22
кнопка регистрации, но, конечно, мы
01:08:25
просто погружаемся в действие, как сейчас
01:08:27
чтобы реализовать клик по дескриптору для нашего
01:08:30
кнопку регистрации, чтобы фактически зарегистрировать наш
01:08:34
пользователь в том, что дамы и господа
01:08:37
будет нашим первым взаимодействием с умным
01:08:40
контракт сегодня я показал вам, как
01:08:42
установил приложение смарт-контракта и развернул
01:08:45
Я показал вам, как создать более высокий порядок
01:08:46
компоненты и инициализировать этот замечательный
01:08:49
приложение, но теперь мы на самом деле
01:08:51
взаимодействуя со смарт-контрактом, мы
01:08:54
можем настроить себя на успех,
01:08:57
создание новой функции щелчка по дескриптору
01:08:59
константный дескриптор щелчка
01:09:01
равно
01:09:03
асинхронная функция, подобная этой, и теперь, наконец,
01:09:07
конечно, мы можем вызвать его, когда нажмем
01:09:10
кнопка, чтобы мы могли передать дескриптор
01:09:12
щелкнуть
01:09:13
Прямо здесь
01:09:15
феноменально, давай сделаем наш первый
01:09:17
взаимодействие со смарт-контрактом для
01:09:20
начните взаимодействовать с нашим умным
01:09:22
контракт мы собираемся создать попробовать и
01:09:25
catch блок, потому что иногда
01:09:28
запросы, которые мы пытаемся сделать спереди
01:09:29
конец не будет успешным, поэтому мы
01:09:32
должны правильно отловить эти ошибки для
01:09:36
теперь давайте просто предупредим об ошибке правильно
01:09:38
здесь и позже мы собираемся создать
01:09:40
правильная обработка ошибок в модели
01:09:43
это выскочит и скажет: «Эй, ты»
01:09:46
есть ошибка, но что более важно
01:09:47
что произойдет, если мы
01:09:50
успешным, поэтому прямо здесь мы можем создать
01:09:53
позвонить по новому контракту, сказав «жду»
01:09:56
Контрактная точка - это игрок, которого мы называем
01:10:00
функция, и мы предоставляем адрес кошелька
01:10:04
в качестве параметра, и откуда я узнал
01:10:07
откуда я узнал, что есть
01:10:10
функция игрока и которую нам нужно передать
01:10:12
адрес кошелька в качестве параметра
01:10:14
наконец-то сейчас самое время, когда мы собираемся
01:10:17
вернуться в нашу сеть 3 стороны дела
01:10:19
мы собираемся открыть наши контракты и
01:10:22
открой авакс gods.soul, здесь мы
01:10:26
собираюсь использовать элемент управления или команду F
01:10:28
и мы собираемся найти игрока
01:10:32
функция, посмотрим, где она объявлена
01:10:35
в данном случае это будет первое
01:10:37
экземпляр его возникновения, и это
01:10:39
будет в строке 66. Итак, давайте объясним
01:10:43
Это функция-плеер, который принимает
01:10:46
параметр типа адреса, который
01:10:49
называется addr, это публичная функция
01:10:52
это означает, что мы можем вызвать его из
01:10:53
снаружи, и он вернет
01:10:56
Логическое значение, поэтому мы это тоже знаем, если слой
01:10:59
информация при доступе к этому конкретному
01:11:02
адрес равен нулю, это означает, что
01:11:04
игрок по этому адресу не
01:11:06
существуют, поэтому мы собираемся вернуть false
01:11:08
иначе мы вернем true
01:11:10
окей, это довольно просто начать с
01:11:13
так что теперь мы можем вернуться, мы знаем, что это
01:11:16
функция возвращает логическое значение, поэтому мы
01:11:18
могу сказать константа
01:11:20
игрок существует равен весу
01:11:24
Контракт Дот - отличный игрок, и я
01:11:27
собираюсь сделать это немного больше, так что
01:11:29
все умещается в одну строку
01:11:31
и мы можем свернуть и это там
01:11:34
мы идем, и теперь у нас есть переменная, которая
01:11:37
сообщает нам, если игрок под этим
01:11:39
адрес уже создал игрока
01:11:42
аккаунт, чтобы мы могли сказать, нет ли игрока
01:11:45
существует
01:11:46
в этом случае мы можем вызвать новую функцию
01:11:49
в этом случае второй пилот GitHub заполняется автоматически
01:11:52
это для меня, но давай напишем это еще раз
01:11:54
время, я подожду
01:11:56
контрактный игрок с регистрацией точек
01:12:00
мы собираемся передать имя игрока
01:12:02
это имя игрока взято отсюда
01:12:04
ввод, который мы создали прямо здесь, давайте
01:12:07
посмотрим, что еще нам нужно передать
01:12:09
функция, так что еще раз мы собираемся
01:12:11
вернемся к контракту и мы поедем
01:12:13
для поиска зарегистрированного игрока
01:12:16
строка 150 принимает пару
01:12:19
различные параметры, свойство, называемое
01:12:22
имя, а также свойство под названием game
01:12:25
имя токена, так что давайте передадим и его в
01:12:28
в этом случае игровой жетон может быть одинаковым
01:12:30
в качестве имени игрока это совершенно нормально и
01:12:33
мы можем вернуться к смарт-контракту и
01:12:35
сначала изучите, что делает эта функция
01:12:38
все, когда видишь, требует солидности
01:12:41
это своего рода проверка, заявление, которое
01:12:43
может выбросить нас из вызова функции, поэтому
01:12:46
в этом случае мы хотим потребовать, чтобы
01:12:48
игрок еще не зарегистрирован, и мы
01:12:51
можно сделать это, вызвав функцию, которую мы
01:12:53
видел как раз перед функцией is player
01:12:56
так что прямо здесь мы говорим, что если нет, то
01:12:59
сообщение игрока, что отправитель означает
01:13:01
тот, кто пытается позвонить, тогда
01:13:04
мы уже собираемся сказать игрок
01:13:06
зарегистрированный
01:13:07
если это не так, мы можем продолжить
01:13:09
с функцией, и здесь мы
01:13:11
собираюсь дать ему идентификатор подчеркивания, где
01:13:13
мы собираемся дать ему идентификатор, равный
01:13:15
текущее количество игроков
01:13:17
затем мы собираемся подтолкнуть игрока к
01:13:20
массив игрока, создав экземпляр
01:13:22
игрока с адресом игрока a
01:13:26
имя, а затем значения 10 25 и
01:13:29
ложь, что это за значения, давайте
01:13:32
Control или Command нажмите на плеер и
01:13:35
здесь мы видим, что это
01:13:36
мана и здоровье игрока, а также
01:13:40
Логическая переменная, которая говорит, мы
01:13:42
сейчас в бою, поэтому возвращаюсь, Мана
01:13:45
10, здоровье 25 и тогда нас нет
01:13:49
сейчас в бою, как только мы это нажмем
01:13:51
плеер, который мы собираемся просто создать
01:13:53
отображение информации об игроке, и мы собираемся
01:13:55
также автоматически создать случайную игру
01:13:57
жетон и, самое главное, мы собираемся
01:14:01
генерировать событие нового игрока, которое является наиболее
01:14:05
важная часть этого регистра игрока
01:14:07
функция, потому что мы сможем слушать
01:14:09
к событию нового игрока на интерфейсе
01:14:11
и тогда мы сможем получить его и
01:14:14
затем сделай что-нибудь на основе этого события
01:14:16
теперь идеально, когда мы знаем, что поехали
01:14:19
вернемся домой и давай закончим это
01:14:21
функция
01:14:22
конечно, нам нужно что-то показать
01:14:24
пользователь во время работы этой функции
01:14:26
выполнено, так что сейчас, возможно, лучшее время
01:14:28
для создания наших оповещений как об ошибках, так и
01:14:32
за успешные сообщения, так что давайте вернемся
01:14:35
в наш индекс, наш контекст и право
01:14:38
здесь давайте создадим новое состояние использования
01:14:41
это состояние использования будет называться
01:14:44
показать оповещение
01:14:46
а также установить оповещение о показе и в начале
01:14:49
это будет объект, который собирается
01:14:52
иметь статус, равный ложному значению
01:14:55
в настоящее время он не показывает тип, равный
01:14:58
информация, а также сообщение, равное
01:15:02
пустая строка, теперь мы будем прокручивать
01:15:04
вниз, и мы собираемся создать еще один
01:15:07
использовать эффект
01:15:08
так скажем, использовать эффект
01:15:10
на этот раз работает функция обратного вызова
01:15:13
иметь что-то в зависимости
01:15:15
массив означает, что он будет меняться в зависимости от
01:15:18
по одному параметру, и этот параметр
01:15:20
здесь будет шоу Alert, мы можем
01:15:23
проверьте, показывать ли оповещение
01:15:27
статус точки вопросительного знака
01:15:29
поэтому, если статус в настоящее время верен
01:15:32
это означает, что отображается предупреждение, тогда мы
01:15:34
хочу создать новый таймер, сказав
01:15:37
constimer равен установленному таймауту
01:15:41
это будет равно обратному вызову
01:15:43
функция, и мы хотим установить show
01:15:46
тревога
01:15:48
быть равным статусу false
01:15:51
введите информацию
01:15:53
и сообщение представляет собой пустую строку, означающую
01:15:57
мы отменяем это, и это произойдет
01:16:00
произойдет в течение пяти секунд, так что прямо здесь
01:16:03
чтобы выключить таймер или закрыть
01:16:05
выключи таймаут можно сказать 5000. и что
01:16:10
это означает, что мы собираемся показать
01:16:12
предупреждение, конечно, но мы хотим его закрыть
01:16:15
через пять секунд, поэтому мы
01:16:17
использование таймера в реакции, когда вы используете
01:16:20
таймер, который вы также хотите вернуть
01:16:23
а затем вы хотите очистить тайм-аут
01:16:25
мимо таймера это всегда хорошо
01:16:28
чтобы очистить все таймеры, когда вы
01:16:30
установка их внутри использования дает отличный эффект
01:16:33
теперь, когда у нас есть оповещение о показе и настроено
01:16:35
показать предупреждение, мы можем передать эти значения
01:16:38
прямо в нашем контексте это будет
01:16:41
показать оповещение
01:16:42
и установите оповещение о показе, что означает, что мы
01:16:46
можем использовать их внутри нашего дома
01:16:48
компонент прямо сейчас, просто получив
01:16:50
их сверху, в данном случае мы
01:16:52
понадобится только установленное оповещение о показе
01:16:56
и мы собираемся установить это прямо здесь
01:16:58
после того, как наше ожидание закончится, мы прямо здесь
01:17:02
можно сказать установить оповещение о показе
01:17:05
мы собираемся передать объект
01:17:07
давайте передадим статус true, как мы это делаем
01:17:10
хочу показать это, давайте передадим тип
01:17:12
равно информации, потому что у нас еще нет
01:17:16
зарегистрировал игрока, мы просто
01:17:17
регистрируем его, поэтому хотим показать некоторые
01:17:19
информация и пока не успех
01:17:21
сообщение
01:17:22
и, наконец, давайте также предоставим сообщение
01:17:25
это будет что-то вроде
01:17:28
строка шаблона
01:17:30
имя игрока
01:17:32
нас вызывают, мы идем
01:17:35
теперь это отлично подходит для сообщений об ошибках, которые я
01:17:40
были некоторые проблемы с этой ошибкой
01:17:42
сообщения будут приходить странные
01:17:43
формате, и нам нужно проанализировать их перед
01:17:46
показываю их на экране
01:17:48
так что давайте попробуем, давайте попробуем
01:17:50
я думаю, намеренно дошёл до ошибки
01:17:53
мы сможем добиться этого
01:17:55
вводим имя, например test, прямо здесь
01:17:57
нажав зарегистрироваться
01:18:00
и начнем контракт, точка — игрок
01:18:03
не является функцией, поэтому в этом случае мы получаем
01:18:06
ошибка, которой я не ожидал
01:18:09
вот здесь написано, что нет
01:18:11
функция игрока по нашему контракту, право
01:18:14
вот так давай перезагрузим экран
01:18:16
давай попробуем еще раз и да, все равно
01:18:19
то же самое, так что давайте отладим это, я
01:18:22
собираюсь добавить оператор console.log правильно
01:18:25
вот и я попробую консольно логировать
01:18:28
контракт, чтобы проверить, действительно ли он существует
01:18:30
Я собираюсь открыть элемент проверки
01:18:33
и я положу это внизу, чтобы мы
01:18:36
может лучше это увидеть
01:18:38
Я удалю это и перезагрузлю страницу
01:18:40
кажется, мы уже получаем
01:18:42
ошибка прямо здесь, и если мы продолжим
01:18:45
тестирование
01:18:46
да, все то же самое, новый провайдер
01:18:49
точка-подписчик не является функцией, и это
01:18:52
происходит внутри умного набора
01:18:54
контракт и поставщик, так что давайте вернемся
01:18:57
в наш индекс и давайте найдем
01:19:00
установить смарт-контракт и обеспечить их использование
01:19:02
эффект в данном случае я допустил опечатку
01:19:05
здесь вместо подписывающего лица нам нужно поставить
01:19:07
получи подпись, это будет хорошо
01:19:10
давай сохраним это, ладно, мы все еще получим это
01:19:13
ошибка, но теперь, если я наберу тест и нажму
01:19:17
окей, поехали, теперь у нас будет другое
01:19:19
ошибка прямо здесь, и это хорошо
01:19:22
другая ошибка всегда означает, что вы
01:19:23
сделал что-то
01:19:24
пишет, что резольвер или адрес не являются
01:19:27
настроено для имени аргумента имени ens
01:19:30
значение недопустимый аргумент
01:19:32
и в консоли мы получили
01:19:35
контракт, и этот контракт, кажется, имеет
01:19:38
все функции, которые мы можем вызвать одну
01:19:40
из них должен быть игрок, и мы можем
01:19:43
посмотрим, что оно там, давай тоже проверим
01:19:46
нашу первоначальную функцию прямо здесь
01:19:48
обновить текущий адрес кошелька
01:19:53
window.ethereum.request и прямо здесь я
01:19:56
метод с ошибкой, вот почему он
01:19:58
не удалось запросить учетные записи, давайте просто
01:20:00
продолжайте и переключите это на метод
01:20:02
перезагрузи и вроде все отлично
01:20:05
так что теперь давайте попробуем, давайте попробуем
01:20:08
введите имя игрока клик-тест
01:20:11
и снова мы хотим протестировать
01:20:14
отказ прямо здесь, мы хотим проверить
01:20:16
ошибки, поэтому я нажму «Отклонить»
01:20:18
и мы получаем объектный объект как
01:20:21
ошибка
01:20:22
и как видите мы получаем код 4001 и
01:20:26
есть сообщение, что пользователь отклонил
01:20:29
ошибка, а также у нас есть исходные данные и
01:20:33
исходный код есть сообщение, которое мы
01:20:35
кажется, хочу извлечь это сообщение
01:20:38
довольно просто, поэтому мы можем это сделать
01:20:39
вручную, если мы вернемся домой и направо
01:20:43
здесь мы можем использовать тот же набор оповещений о показе
01:20:47
мы можем это принять, и в этом случае статус
01:20:50
будет истинным типом будет
01:20:52
ошибка, а затем мы можем поместить сообщение в
01:20:56
быть равными, чтобы мы могли сделать, что это такое
01:20:59
данные об ошибке или нет, просто error.message
01:21:03
так вот здесь ошибка
01:21:07
Точечное сообщение отлично, теперь мы в порядке
01:21:11
установка оповещений прямо здесь, но мы
01:21:14
еще нет компонента, который бы
01:21:16
покажи их, чтобы это было наше
01:21:18
следующее задание, давайте удалим этот журнал консоли
01:21:21
и давайте создадим новый компонент внутри
01:21:24
папки компонентов, назовем это
01:21:27
alert Dot jsx внутри этого оповещения мы
01:21:31
можем запустить refce и импортировать
01:21:35
значок оповещения
01:21:38
это исходит от
01:21:40
ресурсы, которые мы собираемся также импортировать, стили
01:21:45
исходит из точечной косой черты. Стилизует наше оповещение.
01:21:50
собирается принять две вещи: тип
01:21:53
информация об успехе или ошибке и, конечно же,
01:21:56
он также примет сообщение
01:21:59
наше оповещение будет элементом div, который
01:22:02
имя класса будет равно текущему
01:22:05
терпите, это будет шаблон
01:22:07
строка с контейнером предупреждений о точках Styles
01:22:12
а также Styles Dad Flex Center
01:22:17
внутри этого div у нас также будет
01:22:20
еще один div, у которого будет класс
01:22:23
имя снова равно строке шаблона
01:22:26
отключена оболочка предупреждения о точках стилей
01:22:31
а также стили
01:22:33
а затем внутри квадратных скобок введите
01:22:36
потому что мы хотим показать старт для
01:22:38
Информация об успехе и ошибке в зависимости от
01:22:41
какой это, и наконец мы можем
01:22:44
отобразить значок оповещения, к которому мы можем
01:22:47
передать тип, равный типу и рядом с
01:22:51
это мы сможем передать сообщение
01:22:53
это будет наша тревога
01:22:56
компонент, теперь мы можем его правильно экспортировать
01:22:58
здесь из наших компонентов
01:23:01
это будет настороже
01:23:03
а также внизу
01:23:07
наконец-то мы собираемся вернуться в наш
01:23:09
страница hoc, потому что мы собираемся использовать
01:23:12
это во всем нашем приложении и
01:23:14
сюда мы хотим импортировать наше оповещение
01:23:17
внутри здесь мы собираемся использовать
01:23:19
что-то из контекста, чтобы мы могли сказать
01:23:21
Импортировать
01:23:22
использовать глобальный контекст
01:23:26
из контекста точечной косой черты
01:23:29
мы можем получить что-то от этого прямо здесь
01:23:31
константа показать оповещение
01:23:34
равнозначно использованию глобального контекста и на основе
01:23:39
вот здесь, под внутренним
01:23:41
открывая div, мы можем сказать
01:23:44
если показать оповещение
01:23:46
вопросительный знак точка статус: Труди
01:23:49
смысл просто существует, тогда мы хотим показать
01:23:52
самозакрывающийся компонент оповещения
01:23:55
мы собираемся передать тип
01:23:58
равно показу типа DOT оповещения
01:24:02
а также передать сообщение, равное show
01:24:06
предупреждающее точечное сообщение
01:24:08
вот и все, если мы перезагрузим это
01:24:11
он скажет, что мы должны импортировать
01:24:13
компонент оповещений, так что давайте сделаем это
01:24:16
это будет предупреждение об импорте из точки
01:24:19
косая черта, и вот, кажется, пошло
01:24:22
уже показывается, хотя нет
01:24:25
сообщение
01:24:26
так что теперь давайте вернемся
01:24:29
пойдем обратно к нам домой
01:24:32
страница или, скорее, контекст нашей
01:24:34
приложение
01:24:35
статус изначально ложный, так что
01:24:38
должно быть хорошо
01:24:40
и давайте проверим, установили ли мы его на
01:24:42
Правда где-то здесь это тоже ложь
01:24:44
поэтому оно не должно отображаться, если мы перезагрузим
01:24:47
да, кажется, оно все еще там
01:24:50
что, если мы попробуем еще раз инициировать это
01:24:53
ошибка, поэтому я нажму прямо здесь
01:24:55
и я собираюсь нажать «Отклонить», и мы
01:24:58
идем, мы получаем ошибку и уведомление
01:25:00
вроде бы здесь есть хотя бы иконка, но
01:25:04
это едва видно
01:25:05
так что у нас определенно что-то есть
01:25:07
исправить это предупреждение, поскольку это не так
01:25:10
будучи закрытым, пойдем туда, где мы
01:25:12
инициализировал его, который будет в
01:25:14
вверху, и похоже, что я установил статус
01:25:17
быть строкой false вместо
01:25:19
Логическое значение, если мы исправим это, поехали
01:25:23
его больше нет, но теперь, если мы попытаемся это проверить
01:25:25
избавьтесь от этой ошибки прямо здесь
01:25:28
нажав «Зарегистрироваться», а затем отклонив
01:25:31
мы еще не видим этого здесь, я имею в виду, я вижу
01:25:35
темный значок, но потом это возвращается
01:25:38
прямо здесь, так что, скорее всего, да
01:25:41
Здесь присутствует логическое значение, а также значение false, поэтому мы
01:25:44
просто нужно выразить это как логическое значение, а не как
01:25:46
строка, но да, она все еще не отображается
01:25:49
Стили такие, какими они должны быть, так что давайте вернемся
01:25:52
туда, где мы это называем, то есть прямо здесь
01:25:55
статус верен, похоже, это мой
01:25:58
плохо, это должно было быть логическое значение
01:26:00
ценность и в других местах, и, наконец,
01:26:04
сообщение
01:26:05
Я только что заметил здесь тип для
01:26:07
ошибка должна быть неудачей, так как
01:26:10
вот как я определил это внутри стилей
01:26:13
так что провал прямо здесь, наконец, давай дадим
01:26:16
это последний шанс исправить это сообщение об ошибке
01:26:19
тестовый регистр
01:26:22
Я откажусь от этого, и поехали
01:26:25
хотя сообщение не появляется
01:26:27
вот здесь, похоже, что это не так
01:26:29
получаю сообщение об ошибке Dot, хотя
01:26:32
это здесь, поэтому я сказал, что у меня есть немного
01:26:34
проблемы с тем, как работали ошибки, давайте
01:26:37
попробуй заблокировать ошибку еще раз
01:26:39
время
01:26:41
наряду с записью в консоль ошибки Dot
01:26:44
сообщение, чтобы увидеть, куда оно исчезает
01:26:47
и давайте повторим процесс еще раз
01:26:49
время
01:26:50
как видите, кажется, что это просто
01:26:53
содержит код и ничего больше
01:26:56
там мы не можем получить доступ к этим данным правильно
01:26:58
вот и сейчас мы можем просто
01:27:01
прямо здесь создайте наше собственное сообщение, говорящее
01:27:05
что-то пошло не так, а потом позже
01:27:07
мы собираемся углубиться в то, как
01:27:09
обработать ошибки сейчас, если мы проверим это
01:27:12
в последний раз я собираюсь зарегистрироваться
01:27:15
и я нажму «Отклонить»
01:27:18
и как видите у нас получается красивый
01:27:20
сообщение об ошибке, говорящее, что что-то пошло
01:27:22
неправильно, это пройдет через пять
01:27:25
секунды идеальны, сейчас самое время, когда мы
01:27:28
на самом деле проверьте, является ли успешный вызов
01:27:31
работаем, поэтому хотим успешно
01:27:33
зарегистрируем игрока, чтобы сделать это, давайте добавим
01:27:37
настоящее имя, в этом случае я сделаю это
01:27:39
JS Mastery и я собираюсь щелкнуть
01:27:42
зарегистрируйся и наконец я нажму
01:27:44
утвердить
01:27:46
мы видим, что здесь вызывается JS Mastery
01:27:49
процесс обычно занимает пару
01:27:51
секунды
01:27:52
и на данный момент нет возможности
01:27:55
нам, чтобы проверить, был ли создан наш пользователь
01:27:58
вот где события вступают в игру
01:28:02
Потому что когда мы регистрируем игрока, мы
01:28:06
выдаем событие нового игрока, поэтому у нас есть
01:28:10
вернуться к нашему контексту, и теперь мы
01:28:13
придется использовать прослушивание событий
01:28:15
иметь возможность слушать, что представляют собой наши мероприятия
01:28:18
говоря нам, чтобы мы начали работать с нашими
01:28:21
события мы собираемся создать новый файл
01:28:23
внутри контекстной папки давайте позвоним
01:28:27
он создает прослушиватели событий.js
01:28:32
внутри здесь мы можем импортировать
01:28:35
эфиры, исходящие из эфиров, мы также можем
01:28:39
импортировать API, полученный с помощью точечной косой черты
01:28:44
контракт, это будет все, что мы
01:28:46
нужно на данный момент, и мы можем создать специальный
01:28:49
функция, называемая добавлением нового события, это
01:28:53
функция собирается принять что-то
01:28:55
известный как фильтр событий
01:28:58
провайдер и обратный вызов или CB для
01:29:02
короче, и что мы хотим с этим сделать?
01:29:04
ну, мы хотим прежде всего сказать
01:29:07
поставщик точка удаляет прослушиватель, и мы хотим
01:29:11
передать в фильтр событий
01:29:13
эта линия гарантирует, что не
01:29:16
иметь несколько слушателей на одном и том же
01:29:20
событие одновременно, поэтому прежде чем мы добавим
01:29:24
новый, который мы собираемся удалить
01:29:25
предыдущие, то как только мы удалим
01:29:28
предыдущие мы можем назвать провайдером
01:29:30
расставить точку
01:29:32
фильтр событий
01:29:33
мы собираемся получить журналы прямо здесь
01:29:36
внутри функции обратного вызова мы хотим
01:29:38
чтобы проанализировать эти журналы, сказав const
01:29:40
журнал синтаксического анализа равен скобкам new
01:29:45
интерфейс ethers dot utils dot
01:29:49
с большой буквы и переходим в АБИ
01:29:53
зайти внутрь обеих круглых скобок, а затем
01:29:56
введите журнал синтаксического анализа, и мы, конечно, хотим
01:29:59
передать логи, это встроенная функция
01:30:01
функциональность эфиров, наконец, мы хотим
01:30:04
передавать логи как первый и единственный
01:30:06
параметр нашей функции обратного вызова I
01:30:09
знаю, это было грязно, но поверь мне, это
01:30:11
очень скоро обретет смысл, как только мы
01:30:14
начните создавать все эти события
01:30:15
слушатели, так что давайте сделаем это, давайте
01:30:18
создать новую функцию экспорта константы
01:30:22
создать прослушиватели событий
01:30:26
это будет функция, которая будет работать
01:30:28
чтобы позже принять несколько параметров для
01:30:31
теперь нам не нужно ничего принимать
01:30:34
и первое, что мы собираемся сделать, это
01:30:36
мы собираемся вызвать здесь const
01:30:38
фильтр событий нового игрока
01:30:43
мы собираемся установить это равным
01:30:44
контракт точечные фильтры точка новый игрок так
01:30:50
когда вы создаете договор и указываете
01:30:52
событие для этого контракта, такое как
01:30:55
событие для нового игрока, которым ты сразу же станешь
01:30:58
возможность фильтровать звонки для этого
01:31:01
контракт, и это именно то, что мы
01:31:03
делаю прямо здесь и сейчас, это не пойдет
01:31:05
работать сразу же, потому что мы
01:31:07
у вас еще нет доступа к
01:31:09
контракт в этом файле, но давайте продолжим
01:31:12
с логикой, а затем мы сможем импортировать
01:31:13
контракт через реквизит
01:31:16
и теперь, когда у нас есть фильтр, мы можем
01:31:19
вызовите функцию добавления нового события, которую мы
01:31:22
создано выше
01:31:24
и мы собираемся передать новый
01:31:26
фильтр событий игрока
01:31:30
вот и все, наконец, нам нужно пройти
01:31:33
провайдер в качестве второго реквизита, а затем мы
01:31:36
иметь функцию обратного вызова внутри
01:31:38
эта функция обратного вызова, помните, что мы
01:31:40
передача журналов синтаксического анализа, чтобы мы могли
01:31:43
деструктурируем это, и тогда мы получим дуги или
01:31:46
аргументы, короче
01:31:48
наконец-то мы можем вызвать журнал
01:31:51
новый игрок
01:31:53
созданный
01:31:55
а затем мы также можем консольно записать
01:31:57
дуги, пока мы здесь, почему бы тоже не показать
01:32:00
уведомление или предупреждение, чтобы мы могли сказать
01:32:03
если
01:32:04
адрес кошелька
01:32:06
втрое равно
01:32:09
В этом случае мы можем установить владельца точки дуги
01:32:13
показать оповещение
01:32:16
мы собираемся сделать статус правдивых, мы
01:32:19
собираюсь добиться определенного успеха
01:32:22
и мы можем сделать сообщение
01:32:24
равно
01:32:26
игрок был
01:32:29
успешно
01:32:31
зарегистрированный
01:32:33
начнем, и теперь мы добавили новое событие
01:32:36
слушателей, но, как вы можете заметить, наши
01:32:39
контракт не определен, наш провайдер
01:32:42
не определен адрес нашего кошелька не
01:32:45
определено, потому что эта функция не
01:32:47
в нашем контексте нам еще предстоит назвать это
01:32:50
вот и давайте сделаем это над нашим
01:32:53
использовать эффект для оповещений, которые мы собираемся
01:32:55
создать новый эффект использования
01:32:59
эффект от использования будет иметь
01:33:01
функция обратного вызова, и сейчас мы
01:33:03
собираюсь оставить массив зависимостей
01:33:05
пустой
01:33:06
здесь мы проверим, есть ли
01:33:08
контракт существует, и в этом случае мы
01:33:12
собираюсь вызвать прослушиватели событий создания
01:33:15
функция
01:33:16
также вам нужно обязательно импортировать его
01:33:18
вверху импортируйте создание прослушивателей событий
01:33:21
из создания прослушивателей событий я просто
01:33:24
заметил, что у меня здесь опечатка, так что
01:33:26
это будет событие прямо здесь
01:33:29
вот и все
01:33:31
а также обновить его здесь
01:33:34
теперь мы можем вызвать эту функцию и внутри
01:33:37
объекта мы можем предоставить все
01:33:39
реквизит, который нам нужно использовать внутри
01:33:41
там будет один из реквизитов
01:33:43
навигация, которую мы собираемся пройти
01:33:45
контракт мы собираемся также передать
01:33:47
провайдера, мы также можем передать кошелек
01:33:51
адрес
01:33:52
давайте также передадим установленное оповещение о показе
01:33:57
и на этом пока всё
01:33:59
теперь, если мы вернемся, мы получим все
01:34:02
эти значения через реквизит, так что давайте сделаем
01:34:04
используя их, мы попадаем внутрь
01:34:07
объект, который вам нужно деструктурировать, перемещаться
01:34:11
договор
01:34:13
поставщик
01:34:15
адрес кошелька
01:34:17
и установите оповещение о показе
01:34:20
здорово, это должно сделать наше мероприятие
01:34:23
слушатели работают
01:34:25
так что, надеюсь, мы сможем
01:34:27
переинициализируем наш плеер точнее
01:34:29
если они скажут, что мы не сможем
01:34:31
инициализировать нового игрока, потому что под
01:34:33
этот адрес, который мы зарегистрировали
01:34:35
вот здесь мы уже создали плеер
01:34:38
раньше, когда мы этого не слушали
01:34:40
но все же оно было создано, так что давайте дадим
01:34:43
это еще одна попытка, я собираюсь
01:34:46
перезагрузить страницу
01:34:47
введите мастерство JS
01:34:50
и я собираюсь нажать кнопку «Зарегистрироваться», но как
01:34:52
ты видишь, что ничего не происходит
01:34:55
потому что мы уже дома
01:34:57
проверка, существует ли плеер прямо здесь
01:34:59
и похоже, что это так, но это не так
01:35:02
позволяя нам делать то, что нам нужно, и
01:35:06
ничего страшного, потому что позже нам понадобится
01:35:08
в любом случае протестировать с несколькими игроками, так что
01:35:10
что мы можем сделать, это зайти в ваш основной кошелек
01:35:12
нажмите прямо здесь под своим именем и
01:35:15
нажмите добавить аккаунт
01:35:17
в данном случае это даст мне
01:35:19
пара уведомлений
01:35:21
я закрою кое-что
01:35:25
и я собираюсь улучшить свой аккаунт
01:35:29
теперь мы можем вернуться к нашему первому
01:35:31
счет
01:35:32
и мы можем нажать кнопку «плюс» на
01:35:35
Нижний правый
01:35:36
давайте отправим немного средств, в этом случае я
01:35:39
собираюсь выбрать свою учетную запись я собираюсь
01:35:41
выберите второй аккаунт
01:35:42
и давайте отправим его около 0,4
01:35:46
авакса должно быть достаточно
01:35:48
и давайте нажмем «Далее» и отправим сейчас
01:35:52
вам нужен Avax, чтобы иметь возможность делать что-либо
01:35:54
транзакции и зарегистрировать пользователя как
01:35:57
хорошо
01:35:58
так что перейдем ко счету 2 и сразу
01:36:01
нам будет предложено подключиться к кошельку, чтобы
01:36:04
сайт, который мы хотим сделать
01:36:06
теперь, если мы перезагрузим страницу, мы должны быть
01:36:09
можно создать нового игрока, так что давайте попробуем
01:36:12
в моем случае со счетом 2 и я собираюсь
01:36:14
чтобы нажать «Зарегистрироваться», мы получим
01:36:17
уведомление, и мы можем нажать «Одобрить»
01:36:20
но мы все равно этого не поняли
01:36:22
уведомление, хотя мы знаем, что
01:36:24
плеер создан, потому что теперь мы
01:36:26
не могу нажать кнопку регистрации еще раз
01:36:28
скорее всего, причина события
01:36:31
прослушиватель не сработал, он снова внутри
01:36:34
эффект использования, который мы забыли передать
01:36:36
контракт как массив зависимостей здесь и
01:36:40
возможно, что в то время как
01:36:42
мы пытаемся выполнить это, пока мы
01:36:44
пытаясь настроить прослушиватели событий, мы
01:36:46
здесь не было контракта
01:36:48
существует, потому что его только что установили
01:36:51
в состояние, поэтому как только мы добавим это и
01:36:54
сохранить, вы можете заметить, что мы получаем много
01:36:57
Ошибки, говорящие, что навигация не
01:36:59
определенный
01:37:01
навигация — это функция, возникшая в результате использования
01:37:03
перемещаться
01:37:05
чтобы мы могли определить его вверху
01:37:07
скажем, константная навигация равна использованию
01:37:11
перемещайтесь и называйте это как крючок
01:37:15
это решит проблему, и я думаю
01:37:17
что в следующий раз мы создадим новый
01:37:19
игрок, мы получим уведомление. Мы
01:37:22
не буду проверять это сейчас, потому что мы
01:37:24
придется создать еще одну учетную запись
01:37:26
на данный момент мы довольны и этим
01:37:29
конечно, нам придется создать много игроков
01:37:30
пока мы тестируем полную функциональность игры
01:37:33
Итак, теперь, когда у нас есть игрок, что это такое
01:37:36
Следующее, что нам нужно сделать хорошо
01:37:39
игроку нечего делать
01:37:41
домашняя страница больше нам не нужна
01:37:43
перенаправить их на страницу создания битвы
01:37:46
так что давай сделаем это, давай вернемся к
01:37:49
дома в последний раз и прямо здесь
01:37:52
под ручкой нажмите, мы добавим
01:37:55
еще один эффект от использования
01:37:57
использовать эффект
01:37:58
это произойдет, когда
01:38:01
контракт меняется, так что мы здесь
01:38:03
собираюсь добавить контракт в качестве зависимости
01:38:05
массив, а затем мы собираемся создать
01:38:08
новая функция проверки константы для игрока
01:38:11
токен, и это будет
01:38:14
асинхронная функция
01:38:16
внутри здесь мы сначала хотим проверить, есть ли
01:38:19
игрок существует, поэтому мы и собираемся
01:38:22
для вызова той же функции, которую мы вызвали
01:38:23
прямо здесь существует константный игрок, равный
01:38:26
к весовому контракту точка - игрок
01:38:30
и мы можем вставить это сюда
01:38:32
затем мы хотим проверить, является ли токен игрока
01:38:35
существует и помните, что токен игрока есть
01:38:38
создаются одновременно с тем, как мы
01:38:41
регистрируют их, чтобы мы могли проверить
01:38:43
это, сказав const
01:38:45
жетон игрока существует
01:38:49
равно весовому контракту
01:38:53
токен игрока и мы передаем его в кошелек
01:38:56
адрес, который является еще одной функцией
01:38:58
внутри нашего смарт-контракта
01:39:01
наконец, если оба игрока существуют и
01:39:06
токен игрока существует, то мы хотим использовать
01:39:11
функция навигации
01:39:13
перейти к косой черте, создать битву
01:39:16
давай сохраним это
01:39:18
в этом случае похоже, что эффект использования
01:39:20
не определено, поэтому вверху мы можем импортировать
01:39:23
использовать эффект
01:39:25
сохрани это
01:39:26
вот и мы вернулись
01:39:29
и я перезагрузлю страницу
01:39:32
мне не казалось, что мы были
01:39:34
перенаправлено, поэтому мы можем
01:39:37
отменить этот журнал
01:39:39
игрок существует, а также токен игрока
01:39:43
существует, но, конечно, этого не происходит
01:39:45
потому что мы никогда не вызывали чек на
01:39:47
функция токена игрока, давайте сделаем это
01:39:50
прямо здесь, если контракт существует, то
01:39:54
мы хотим вызвать чек для игрока
01:39:58
функция токена, вот и все, вот это
01:40:02
мне хорошо выглядит
01:40:03
и мы получаем, что игрок существует, верно и
01:40:07
токен игрока существует, это правда, что
01:40:09
именно так, как мы ожидали, но похоже
01:40:12
мы забыли определить навигацию, поэтому еще раз
01:40:14
время наверху, мы можем импортировать
01:40:18
используйте навигацию
01:40:20
исходит от реагирующего маршрутизатора Dom
01:40:24
мы можем определить это прямо здесь
01:40:26
константа навигации равна использованию навигации
01:40:30
назови это крючком и теперь оно у нас есть
01:40:33
давайте перезагрузим страницу
01:40:35
и вот привет от создания битвы
01:40:40
это не так уж и здорово, а теперь классная вещь
01:40:43
если вы попытаетесь вернуться вручную к
01:40:46
косая черта
01:40:48
он перенаправит вас обратно на
01:40:51
создай битву, потому что у тебя есть
01:40:53
подключили свою учетную запись, а также у вас есть
01:40:56
феноменальный игрок, что означает
01:41:00
что мы готовы к следующему этапу
01:41:02
наше приложение, и это позволяет
01:41:05
игрок для создания битвы
01:41:07
для этого вы можете удерживать Ctrl или команду
01:41:10
а затем нажмите w пару раз, чтобы сделать
01:41:13
уверен, что вы находитесь внутри своего Visual
01:41:15
Код студии, чтобы закрыть все вкладки, если
01:41:18
вы нажимаете Ctrl W в Chrome, что
01:41:20
закрыл бы вкладку Chrome, чтобы
01:41:22
извини, что так случилось, сказал, что мы
01:41:25
готовы продолжить работу над нашим приложением
01:41:27
и мы продолжим прямо внутри
01:41:30
создать битву, чтобы теперь мы могли войти внутрь
01:41:33
страниц, и мы можем зайти в create
01:41:37
битва, теперь ты видишь, насколько это просто
01:41:39
что мы используем страницу более высокого порядка
01:41:41
компонент
01:41:43
но ты заметишь, что мы тоже
01:41:45
создал еще парочку многоразовых
01:41:46
компоненты, которые будут
01:41:48
пользовательский ввод и пользовательская кнопка, поэтому
01:41:51
теперь наша работа станет намного проще
01:41:53
с учетом сказанного, давайте начнем работать над
01:41:56
для начала создайте новую страницу битвы
01:41:59
создадим нашу боевую страницу, давайте сначала
01:42:02
импортируйте пару хуков из реакции и
01:42:05
они будут использовать состояние
01:42:08
а также использовать хакс с эффектами, мы также можем
01:42:13
импортировать печально известную
01:42:15
используйте навигацию, о которой мы забыли
01:42:18
пару раз с роутера React Dash
01:42:21
Дэш Дом
01:42:22
мы также собираемся импортировать стили
01:42:26
исходя из стилей точечной косой черты, мы можем
01:42:30
импортируйте глобальный контекст или хук, который мы
01:42:34
созданный для глобального контекста, называемого
01:42:36
использовать глобальный контекст, полученный из точечной косой черты
01:42:40
контекст и поскольку у нас уже есть
01:42:43
пара встроенных компонентов, мы можем
01:42:45
импортируйте пользовательскую кнопку, а также
01:42:49
пользовательский компонент ввода
01:42:51
и давайте инициализируем навигацию
01:42:53
переменная, чтобы мы не забыли, так что это
01:42:56
буду использовать навигацию
01:42:59
большой
01:43:00
наконец, давайте сосредоточимся на стороне jsx
01:43:03
вещи, которые у нас будут пустыми
01:43:05
фрагмент реакции прямо здесь и
01:43:08
тогда внутри у нас будет
01:43:10
div
01:43:11
у этого div будет имя класса
01:43:14
эквивалентен вызову Flex Flex Dash и mb-5
01:43:19
для нижнего поля внутри мы
01:43:22
собираюсь отобразить пользовательский ввод
01:43:24
самозакрывающийся компонент и ниже этого
01:43:27
мы собираемся отобразить пользовательскую кнопку
01:43:30
самозакрывающийся компонент, если мы сохраним это
01:43:33
вы можете видеть, что мы получаем входные данные и
01:43:34
кнопку и давайте добавим все
01:43:37
необходимые реквизиты, такие как этикетка, которая
01:43:40
будет битва, давайте добавим
01:43:42
заполнитель, равный имени битвы
01:43:46
наконец, нам придется добавить значение, но
01:43:50
мы не собираемся инициализировать состояние
01:43:51
за это значение внутри создания битвы
01:43:54
потому что нам понадобится другое место в
01:43:56
другие компоненты, а также то, что мы можем
01:43:59
сделать, мы можем перейти к нашему индексу
01:44:02
контекст и давайте создадим новое состояние использования
01:44:05
поле вверху, поэтому прямо здесь используйте состояние
01:44:10
это будет название и набор битв
01:44:13
название битвы, равное пустой строке в
01:44:16
начало
01:44:17
теперь мы можем передать это значение прямо здесь
01:44:19
через ценность контекстной битвы
01:44:22
имя и установите название битвы
01:44:25
теперь возвращаюсь, чтобы создать битву, которая
01:44:27
собираемся позволить нам получить пару
01:44:29
вещи из контекста
01:44:31
такие вещи, как контракт, чтобы иметь возможность
01:44:34
звонить по контракту, а также сражаться
01:44:37
имя и установите название битвы
01:44:42
это равнозначно использованию глобального контекста и
01:44:46
мы называем это крючком, теперь мы можем добавить
01:44:50
значение пользовательского ввода, равное
01:44:53
название битвы, и мы можем добавить дескриптор
01:44:56
изменение значения равно установленному названию битвы
01:45:01
когда дело доходит до кнопки, мы можем пройти
01:45:04
титул, равный созданию битвы, мы можем
01:45:07
передать щелчок ручки, который будет
01:45:10
быть равным функции щелчка по дескриптору, которую мы
01:45:13
еще не создали, но можем прямо сейчас
01:45:15
константный дескриптор щелчка равен
01:45:19
стрелочная функция
01:45:22
и, наконец, мы можем передать стили отдыха
01:45:26
равно
01:45:27
mt-6, чтобы разделить его на вход, если мы
01:45:31
сохраните это, и вы увидите, насколько это просто
01:45:33
считал, что у нас есть готовые
01:45:35
компоненты и предварительно построенный более высокий порядок
01:45:38
компонент теперь у нас есть домашний компонент
01:45:40
и создайте боевой компонент сейчас, чтобы
01:45:44
мы собираемся пойти еще дальше
01:45:46
добавьте дополнительный тег P под этим div
01:45:50
это скажет
01:45:52
или присоединяйтесь к уже существующим битвам, которые
01:45:57
еще одна из функций нашего приложения
01:45:59
давай стилизуем это
01:46:01
имя класса равно тексту информации о точках стилей
01:46:06
и по клику мы хотим создать
01:46:09
функция обратного вызова, куда мы собираемся
01:46:11
перейдите к косой черте и присоединитесь к Dash
01:46:15
боевой
01:46:16
если мы сохраним это, вы увидите, что теперь мы
01:46:18
есть и это
01:46:20
но если мы нажмем на нее, присоединиться к панели не получится
01:46:22
еще существуют, поэтому давайте создадим новую страницу
01:46:25
называется вступить в бой
01:46:29
.jsx
01:46:30
и мы, конечно, можем запустить Raf Race
01:46:34
и давайте также экспортируем его из нашего индекса
01:46:38
так что это будет здесь и здесь
01:46:40
и мы можем назвать это вступить в бой
01:46:45
наконец, внутри основного мы можем импортировать
01:46:48
вступить в бой
01:46:51
и вместо этого мы можем дублировать маршрут
01:46:54
создать битву, которая будет
01:46:57
вступай в бой и прямо здесь вступай в бой
01:47:02
если мы сохраним это, мы теперь сможем увидеть это соединение
01:47:05
боевой текст, но он еще не просматривается
01:47:08
хорошо, но ты уже знаешь, как это сделать
01:47:11
мгновенно сделаем его намного лучше, мы
01:47:14
просто буду использовать наш более высокий порядок
01:47:16
компонент, поэтому давайте продолжим и импортируем
01:47:19
пара вещей
01:47:20
мы собираемся импортировать предстоящий эффект использования
01:47:24
от реакции
01:47:25
давайте также импортируем
01:47:28
использование навигации
01:47:30
исходит от реагирующего маршрутизатора Dom
01:47:35
давайте также импортируем использование глобального контекста
01:47:39
исходя из контекста
01:47:43
давайте импортируем компонент пользовательской кнопки
01:47:48
а также страница hoc
01:47:53
и это происходит от точечной косой черты
01:47:55
компоненты
01:47:57
и, наконец, давайте импортируем стили
01:47:59
исходя из стилей точечной косой черты
01:48:02
отлично, теперь ты знаешь, что мы можем
01:48:05
просто оберните сообщение о присоединении страницей
01:48:08
hoc, первый параметр - это компонент
01:48:11
сам второй - это заголовок, присоединяйтесь
01:48:15
б б битва
01:48:19
а потом мы создадим еще один
01:48:22
для описания, которое будет присоединяться
01:48:25
уже существующие сражения, и мы также можем
01:48:29
добавьте запятую прямо здесь, если мы сохраним это
01:48:33
и перезагрузка
01:48:35
вот и мы присоединяемся к боевой странице прямо сейчас
01:48:39
готово, и теперь это идеально, если мы нажмем
01:48:42
значок в левом верхнем углу, который будет
01:48:44
перенаправить нас обратно домой, но помните, что мы
01:48:46
иметь мгновенное перенаправление на создание
01:48:49
бой, так что теперь мы можем переключаться между
01:48:51
эти двое сейчас здесь, давай
01:48:54
создать подзаголовок, чтобы показать существующий
01:48:57
сражения назовем это элементом H2
01:49:01
и скажем доступные бои
01:49:06
так
01:49:07
и давайте дадим ему имя класса
01:49:11
равно
01:49:13
Стили объединяют точки над текстом заголовка и сохраняют его.
01:49:18
вот и все доступные бои, а также
01:49:21
внизу давайте добавим тег P, который
01:49:24
будет имя класса
01:49:27
равен информационному тексту с точкой и стилями
01:49:31
и этот тег B собирается сказать или создать
01:49:36
новая битва, которую ждет эта кнопка
01:49:40
перейдите на страницу создания битвы, чтобы
01:49:43
наряду с импортом используйте навигацию, у нас есть
01:49:45
чтобы инициализировать его, минусы навигации равны
01:49:49
использовать навигацию, и мы можем включить ее
01:49:52
щелкнуть
01:49:55
равен функции обратного вызова
01:49:57
где мы переходим к косой черте
01:50:01
создайте Dash Battle и, наконец, мы сможем
01:50:05
теперь переключись между ними, не так ли?
01:50:09
красиво, и вы можете видеть, как просто
01:50:12
это просто из-за того, что мы
01:50:15
создал этот компонент более высокого порядка
01:50:17
красивый
01:50:19
отлично, теперь, конечно, один игрок будет
01:50:22
уметь создать битву и другое
01:50:25
можно будет присоединиться к существующему
01:50:28
битва, поэтому сначала давайте сосредоточимся на
01:50:31
создать боевой смарт-контракт
01:50:33
функционал для этого мы можем закрыть
01:50:36
большую часть файлов и вернитесь к
01:50:38
создайте страницу битвы, там мы создали это
01:50:42
обработать компонент щелчка, чтобы заполнить его
01:50:45
будет нашей следующей задачей, первой
01:50:48
нам нужно сделать это
01:50:50
функция асинхронная, потому что контракт
01:50:52
взаимодействие требует времени, тогда мы хотим
01:50:55
убедитесь, что пользователь действительно заполнил
01:50:58
в некоторых символах, чтобы мы могли сказать, если нет
01:51:01
название битвы
01:51:03
или без обрезки точек в названии боя, тогда мы хотим
01:51:09
чтобы вернуть ноль, мы хотим выйти из
01:51:11
обработать функцию щелчка, иначе мы сможем
01:51:14
открыть блок try и catch
01:51:17
и мы можем подождать прямо здесь
01:51:21
контракт, точка, создай битву, и мы
01:51:25
собираюсь передать название битвы, так что сейчас
01:51:28
возможно, сейчас лучшее время, чтобы прыгнуть прямо
01:51:31
в код смарт-контракта и увидеть
01:51:33
как создать функционал боя
01:51:35
работает, давайте сделаем это, перейдя в web3
01:51:39
контракты и давайте искать создавать
01:51:42
линия боя
01:51:44
218 функция создания битвы, которая принимает
01:51:49
название битвы как первое и единственное
01:51:51
параметр
01:51:52
у нас есть два требования: первое, первое,
01:51:56
все игроки должны быть зарегистрированы, мы
01:51:58
уже сделал это и, во-вторых,
01:52:00
битва будет с таким же названием, должно быть
01:52:02
не существовать, окей, это хорошо, тогда что
01:52:06
мы делаем, мы создаем специальный
01:52:09
боевой хэш, давай погуглим, что это
01:52:12
функция, я собираюсь ее вставить
01:52:14
прямо здесь, и, как вы можете видеть, это
01:52:17
онлайн-хэш-функция, которая будет
01:52:20
генерировать конкретный хеш на основе некоторых
01:52:22
входные данные, которые мы передаем, поэтому, если вы передаете
01:52:25
название битвы, оно будет генерировать
01:52:27
хеш этой строки отлично подходит в этом случае
01:52:30
мы делаем только то, что передаем это
01:52:32
имя, тогда мы создаем новую битву
01:52:35
мы инициализируем его в первую очередь
01:52:38
мы устанавливаем статус битвы как
01:52:40
ожидается, потому что игрок еще не сделал
01:52:42
присоединился к битве, мы предоставляем
01:52:45
уникальный боевой хэш, который мы предоставляем
01:52:47
имя панели и добавляем плеер
01:52:50
адреса это адрес
01:52:53
игрок, который создал битву, а затем
01:52:55
второй игрок, которого мы устанавливаем как
01:52:57
адрес 0 означает, что он не существует
01:53:00
потому что игрок 2 пуст, пока он
01:53:03
присоединиться к битве
01:53:04
тогда мы предоставим ходы здесь, в этом
01:53:07
будет логической переменной has
01:53:10
игрок сделал ход или нет в момент
01:53:12
старт оба игрока не добились своего
01:53:15
движется, поэтому оно равно нулю, и, наконец, у нас есть
01:53:17
адрес победителя в данном случае
01:53:19
он пуст, пока битва не закончится
01:53:23
затем мы получаем идентификатор битвы, которую мы нажимаем
01:53:26
битву в массив битв и
01:53:28
тогда мы вернем все отлично, вот и все
01:53:31
функционал создания боя и
01:53:34
наконец, когда дело доходит до ошибок на данный момент
01:53:37
мы можем просто зарегистрировать ошибку в консоли
01:53:39
пока мы не реализуем лучшую обработку ошибок
01:53:42
теперь, прежде чем мы на самом деле проверим создание
01:53:45
боевая функциональность Я хочу создать
01:53:49
экран ожидания, потому что битвы нет
01:53:52
мгновенно, ты не сразу прыгнешь
01:53:54
на поле боя сначала вам нужно
01:53:57
подождите, пока к вам присоединится другой игрок
01:53:59
вот почему у нас будет особенный
01:54:02
экран игры с весом
01:54:04
так что прямо здесь мы можем создать новое использование
01:54:07
Штат объявил весовую битву и установил
01:54:11
весовая битва, и в начале это
01:54:13
будет установлено значение false
01:54:15
тогда прямо здесь, после того, как мы создадим битву
01:54:18
мы хотим, чтобы битва за вес была верной и
01:54:23
тогда, основываясь на этом, мы можем
01:54:25
визуализировать компонент
01:54:27
этот компонент будет называться
01:54:30
игра загружена, так что давайте создадим новую
01:54:33
компонент под компонентами загрузки игры Dot
01:54:36
jsx
01:54:38
давайте запустим Rafce внутри и
01:54:41
давайте экспортируем этот компонент, как обычно
01:54:44
сделай это, это будет загрузка игры
01:54:50
отлично, теперь мы можем вернуться к созданию
01:54:52
битва, и мы можем импортировать ее сверху
01:54:55
мы импортируем другие компоненты
01:54:57
уже так давайте добавим загрузку игры в
01:55:01
список
01:55:02
наконец-то прямо здесь, под этим пустым
01:55:05
фрагмент, который мы можем сказать, если бой за вес
01:55:08
означает весовую битву и конец, а затем шоу
01:55:12
компонент загрузки игры
01:55:15
если мы сохраним это и перезагрузим
01:55:19
Мы этого не увидим, потому что Уэйд
01:55:21
битва ложная, но сейчас давайте настроим ее
01:55:24
в True в начале, чтобы мы могли на самом деле
01:55:26
посмотрим, как будет проходить битва за вес
01:55:28
выглядит как
01:55:29
и начнем прямо сейчас, это просто
01:55:32
строка с надписью «Загрузка игры, давайте прыгать»
01:55:35
в него и давайте реализуем весь
01:55:38
jsx нашего компонента загрузки игры, который нужно сделать
01:55:41
что мы собираемся импортировать
01:55:43
используйте навигацию
01:55:46
от
01:55:47
реакция-роутер Dash Dom
01:55:50
мы также собираемся импортировать пользовательский
01:55:52
кнопка, полученная из пользовательского точечного слэша
01:55:55
кнопку, которую мы собираемся также импортировать, использовать
01:55:59
Глобальный контекст, исходящий из
01:56:02
Контекст, который мы также можем импортировать
01:56:06
player01 и игрок ноль два, которые
01:56:10
исходящие из ресурсов с косой чертой, если мы
01:56:14
нажмите контрольную кнопку, чтобы проверить, вы можете
01:56:17
увидим, что это первый игрок, если мы его найдем
01:56:20
будет этот значок прямо здесь и
01:56:24
наконец-то мы сможем импортировать стили, которые появятся в ближайшее время
01:56:28
из стилей
01:56:31
отлично, наш компонент загрузки игры работает
01:56:34
чтобы сразу получить адрес кошелька
01:56:38
из контекста, к счастью, он у нас есть
01:56:41
вот это будет кошелек
01:56:42
адрес
01:56:43
равнозначно использованию глобального контекста, и мы
01:56:48
также можно инициализировать навигацию, сказав
01:56:51
const Navigation эквивалентен вызову
01:56:53
использовать навигационный крючок
01:56:55
отлично, теперь начнем с макета
01:56:58
сначала у нас будет div и это
01:57:01
div будет иметь имя класса, равное
01:57:04
в строку шаблона, где у нас есть
01:57:06
стили расставляют точки Flex между
01:57:10
а также стили точечной загрузки игры
01:57:15
контейнер, если мы сохраним его, вы сможете увидеть
01:57:18
что все перевернется
01:57:20
немного фиолетовый цвет, да, это
01:57:23
потому что мы хотим показать что-то сверху
01:57:25
экрана, потому что мы ждем
01:57:27
другой игрок присоединится, а затем внутри
01:57:30
там у нас может быть div, который будет
01:57:33
иметь имя класса
01:57:35
равен стилим, точкам, загрузке игры, коробке BTN
01:57:41
и внутри него мы можем визуализировать наши
01:57:44
многоразовая пользовательская кнопка с автоматическим закрыванием
01:57:48
компоненту мы можем дать ему название, равное
01:57:51
выбрать поле боя
01:57:54
мы собираемся щелкнуть по нему ручкой
01:57:56
равно
01:57:59
перемещаться
01:58:01
косая черта Поле боя обязательно
01:58:05
поместить внутрь функции обратного вызова
01:58:07
и мы собираемся дать этому отдохнуть Стили
01:58:10
равнозначно пустому сексу Dash, и вот оно!
01:58:15
не нажимай на нее сейчас, потому что ты собираешься
01:58:16
перейти на страницу, которой еще нет
01:58:18
существует, но мы скоро его создадим
01:58:20
а сейчас давайте сосредоточимся на том, что важно
01:58:23
давайте создадим div под этим div справа
01:58:27
здесь
01:58:29
у этого Дева будет имя класса
01:58:31
равен строке шаблона flex-1
01:58:36
Стили расставляют точки по центру Flex внутри
01:58:41
Динамический блок кода для завивки знака доллара
01:58:43
брекеты и гибкий уголь Dash внутри
01:58:46
там мы можем показать H1, который собирается
01:58:49
иметь имя класса
01:58:51
равно
01:58:52
шаблонная строка стилей с точкой
01:58:57
текст
01:58:59
а также текст Dash Center
01:59:02
и там будет написано: ожидание
01:59:07
затем тег разрыва, а затем мы можем добавить
01:59:10
достойный противник да да да вот и все
01:59:14
это уже выглядит лучше, мы можем
01:59:16
также добавьте тег P ниже
01:59:19
и скажите, что имя класса равно Styles
01:59:23
точка загрузки игры, и мы можем сказать Pro
01:59:28
кончик
01:59:30
пока ты ждешь
01:59:34
выберите предпочитаемый
01:59:37
Поле битвы, вот и все, это довольно
01:59:40
круто, позже мы сможем выбрать
01:59:43
Поле битвы, на котором мы собираемся
01:59:44
битва не так уж и хороша, но сейчас
01:59:48
давайте продолжим наш экран ожидания
01:59:51
внутри этого div под тегом P мы
01:59:54
собираюсь создать еще один div
01:59:56
у этого div будет имя класса
01:59:58
равно стилям, точка загрузки игры игроков
02:00:03
коробка
02:00:04
внутри там у нас будет
02:00:06
еще один div, у которого будет класс
02:00:09
имя
02:00:10
знак равенства, фигурные скобки внутри
02:00:14
строки шаблона
02:00:15
Стили расставляются по центру Flex
02:00:19
а также уголь Флекс баш
02:00:22
и внутри мы хотим показать
02:00:25
image самозакрывающийся тег изображения, который
02:00:28
будет источник игрока 0 1
02:00:32
и имя класса стилей, точка загрузки игры
02:00:36
плеер IMG нравится это
02:00:40
если мы сохраним это, мы сможем увидеть этого игрока
02:00:42
значок появится прямо здесь
02:00:45
под ним давайте также добавим тег b с
02:00:49
имя класса, равное загрузке игры в точку стилей
02:00:53
текст плеера и внутри него давайте
02:00:57
отобразить адрес кошелька
02:00:59
точечный срез от 0 до 30, чтобы сделать его
02:01:03
немного короче, и вот, у нас есть наш
02:01:06
адрес кошелька, чтобы мы знали, что это действительно мы
02:01:10
наконец, ниже этого div, содержащего P
02:01:14
тег, мы можем создать H2
02:01:16
и там мы можем дать ему имя класса
02:01:20
равно количеству точек загрузки игры по сравнению со всеми стилями
02:01:25
в верхнем регистре, и там мы можем сказать vs
02:01:28
наконец, мы можем продублировать этот div выше
02:01:33
вставьте его под vs и теперь мы
02:01:36
сделать то же самое для противника
02:01:37
игрок, это будет игрок 0 2. и
02:01:41
вместо адреса кошелька мы просто
02:01:43
собираюсь показать много вопросительных знаков
02:01:45
потому что мы еще не знаем, кто пойдет
02:01:48
присоединиться
02:01:49
так что что-то вроде этого должно сработать, давайте
02:01:53
сохраните это и начнем, это выглядит
02:01:56
большой
02:01:57
вот и все, что касается загрузки игры
02:02:00
компонент, теперь мы можем вернуться и можем
02:02:03
изначально установите для него значение false, потому что мы
02:02:05
еще не дождавшись боя мы
02:02:08
еще не создал его, так что теперь будет
02:02:11
прекрасное время, чтобы создать новую битву
02:02:14
протестируйте функцию создания битвы
02:02:16
Итак, давайте введем название битвы, я собираюсь
02:02:20
сделай JSM Battle, и я нажму
02:02:23
создать битву
02:02:26
появляется новое основное уведомление, и я
02:02:29
нажму «одобрить»
02:02:32
и мы ждем всех
02:02:34
противник прямо здесь, а это значит, что мы
02:02:38
успешно создали битву сейчас
02:02:41
если кто-то перезагрузит страницу, игра
02:02:43
нагрузка исчезнет, ​​но
02:02:46
битва все еще существует
02:02:48
и как вы можете видеть, это действительно так
02:02:50
случай, так как бы вы это решили, как
02:02:53
не мог бы ты проверить, идет ли уже битва?
02:02:55
создано хорошо, нам понадобится
02:02:58
объект, который будет отслеживать
02:03:01
активный бой, так что давайте двигаться
02:03:04
прямо в наш index.js внутри
02:03:07
контекст, который мы собираемся создать
02:03:09
хотите верьте, хотите нет, еще один эффект от использования
02:03:12
этот будет использоваться для установки
02:03:16
данные игры в состояние
02:03:19
это когда-нибудь пригодится позже
02:03:21
мы хотим сопоставить активные игры или
02:03:24
если вы хотите проверить, является ли текущий
02:03:25
игрок находится в игре, поэтому давайте создадим
02:03:28
новый эффект использования
02:03:32
и если вам интересно, почему у нас есть
02:03:34
так много эффектов использования, если у них есть
02:03:37
тот же массив зависимостей, тогда мы могли бы иметь
02:03:39
поместите весь код в один и тот же эффект использования
02:03:41
ну, всегда лучше остаться
02:03:44
организовано, поэтому просто добавьте комментарий выше
02:03:47
каждый и разделите их по назначению
02:03:50
и не помещайте весь код в один
02:03:52
место, где его вряд ли можно будет прочитать
02:03:55
с учетом сказанного, это будет
02:03:58
выполняется при каждом изменении контракта
02:04:02
так что прямо сейчас давайте создадим новую функцию
02:04:04
const fetch игровых данных равна
02:04:09
асинхронная функция
02:04:10
и просто чтобы я не забыл, позволь мне позвонить
02:04:12
немедленно прямо здесь принеси игру
02:04:15
данные внутри там, мы хотим проверить, если
02:04:18
смарт-контракт существует, или мы даже можем
02:04:21
сделайте это прямо здесь, не вызывая
02:04:24
функция, если это не так, если контракт
02:04:27
существует, затем вызовите команду получения игровых данных
02:04:29
функция, а затем внутри нее мы
02:04:32
хочу сначала получить все доступные бои
02:04:36
поэтому const fetched Battles равен a
02:04:41
весовой контракт, точка, все сражения
02:04:45
опять же, откуда мы знаем, что это существует
02:04:48
что ж, давайте вернемся к нашему смарт-контракту
02:04:52
и давайте найдем все сражения как
02:04:56
вы можете видеть, что это действительно просто
02:04:58
функция-получатель, которая просто возвращает
02:05:01
массив всех активных боев
02:05:04
с учетом сказанного, давайте зарегистрируем это в консоли
02:05:06
посмотрим, есть ли там ее бой
02:05:09
Хана бревно принесло сражения, давайте спасем
02:05:13
это, и давайте перейдем к консоли и проверим это
02:05:16
кажется, что мы получаем массив
02:05:18
из двух сражений, но первая всего лишь
02:05:21
ноль всякий раз, когда вы получаете какие-то данные
02:05:23
из смарт-контракта первый
02:05:25
элемент всегда будет пустым
02:05:28
так что имейте это в виду, мы начинаем с одного
02:05:31
в этом случае и так, поверьте
02:05:34
или нет Битва JSM уже здесь, и мы можем это увидеть
02:05:37
адрес игрока, создавшего
02:05:39
великую битву мы тоже можем увидеть
02:05:43
статус боя нулевой, что означает
02:05:45
что оно ожидается, еще никто не присоединился
02:05:47
здорово, будут сражения, которые
02:05:51
игроки уже присоединились, но
02:05:53
мы также хотим отфильтровать их, чтобы показывать только
02:05:55
зависимые, поэтому, если кто-то пойдет в
02:05:58
присоединиться к существующим битвам мы только хотим
02:06:01
чтобы показать те, к которым никто не присоединился
02:06:03
раньше, поэтому давайте создадим фильтр const
02:06:07
предстоящие сражения
02:06:09
равен полученному точечному фильтру битв
02:06:14
где мы получаем битву в качестве параметра и
02:06:17
затем мы хотим проверить, есть ли боевая точка
02:06:21
Статус боя
02:06:23
тройное равно нулю, что означает, что
02:06:26
сейчас он ожидает того, что мы хотим сделать, это
02:06:29
мы хотим найти битву, которая будет нашей
02:06:31
текущий игрок создал, потому что это
02:06:34
идет активный бой, так что, скажем так, притянуто
02:06:37
сражения
02:06:39
точка за каждый бой
02:06:43
мы хотим иметь оператор if if
02:06:46
боевая точка, игроки, точка, поиск
02:06:50
игрок
02:06:51
а затем точку игрока в нижний регистр
02:06:57
втрое равен адресу кошелька
02:07:01
точка две строчные это означает, что наш
02:07:05
игрок имеет тот же адрес, что и
02:07:09
адрес кошелька в браузере в
02:07:12
в этом случае мы можем что-нибудь сделать, так что давай
02:07:14
откройте блок, и тогда мы сможем получить его
02:07:17
еще проверьте, если
02:07:20
Battle.winner точка начинается с равно
02:07:24
до 0x00, это означает, что у нас нет
02:07:28
победитель и что битва все еще продолжается
02:07:30
активен, если это так, мы можем создать
02:07:33
новая переменная прямо здесь, вверху, пусть
02:07:36
активный бой установил его на ноль
02:07:41
и прямо здесь мы можем переопределить это с помощью
02:07:44
настоящая битва, поэтому активная битва
02:07:47
равный битве, великолепно, наконец, мы можем установить
02:07:50
всю эту информацию государству
02:07:53
поэтому давайте создадим новое поле State в
02:07:55
вершина
02:07:57
это будет использовать состояние, давайте позвоним
02:08:00
это данные игры
02:08:03
установите игровые данные и в начале это
02:08:05
будет равен объекту, который имеет
02:08:08
массив игрока установлен в пустой массив
02:08:11
массив ожидающих сражений
02:08:14
конечно, вначале установлено пустое значение
02:08:16
массив, а также и он имеет активный
02:08:19
битва, для которой по умолчанию установлено значение null
02:08:23
отлично, теперь мы можем обновить эти игровые данные
02:08:26
прямо здесь, сказав установить игровые данные
02:08:32
создать объект
02:08:33
ожидающие битвы равны ожидающим
02:08:36
битвы точка кусочек один помни, что мы хотим
02:08:40
чтобы начать с одного, и мы также собираемся
02:08:43
пройти активный бой который мы получили от
02:08:46
надуманные сражения, это здорово
02:08:49
теперь похоже, что у нас ошибка
02:08:52
это, скорее всего, с этим, если
02:08:54
заявление прямо здесь, так что давайте посмотрим, если
02:08:56
мы соответствующим образом закрываем его
02:09:01
кажется, мы
02:09:03
но кажется, что-то еще не так
02:09:06
так что давай посмотрим, что это такое
02:09:08
или правильно закрыть это
02:09:11
функция извлечения игры
02:09:14
ошибка прямо здесь в ожидании боя
02:09:17
на самом деле будет ожидать сражений
02:09:19
этот кусочек, а затем еще один, и так
02:09:23
теперь, если мы это исправим, мы будем в порядке
02:09:25
обновляя состояние нашими игровыми данными, мы
02:09:28
конечно, можно передать эти игровые данные правильно
02:09:31
здесь через нашу ценность контекста
02:09:34
и теперь мы можем вернуться к созданию
02:09:37
сражаться и продолжать с тем, что имеем
02:09:39
началось сейчас, основываясь на этих данных, мы можем
02:09:42
узнать, вошедший в систему игрок
02:09:44
создал битву или нет, так что давайте
02:09:47
создать эффект использования внутри create
02:09:49
боевой
02:09:51
вот и все изменится, когда
02:09:54
данные игры меняются, помните, что мы
02:09:56
получение игровых данных из контекста
02:10:01
и там мы хотим проверить, есть ли игровые данные
02:10:05
вопросительный знак DOT активный бой
02:10:08
вопросительный знак Статус Dot Battle
02:10:11
тройное равно нулю, в этом случае мы
02:10:14
хочу, чтобы битва за вес была верной и
02:10:18
вот и все, это работает, и теперь, если вы
02:10:20
перезагрузи, ты видишь, мы все еще ждем
02:10:23
где противник, это здорово, мы
02:10:26
успешно разместили один аккаунт
02:10:29
держать
02:10:30
теперь, чтобы правильно протестировать функциональность
02:10:32
мы должны реализовать совместную битву как
02:10:35
ну, мы можем сделать это, переключившись на
02:10:39
наше разное количество ядер
02:10:41
это будет аккаунт 2, и мы сможем
02:10:44
перезагрузить страницу
02:10:46
вот и все, этот игрок не создал
02:10:49
битва, но теперь наша очередь присоединиться
02:10:52
или существующие сражения
02:10:54
и прямо здесь мы должны указать это как
02:10:58
доступный бой, который мы еще не закончили
02:11:00
вот и теперь мы можем закрыть все файлы
02:11:03
и откройте файл join Battle.jsx.
02:11:07
внутри здесь мы должны использовать это новое
02:11:10
данные игры, чтобы фактически перечислить доступные
02:11:13
сражения
02:11:14
составить карту зависимых сражений, которые мы можем
02:11:17
используйте наш контекст прямо здесь
02:11:20
над нашей навигацией, скажем, const мы
02:11:25
мы можем получить контракт, мы можем получить игру
02:11:27
данные, мы также можем получить установленное оповещение о показе
02:11:32
и нам нужно будет указать название битвы, как когда
02:11:36
мы присоединяемся, нам также нужно это установить
02:11:39
название битвы и, наконец, кошелек
02:11:41
адрес, и это равносильно использованию
02:11:44
Глобальный контекст теперь доступен ниже
02:11:47
сражения, мы можем освободить немного места, и мы
02:11:50
могу создать div
02:11:52
у этого div будет имя класса
02:11:55
равен контейнеру соединения точек стилей там
02:12:00
мы можем открыть новый динамический блок кода
02:12:02
и произнесите данные игры, ожидающие сражения.
02:12:07
длина точки означает, существуют ли они в этом
02:12:11
вопросительный знак в случае, если таковые имеются
02:12:15
предстоящие сражения
02:12:17
затем мы хотим перейти к точке игровых данных
02:12:21
предстоящие сражения
02:12:23
Dot, и мы хотим вызвать фильтр DOT.
02:12:27
это
02:12:28
прежде чем мы это сделаем, давайте также добавим
02:12:30
случай, если нет незавершенных боев
02:12:33
в этом случае мы можем показать тег A P
02:12:37
так
02:12:38
и мы можем дать ему имя класса
02:12:41
равно загрузке стилей через точку
02:12:46
и там мы можем сказать что-то вроде
02:12:48
перезагрузите страницу, чтобы увидеть новые сражения
02:12:53
отлично, если мы сохраним это, что-то будет
02:12:57
ошибся, попробуем открыть консоль
02:13:00
посмотреть, что именно
02:13:02
кажется, что неопределенное - это не
02:13:04
функция добавления фильтра, поэтому нам нужно
02:13:07
предоставьте ему функцию обратного вызова
02:13:11
и если сохраним все смотрим
02:13:13
хорошо, но, конечно, мы еще этого не сделали
02:13:15
отфильтровал ожидающие сражения, так как дела
02:13:19
мы сделаем это хорошо, мы получим
02:13:21
битва и здесь мы должны найти
02:13:24
битвы, которые не соответствуют ни одному из
02:13:27
текущий игрок уже создал, поэтому мы
02:13:30
не могу сказать, что нет игроков в боевые точки, которые
02:13:34
включает
02:13:35
адрес кошелька
02:13:38
так не те бои, что нынешние
02:13:39
игрок создал, иначе он был бы
02:13:42
играя самого себя
02:13:43
отлично, теперь мы их отфильтровали и
02:13:47
теперь нам нужно сопоставить их, чтобы мы
02:13:49
собираюсь вызвать карту, где мы получим
02:13:51
битва, а также индекс
02:13:55
и для каждого боя мы хотим мгновенно
02:13:57
верните что-нибудь, поэтому используйте здесь круглые скобки
02:14:00
вместо фигурных скобок мы собираемся
02:14:03
вернуть div для каждого сражения и это
02:14:06
div будет иметь ключ, равный
02:14:08
Battle.name плюс индекс, чтобы сделать его уникальным
02:14:12
и дайте ему имя класса, равное Styles
02:14:16
точка Flex между
02:14:20
внутри у нас будет тег P
02:14:23
это будет иметь имя класса, равное
02:14:26
к стилю, точке, названию «Присоединиться к битве» и
02:14:32
там мы можем визуализировать индекс плюс один
02:14:36
вот и все, если мы сохраним это
02:14:39
там ты можешь увидеть цифру один, означающую
02:14:42
это одна битва, а также рядом с ней
02:14:45
давайте отрисуем имя боевой точки
02:14:49
и вот мы идем, JSM сражается за битву, которую мы
02:14:53
действительно создал
02:14:55
под этим названием битвы мы можем создать
02:14:58
пользовательская кнопка, и мы можем дать ей название
02:15:01
это будет сказать присоединяйся
02:15:04
наконец-то мы можем дать ему ссылку на ручку
02:15:08
у него будет функция обратного вызова
02:15:10
он вызовет щелчок по дескриптору
02:15:12
функция
02:15:14
и мы хотим передать ему Battle.name
02:15:18
чтобы узнать, к какой битве мы хотим присоединиться
02:15:21
конечно, этот щелчок ручки - это
02:15:24
функцию, которую мы еще не создали, так что давайте
02:15:26
сделай это сразу, константный дескриптор, кликни
02:15:29
это асинхронная функция
02:15:33
и это, кажется, хорошо на данный момент, так что сейчас
02:15:37
если мы сохраним это, у нас будет один доступный
02:15:40
битва, которая именно такая, какой и должна быть
02:15:42
и у нас есть кнопка присоединиться, теперь код
02:15:46
функции щелчка ручки присоединения к бою
02:15:48
будет похоже на создание
02:15:51
боевой клик, но, конечно, дело идет
02:15:53
быть одним важным отличием, и это
02:15:55
будет вместо создания битвы
02:15:57
мы собираемся присоединиться к нему
02:15:59
сначала давайте установим название битвы
02:16:02
состояние, равное названию битвы, которое
02:16:05
мы передаем параметры, насколько это возможно
02:16:07
смотри прямо здесь, тогда давай откроем новую попытку
02:16:11
и поймать блок
02:16:13
и скажи подожди
02:16:16
договор
02:16:17
точка, вступай в бой
02:16:19
и мы передадим название битвы
02:16:22
чтобы мы знали, в какой битве мы хотим участвовать
02:16:24
присоединиться к
02:16:25
теперь давайте узнаем больше о присоединении
02:16:28
боевая функция внутри смарта
02:16:30
контракт, давай поищем его в строке 242
02:16:35
мы видим функцию присоединения к бою
02:16:38
он принимает название битвы в качестве первого
02:16:41
и только подпирать, тогда он выигрывает битву
02:16:45
название битвы, которое мы должны уточнить
02:16:48
что битва еще не началась
02:16:50
и мы должны потребовать, чтобы второй
02:16:53
игрок присоединяется к битве, мы не можем
02:16:55
присоединяйтесь к битве, которую мы создали, наконец, мы хотим
02:16:58
требовать, чтобы присоединяющийся игрок
02:17:01
в настоящее время не в бою после того, как мы прошли
02:17:04
все эти проверки, то мы можем установить
02:17:07
статус битвы, чтобы начать его, и мы можем установить
02:17:10
второй игрок тому игроку, который
02:17:12
наконец-то присоединился к битве, мы обновляем
02:17:15
статусы обоих этих игроков, чтобы
02:17:18
правда быть в бою
02:17:20
и, наконец, мы публикуем новое боевое событие
02:17:24
который мы можем прослушивать на внешнем интерфейсе
02:17:27
отлично, теперь мы знаем, как вступить в бой
02:17:29
работает также, как только мы вступаем в битву
02:17:31
давайте также покажем оповещение, поэтому установите показ
02:17:35
оповещение со статусом, равным true
02:17:39
тип равен успеху и, наконец,
02:17:43
сообщение равносильно присоединению
02:17:46
и это будет
02:17:49
шаблонная строка названия боя
02:17:52
конечно, нам придется использовать обратные кавычки
02:17:55
вот и на данный момент ошибка
02:17:59
давайте просто зарегистрируем это в консоли, чтобы записать Kanza
02:18:01
ошибка
02:18:03
отлично, это уже сделано, но давайте
02:18:07
не совершить ошибку, которую мы сделали, когда
02:18:10
создание битвы
02:18:11
мы не хотим присоединяться время от времени что
02:18:14
случается, что мы не знаем, что хотим настроить
02:18:17
прослушиватель событий для вступления в бой
02:18:19
событие, чтобы мы могли правильно прослушивать
02:18:22
это, а затем перенаправить обоих игроков в
02:18:25
Зона поля боя отлично подходит для этого, мы
02:18:29
собираюсь пойти на наше мероприятие по созданию
02:18:32
файл прослушивателей, и нам нужно добавить
02:18:36
второе событие, которое будет новым
02:18:39
игровой жетон
02:18:41
так что прямо здесь мы можем скопировать первые два
02:18:44
линии прямо здесь, все еще внутри
02:18:47
создадим прослушиватели событий прямо здесь, давайте
02:18:50
освободите немного места, я собираюсь вставить их
02:18:52
две строки, но теперь вместо новой
02:18:55
фильтр событий игрока, это будет что-то новое
02:18:59
Фильтр боевых событий и фильтры точечно новые
02:19:04
бой, обязательно измените это тоже
02:19:07
и, конечно же, добавить новое событие, новую битву
02:19:11
фильтр событий, и теперь мы получаем аргументы
02:19:14
можно начать работать над кодом того, что есть
02:19:16
произойдет, как только это событие произойдет
02:19:19
отправлено, конечно, наша цель идет
02:19:22
чтобы направить обоих игроков к
02:19:25
Область поля боя, и похоже, что мы
02:19:28
забыл закрывающие скобки, отлично
02:19:30
с учетом сказанного, давайте начнем с
02:19:33
новый прослушиватель событий битвы, который можно получить
02:19:36
начали, мы можем, как и раньше, добавить
02:19:40
журнал консоли прямо здесь, чтобы мы знали
02:19:42
что событие произошло, так что давай сделаем
02:19:44
console.log и давайте сделаем что-то вроде
02:19:47
началась новая битва
02:19:50
мы также можем консольно регистрировать дуги и в
02:19:53
в этом случае мы собираемся записать в консоль журнал
02:19:55
адрес кошелька, потому что их два
02:19:58
игроки, мы получим одного от своих
02:20:01
адрес кошелька, и мы его получим
02:20:03
из аргументов другого игрока
02:20:05
Итак, теперь, когда мы это знаем, давайте создадим
02:20:08
if и здесь мы должны
02:20:11
проверьте, есть ли адрес кошелька
02:20:14
точка в нижнем регистре втрое равна аргументам
02:20:19
игрок с точкой одна точка две строчные буквы
02:20:24
или адрес кошелька
02:20:27
точка в нижнем регистре втрое равна аргументам
02:20:32
точка, игрок два, точка, две строчные буквы, поэтому мы
02:20:36
хочу убедиться, что наш плеер
02:20:38
либо игрок один, либо игрок 2. если
02:20:42
это так, тогда мы хотим
02:20:44
перейти к прямой косой черте, битва вперед
02:20:47
косая черта аргументов
02:20:50
Название Dot Battle идеально, так что мы готовы
02:20:54
начать с битвы
02:20:56
наконец, как только мы вступим в битву, которую хотим
02:20:59
обновить данные игры, чтобы выполнить
02:21:02
что мы можем вернуться к нашему контексту
02:21:06
это будет файл index.js и
02:21:09
в верхней части файла мы можем создать
02:21:11
новое поле состояния использования, в котором указано состояние использования
02:21:16
будет называться обновлением игровых данных и
02:21:20
в начале будет установлено значение
02:21:22
нуль
02:21:23
теперь мы можем получить эти обновленные игровые данные
02:21:26
функцию, и мы можем передать ее нашему
02:21:29
создадим прослушиватели событий, что давайте
02:21:33
Найди это
02:21:34
прямо здесь, чтобы мы могли передать набор
02:21:37
обновить данные игры
02:21:40
и теперь то, что мы можем сделать, находится ниже
02:21:43
перейдите, мы можем установить обновление игровых данных
02:21:48
вот так, конечно, мы должны это сделать
02:21:51
давайте получим это из параметров этого
02:21:54
функция
02:21:55
установить обновление данных игры
02:21:58
и что мы хотим сделать, это получить
02:22:00
доступ к предыдущему или предыдущему обновлению
02:22:03
данные игры, а затем мы хотим вернуться
02:22:06
предварительное обновление данных игры
02:22:10
плюс один, который мы хотим увеличить
02:22:12
переменная на основе этого состояния мы узнаем
02:22:15
когда нам нужно перезагрузить экран боя
02:22:18
чтобы показать новую и обновленную информацию, чтобы
02:22:21
возвращаясь к индексу, теперь мы можем
02:22:24
обновите данные игры прямо здесь, а это
02:22:26
этот эффект использования
02:22:27
точнее, мы можем обновить его один раз
02:22:31
переменная данных обновления игры изменится так
02:22:34
прямо здесь мы собираемся пройти
02:22:36
обновить данные игры как второй
02:22:38
параметр зависимости отлично подходит для этого
02:22:41
сказал, что наш прослушиватель событий завершен и
02:22:45
прежде чем мы попытаемся вступить в битву JSM
02:22:47
давайте продолжим и создадим новую битву
02:22:50
страница, поэтому давайте создадим новую страницу под названием
02:22:53
боевой
02:22:55
jsx
02:22:57
давайте запустим там refce
02:23:00
и этот не будет выше
02:23:03
закажите обертку компонента, потому что это
02:23:05
это будет страница нашей игровой битвы, это
02:23:08
будет совершенно по-другому, так что для
02:23:10
теперь давайте сначала сделаем импорт туда
02:23:13
мы можем импортировать эффект использования
02:23:17
а также состояние использования, исходящее из
02:23:20
реагируя, мы также можем импортировать параметры использования
02:23:25
а также используйте навигацию, которая скоро появится
02:23:29
из реагирующего маршрутизатора Dom
02:23:31
тогда мы сможем импортировать эти стили
02:23:35
из стилей точечной косой черты
02:23:37
мы можем импортировать пару компонентов, чтобы
02:23:40
это будет нашим предупреждением, и это
02:23:44
все, что нам нужно сейчас, из точки слэша
02:23:46
компоненты
02:23:49
мы также можем импортировать наш контекст или, скорее,
02:23:51
использовать глобальный контекст из точечной косой черты
02:23:55
контекст
02:23:57
и мы можем импортировать пару активов
02:23:59
например атака
02:24:02
звук атаки
02:24:03
защита
02:24:06
Звук защиты
02:24:08
Игрок ноль один как значок player01
02:24:13
и игрок ноль два как игрок ноль два
02:24:17
значок, и это происходит из ресурсов
02:24:23
наконец-то мы собираемся импортировать пьесу
02:24:26
аудио
02:24:28
функция от точечной косой черты вперед
02:24:32
слэш анимация точка Js
02:24:36
отлично, теперь у нас есть весь импорт, давайте
02:24:39
попробуйте использовать некоторые из них внутри
02:24:41
верхнюю часть нашего компонента, давайте попробуем получить
02:24:44
что-то из глобального контекста
02:24:46
например, адрес кошелька с игровыми данными контракта
02:24:51
показать оповещение
02:24:54
поставь оповещение о показе и всё
02:24:57
на данный момент это равносильно использованию Global
02:25:00
контекст
02:25:01
мы также хотим создать два новых использования
02:25:04
Штаты, поэтому давайте создадим новое состояние использования
02:25:07
это будет первый игрок, который
02:25:11
в начале будет равен
02:25:13
пустой объект, и мы также хотим получить
02:25:15
игрок 2 и установите игрока 2, который находится в
02:25:19
начало будет равно пустому
02:25:21
объект, а затем мы собираемся
02:25:23
повторно перейдите на страницу, которая выглядит как
02:25:25
эта косая черта, битва вперед, косая черта
02:25:28
и тогда прямо здесь это будет
02:25:30
название битвы
02:25:32
так как же нам получить имя, мы его поняли
02:25:35
из параметров, чтобы мы могли сказать константную битву
02:25:38
имя равно использованию параметров
02:25:43
и, наконец, мы можем инициализировать
02:25:45
функция навигации великолепна, теперь у нас есть
02:25:49
весь импорт, я думаю, у нас нет
02:25:51
перенаправлено на эту страницу, так что давайте перейдем к
02:25:54
индекс для экспорта нашей боевой страницы
02:25:58
мы можем сделать это, просто изменив имя
02:26:00
прямо здесь и экспортируем это, так что это
02:26:03
будет битва
02:26:04
и теперь, вернувшись в главный раздел, мы можем импортировать
02:26:08
страница битвы
02:26:10
и тогда мы сможем продублировать этот маршрут
02:26:12
здесь мы можем установить путь равным
02:26:16
бой косой чертой, а затем Колином
02:26:18
название боя, которое означает, что это
02:26:21
параметр будет динамическим и
02:26:23
тогда мы сможем визуализировать битву
02:26:25
компонент
02:26:27
отлично, теперь мы можем вернуться и давай просто
02:26:31
стиль боевого компонента немного лучше
02:26:33
так что как только мы получим повторную навигацию после
02:26:35
присоединяясь, мы уже можем увидеть кое-что на
02:26:38
экран, чтобы сделать это, мы можем создать
02:26:40
новый div
02:26:41
и у этого div будет класс
02:26:44
имя, равное строке шаблона
02:26:47
Стили Dot Flex между стилями Dot Game
02:26:52
контейнер
02:26:54
и здесь мы должны отобразить
02:26:56
текущее поле боя вот оно
02:26:59
это будет специальная переменная, которая
02:27:01
собираюсь сказать, на каком поле боя
02:27:03
мы в данный момент включены, поэтому, если мы проверим наш
02:27:07
стили
02:27:08
внутри Tailwind вы можете видеть, что мы
02:27:10
иметь разные фоновые изображения на основе
02:27:13
на разных названиях полей боя, так что давайте
02:27:16
вернись, а пока давай постараемся изо всех сил
02:27:18
закодируйте это прямо здесь
02:27:20
в астрале это могло бы сработать, если бы не мы
02:27:24
собираюсь переключить его позже и внутри здесь
02:27:26
прямо сейчас я хочу отрендерить битву
02:27:28
имя, поэтому я собираюсь создать H1, который
02:27:30
собираюсь отобразить название битвы и
02:27:33
давайте дадим ему имя класса, равное тексту
02:27:37
Dash XL и текст Белый
02:27:41
отлично, теперь давай сохраним это
02:27:44
и я думаю, что мы готовы присоединиться к
02:27:46
битва за тестирование функциональности
02:27:49
Я нажму «Присоединиться» или «Существующий»
02:27:52
битвы, я нажму «присоединиться», давай
02:27:55
также откройте элемент проверки, чтобы увидеть
02:27:57
что происходит, и давай присоединимся, мы получим
02:28:01
новое уведомление, которое всегда хорошо
02:28:03
подпиши, и я нажму «одобрить»
02:28:06
присоединяюсь к битве JSM, это выглядит хорошо
02:28:08
мне
02:28:10
и произошло перенаправление, мы также получили
02:28:14
уведомление от нашего прослушивателя событий, поэтому
02:28:17
теперь, если мы вернемся к творчеству в
02:28:19
слушатель, мы видим, что это тот самый
02:28:21
это случилось, началась новая битва, мы получили
02:28:24
аргументы, которые содержали битву
02:28:27
назовите первого игрока и игрока 2
02:28:30
и это здорово, и адрес кошелька
02:28:33
вот и теперь нас перенаправили на
02:28:35
бой вперед, а затем вперед
02:28:37
слэш JSM бой но экран просто
02:28:41
кажется, белый
02:28:43
так что давайте попробуем перезагрузить страницу и да
02:28:47
кажется, там ничего нет, так что давай
02:28:50
проверьте, правильно ли отображается страница битвы
02:28:52
маршрутизировано, так что давайте посмотрим, поскольку у нас есть
02:28:56
на белом фоне похоже на
02:28:58
фон не был применен, и это нормально
02:29:00
но если мы изменим цвет этого текста
02:29:02
обратно в черное, возможно, мы сможем это увидеть
02:29:05
и вот мы начнем битву JSM, что означает
02:29:08
что он правильно читает
02:29:09
параметры, так что это здорово, что у нас есть все
02:29:12
данных, которые нам нужны на данный момент, и мы
02:29:14
готовы закодировать внешний вид
02:29:16
Страница поля боя
02:29:18
обо всем по порядку, давайте сосредоточимся на
02:29:20
Предыстория поля боя и что мы можем
02:29:23
сделать, мы можем вернуться к index.js и
02:29:26
мы можем создать новое состояние использования вверху
02:29:29
да, еще один, так что мы здесь
02:29:32
собирается создать новое государство использования и
02:29:35
назовем это кишечником, вы можете использовать
02:29:38
заглавная G или строчная G, неважно
02:29:41
ты используешь, обязательно придерживайся этого, делай
02:29:43
не иметь никаких проблем в дальнейшем и в
02:29:46
начнем, назовем это BG Dash астрал, мы будем
02:29:50
придется использовать этот префикс BG Dash и
02:29:53
затем название поля битвы за
02:29:55
сейчас это будет статично, но позже
02:29:57
мы сможем обновить его, используя набор
02:30:00
Страница поля боя, так что теперь давайте пройдем
02:30:03
Поле боя, а также набор
02:30:05
Поле боя вплоть до нашего
02:30:08
контекст вот здесь
02:30:10
Поле боя, а также
02:30:14
установить поле боя
02:30:16
вот и все
02:30:18
отлично, теперь мы можем вернуться к нашей битве
02:30:20
страницу, и мы сможем импортировать поле боя
02:30:25
и мы можем просто отобразить эту строку
02:30:28
прямо здесь, вместо Астрала
02:30:31
теперь, если мы сохраним это, это действительно работает
02:30:35
потому что мы ставим БГ впереди, и если вы
02:30:38
посмотрите стили Tailwind, если поставите
02:30:41
эти фоновые изображения, то вам придется
02:30:43
поставьте BG Dash, а затем имя
02:30:45
это поле битвы, так что это выглядит
02:30:48
отлично, теперь давайте продолжим добавлять к нашему
02:30:51
Поле боя, это даже выглядит великолепно
02:30:53
на меньших экранах, но если мы расширим
02:30:56
теперь оно выглядит еще лучше, пойдем
02:30:59
немного назад
02:31:00
и приступим к реализации
02:31:03
сначала мы сосредоточимся на извлечении
02:31:06
все важные данные игроков, потому что мы
02:31:08
должны передать данные игрока всем
02:31:10
путь к компонентам, которые собираются
02:31:12
представьте это, так что давайте создадим новое использование
02:31:15
эффект прямо здесь
02:31:18
вот и все, эффект от использования будет
02:31:21
происходит, когда договор меняет смысл
02:31:23
когда оно впервые обновится, когда игра
02:31:26
данные меняются и когда название боя
02:31:29
изменения тоже отличные, как мы
02:31:32
собираюсь принести всю важную игру
02:31:34
данные, давайте создадим новую функцию с именем
02:31:37
const получить информацию об игроке и все готово
02:31:41
быть равным асинхронной функции, например
02:31:44
этот
02:31:45
давай не забудем сразу позвонить ему
02:31:47
здесь, чтобы мы могли сказать, есть ли
02:31:51
контракт и есть ли игровые данные DOT
02:31:55
активный бой только если это правда то
02:31:59
мы хотим вызвать функцию получения информации об игроке
02:32:01
функция теперь внутри get player
02:32:04
информация, мы собираемся создать новую попытку и
02:32:07
поймать блок там, мы можем сказать, пусть
02:32:11
адрес игрока01
02:32:13
равно нулю, и пусть player02
02:32:18
адрес
02:32:19
также равно нулю, что означает, что
02:32:22
мы просто устанавливаем переменные так
02:32:25
мы сможем использовать их позже, как только
02:32:27
инициализируем их, теперь мы должны проверить,
02:32:30
получить данные
02:32:32
ДОТ активный бой
02:32:35
точка игроки ноль точка два строчные буквы
02:32:40
втрое равен адресу кошелька
02:32:44
точка в нижнем регистре, если это так
02:32:49
это значит, что адрес нашего игрока 0 1
02:32:53
равно точке данных игры activebattle
02:32:58
игроки ставят точки на ноль, потому что мы проверяем, что
02:33:02
прямо здесь активный боевой игрок 0
02:33:05
равно адресу кошелька. От точки к нижнему регистру.
02:33:08
и вот это должно было быть
02:33:10
игроки во множественном числе, и на основании этого мы также
02:33:14
знайте, что адрес игрока 2 равен
02:33:16
к
02:33:17
activepaddle.players, поехали
02:33:21
еще
02:33:22
если адрес кошелька не равен
02:33:25
игрок 0, что должно означать, что это
02:33:28
равен игроку 1. поэтому мы можем скопировать эти
02:33:31
два значения, и мы можем просто изменить
02:33:33
цифры, означающие, что адрес игрока 1
02:33:36
равно игрокам 1, а затем игроку 2
02:33:39
адрес там равен нулю игроков
02:33:43
мы идем по этим адресам мы можем
02:33:45
теперь сначала получим правильные данные игрока, мы
02:33:49
нужно получить токен, и мы можем это сделать
02:33:51
говоря, что данные токена const P1 равны
02:33:55
к весовому контракту dot get player
02:34:00
жетон
02:34:01
и мы передаем адрес player01, который мы
02:34:06
можете погрузиться в наш смарт-контракт, чтобы увидеть
02:34:08
что делает функция получения токена игрока
02:34:11
поэтому, если мы проверим это прямо здесь и найдем
02:34:14
где он инициализируется, мы видим, что
02:34:16
он просто возвращает конкретного игрока
02:34:19
токен, тогда мы сможем получить первого игрока
02:34:22
минусы игрока 0 1 равны весу
02:34:26
контракт с игроком, и вот мы
02:34:30
также необходимо передать адрес
02:34:31
player, и мы можем дублировать это, и мы
02:34:34
можно повторить процесс с player02
02:34:37
и передайте адрес player02
02:34:41
теперь давайте углубимся в этот смарт-контракт
02:34:43
чтобы увидеть, что делает функция get player
02:34:45
так что еще раз возвращаюсь и
02:34:48
ищу его, возьми плеер, поехали
02:34:51
он просто возвращает игрока
02:34:54
это функция получения
02:34:56
теперь на основе этих переменных мы можем сделать
02:34:59
используйте их, чтобы получить полоски здоровья игрока
02:35:02
Полоски маны, атака и защита, поэтому мы
02:35:05
могу сказать константа
02:35:07
P1 ATT как атака равна жетону P1
02:35:13
сила атаки точки данных
02:35:16
точка вместо числа
02:35:19
вот и мы можем это продублировать
02:35:22
и тогда мы получим защиту P1
02:35:25
в качестве защиты, и это будет
02:35:27
защита
02:35:29
сила
02:35:30
теперь мы хотим получить помощь P1 и P2 и
02:35:33
Бары маны, и мы можем сделать это, сказав
02:35:35
const p1h равен точке player01
02:35:40
Точка здоровья игрока на число мы можем
02:35:44
продублируйте это еще три раза
02:35:47
второй будет P1 Мана, так что мы
02:35:50
можно просто изменить здоровье игрока на
02:35:52
игрок Мана
02:35:54
у нас будет здоровье второго игрока и
02:35:57
затем игрок 2 Мана
02:35:59
Здоровье игрока 2 будет таким
02:36:01
нам нужно изменить номер второго игрока
02:36:04
второй игрок, и нам нужно изменить
02:36:07
игрок Мана вот еще раз убедитесь
02:36:10
что у тебя оно именно такое P1
02:36:12
атака P1 данные токена сила атаки P1
02:36:16
защита данных токена def P1 и надежность
02:36:18
тогда здоровье P1 — это здоровье первого игрока P1
02:36:21
Мана игрока один Мана P2 Здоровье игрока
02:36:24
2 здоровья, а затем P2 маны — игрок 2.
02:36:27
Мана великолепна теперь, когда у нас есть эти ценности
02:36:31
мы можем установить их в состояние, чтобы мы могли
02:36:33
скажем, поставил первого игрока
02:36:36
это точка точка точка мы хотим распространить все
02:36:39
значения игрока 0 1, которые мы хотим установить
02:36:42
ATT должен быть равен P1 ATT как
02:36:46
смерть от атаки будет защитой P1
02:36:49
здоровье будет установлено на p1h и
02:36:54
Мана будет установлена ​​на p1m, мы можем
02:36:57
продублируйте это
02:36:59
установить плеер на
02:37:01
распространить игрока 0 на
02:37:03
установите атаку, равную X, просто
02:37:07
строка X и Def равна строке
02:37:09
X, потому что мы не знаем противоположного
02:37:11
сильные стороны игроков в атаке и защите, но
02:37:14
мы знаем их здоровье и ману, поэтому мы
02:37:17
можно установить P на здоровье и P2 на ману отлично
02:37:21
и, наконец, об ошибке, а сейчас мы можем
02:37:24
просто console.login
02:37:27
отлично, теперь мы получаем все
02:37:29
данные игрока, и мы устанавливаем для них значение
02:37:32
состояния игрока один и два это тоже выглядит
02:37:35
как будто у меня опечатка вот здесь, адрес
02:37:37
с одной D, так что это должно быть
02:37:40
то же, что и эти переменные прямо здесь, чтобы
02:37:43
убедитесь, что все работает отлично, теперь мы можем сделать
02:37:45
использование этих переменных данных игрока, поэтому
02:37:48
давайте прокрутим вниз и создадим много
02:37:51
различных повторно используемых функций, поэтому мы
02:37:53
можете сначала создать макет нашей игры
02:37:56
давайте покажем оповещение вверху
02:37:59
страница битвы так же, как мы сделали с
02:38:01
компонент более высокого порядка страницы, чтобы мы могли перейти
02:38:03
здесь, и мы можем скопировать это предупреждение
02:38:06
потому что компонент более высокого порядка
02:38:09
используется на всех домашних страницах, но это не так
02:38:11
использовался в бою, поэтому нам придется вставить
02:38:13
это тоже здесь, так что будь начеку
02:38:17
статус и оповещение показывают тип оповещения и
02:38:20
показать предупреждающее сообщение, отлично, теперь мы можем показать
02:38:24
специальный компонент информации об игроке, так что верно
02:38:27
здесь давайте создадим информацию об игроке
02:38:29
компонент и к этому компоненту мы
02:38:32
собираюсь пройти игрока, который будет
02:38:34
равен игроку 2, потому что мы показываем
02:38:37
они наверху, сначала мы наверху
02:38:40
нижняя страница экрана, и мы также
02:38:42
хочу показать значок, чтобы значок игрока был
02:38:45
равен иконке игрока 0 2
02:38:50
и мы также можем передать пустое поле в качестве верхнего края
02:38:55
теперь, конечно, если мы сохраним, это не так
02:38:57
будет работать, потому что этот компонент
02:38:59
еще не существует, поэтому в этом файле мы
02:39:02
собираюсь использовать пару компонентов
02:39:03
мы собираемся создать информацию об игроке
02:39:05
компонент карты, компонент действия
02:39:08
кнопка, а также информация об игре, и что делать
02:39:12
ты говоришь, что теперь мы перейдем к компонентам
02:39:14
папку и создайте базовую структуру для
02:39:17
все эти компоненты мы будем использовать
02:39:19
Итак, начнем с кнопки действия
02:39:22
это будет действие
02:39:25
button.jsx и мы можем создать рафик
02:39:28
внутри там, тогда мы тоже собираемся
02:39:31
создайте компонент карты, чтобы card.jsx и
02:39:35
мы также можем запустить раф-рейс
02:39:37
наконец-то мы собираемся использовать информацию об игре
02:39:40
компонент
02:39:41
.jsx, и мы можем запустить rafc e и, наконец,
02:39:46
тот, кого мы уже назвали, это игрок
02:39:48
информационный компонент Dot jsx, и мы также можем
02:39:53
запустим rafce, теперь мы можем перейти к индексу и
02:39:56
можно экспортировать все эти компоненты, чтобы
02:39:59
у нас будет кнопка действия
02:40:03
тогда у нас будет открытка
02:40:05
компонент
02:40:07
тогда у нас будет информация об игре
02:40:10
компонент
02:40:12
и, наконец, у нас будет плеер
02:40:14
информационный компонент
02:40:17
вот и все, теперь мы можем экспортировать все
02:40:20
четыре из них прямо здесь
02:40:22
и нам, конечно, нужно расставить запятые
02:40:26
вот и мы наконец возвращаемся к R
02:40:29
это будет страница битвы, мы можем
02:40:33
теперь импортируйте все эти компоненты в
02:40:35
верх, поэтому давайте импортируем вместе с
02:40:38
оповещение, которое будет кнопкой действия
02:40:42
карта
02:40:44
Компоненты информации об игре и информации об игроке
02:40:49
отлично, теперь мы можем продолжить создание
02:40:52
базовая компоновка, учитывая, что все
02:40:54
компоненты будут здесь, поэтому
02:40:57
под информацией об игроке у нас будет
02:41:00
div, и этот div будет иметь
02:41:03
имя класса
02:41:04
равен внутри фигурных скобок Стили
02:41:08
точка Flex Center, а также вызов Flex Dash
02:41:14
и мой 10. внутри этого разработчика мы хотим
02:41:18
покажите компонент карты, поэтому прямо здесь мы
02:41:21
может отображать компонент самозакрывающейся карты
02:41:24
у этого компонента будет пара
02:41:26
реквизита, такого как карта, равно игроку
02:41:30
2. заголовок соответствует вопросу игрока 2
02:41:34
отметить точкой имя игрока
02:41:36
здесь не кнопка действия
02:41:38
мы также собираемся дать ему игрока 2
02:41:40
переменная, которую нужно знать, чтобы различать
02:41:42
разные карты, и тогда нам придется
02:41:45
предоставить ссылку на карту, которая будет
02:41:47
равен рефу, который мы собираемся
02:41:49
создадим позже, а сейчас давайте просто
02:41:51
оставьте это как пустую строку ниже
02:41:54
эту карту мы собираемся создать еще одну
02:41:56
div
02:41:57
и у этого div будет класс
02:42:00
имя, равное гибким элементам Dash Center и
02:42:04
гибкая тире-строка
02:42:06
внутри него мы хотим отобразить
02:42:08
кнопка действия
02:42:11
так что это будет кнопка действия
02:42:13
атаковать игрока, так что это
02:42:16
самозакрывающийся компонент
02:42:18
URL-адрес изображения будет равен
02:42:21
Атаковать
02:42:22
его ручка будет равна щелчку
02:42:25
а пока мы оставим это как
02:42:28
пустая функция обратного вызова, и мы
02:42:29
собираюсь реализовать функционал
02:42:30
позже, и мы сможем добавить остальные стили
02:42:34
равно
02:42:36
мр-2 для поля справа
02:42:38
наведите курсор на желтую черту Dash 400. отлично
02:42:45
теперь мы можем скопировать карту еще раз
02:42:47
под кнопкой действия
02:42:50
это будет карта игрока
02:42:52
один, так что мы можем сказать, что автомобильный дисплей один
02:42:54
название — это игрок номер один, имя этого игрока и
02:42:57
прямо здесь нам не нужно ничего предоставлять
02:43:00
переменная игрока 2, но мы можем предоставить
02:43:03
остальные стили равны mt-3, чтобы разделить его
02:43:07
с верхней карты и, наконец, мы можем
02:43:09
скопируйте кнопку действия и поместите ее
02:43:11
под карточкой, потому что на этот раз это
02:43:14
это будет кнопка действия защиты
02:43:16
вместо поля справа 2 мы собираемся
02:43:19
иметь поле слева 6 и наведение
02:43:23
будет бордюр Dash red Dash 600 за
02:43:27
защита, наконец, ниже этого div и ниже
02:43:31
еще один элемент управления, который мы хотим показать игроку
02:43:33
Информация
02:43:34
для другого игрока помните, что у нас есть
02:43:37
уже создал его для того, что на
02:43:39
вверху, но теперь мы можем скопировать это
02:43:42
вставьте это сюда и это будет
02:43:44
первый игрок, а также нулевой игрок I
02:43:48
can и ниже, что мы хотим показать
02:43:52
Информационный компонент игры просто
02:43:55
самозакрывающийся компонент
02:43:58
теперь, если мы сохраним это, вы увидите, что
02:44:01
текст здесь, его едва видно, но все
02:44:04
части находятся здесь, информация об игроке на
02:44:07
переверните карты противоположных игроков, а затем мы
02:44:11
есть своя карта, а также действие
02:44:13
кнопки рядом с этой карточкой, то у нас есть
02:44:16
наша собственная информация об игроке, и, наконец, у нас есть
02:44:19
информация об игре, так что все ищет
02:44:23
для меня это здорово, но сейчас самое время, чтобы мы
02:44:25
погрузиться во все эти компоненты
02:44:28
индивидуально и мы создаем их образ
02:44:30
и чувствуй, так что давай продолжим и пойдем
02:44:33
начал сверху вниз, первый
02:44:36
в нашем списке будет игрок
02:44:38
информационный компонент, это будет
02:44:41
интересно, потому что у нас будет
02:44:43
разные цвета на полосках здоровья
02:44:45
в зависимости от того, сколько здоровья у
02:44:47
у игрока есть, так что это определенно
02:44:50
интересный функционал, стоит задуматься
02:44:52
как реализовать, но я покажу
02:44:54
как это сделать в этом видео, так что давай
02:44:57
начать покупать импортировать всплывающую подсказку по реагированию
02:45:01
исходя из всплывающей подсказки React Dash, мы
02:45:05
также можно импортировать стили
02:45:08
исходя из стилей точечной косой черты, тогда мы можем
02:45:12
установить постоянную переменную const Health
02:45:15
точек, это будет несколько
02:45:18
точек помощи, которые будут общими
02:45:20
из 25.
02:45:22
тогда мы знаем, что проезжаем три
02:45:24
разные вещи в информации об игроке
02:45:26
компонент, который мы передаем игроку
02:45:29
значок игрока
02:45:31
и, наконец, свойство Mt или поля верхнего уровня.
02:45:35
теперь на основе этого давайте визуализируем внешний вид
02:45:38
и почувствовав это, мы можем сначала иметь div
02:45:40
и этот div будет иметь имя класса
02:45:43
равно
02:45:45
Styles.flex Center и то, только если
02:45:49
есть верхний край, и мы хотим добавить
02:45:52
mt4, иначе мы добавим mb4
02:45:56
вот это здорово, поэтому для первой карты мы
02:45:59
хочу отодвинуть его от вершины и
02:46:01
для второго мы хотим его подтолкнуть
02:46:02
далеко от дна
02:46:04
тогда внутри у нас будет
02:46:06
тег изображения, который будет иметь это изображение
02:46:09
источник, равный значку игрока
02:46:13
и у него будет тег ALT, равный
02:46:15
игроку 2.
02:46:18
наконец-то мы можем дать ему имя класса
02:46:20
равно w-14 для ширины age-14 для
02:46:24
Объект высоты Dash содержит
02:46:27
и округлил Dash до конца, чтобы превратить его в
02:46:30
обведите, если мы сохраним это, теперь мы можем видеть
02:46:33
что у нас есть противник прямо здесь, на
02:46:35
сверху, и мы получаем синий на
02:46:38
внизу мы также можем добавить данные Dash 4
02:46:41
собственность прямо здесь, и это будет
02:46:44
быть равным Dash игрока, если мы пусты
02:46:49
это означает, что это первый игрок и
02:46:52
тогда в противном случае это будет плеер
02:46:54
2. и мы также можем передать ему данные
02:46:57
Свойство Dash Tip, которое позволит нам
02:47:01
узнать, какое изображение у этого игрока
02:47:03
представляющий
02:47:04
отлично, теперь под этим изображением мы собираемся
02:47:06
иметь div, и этот div будет
02:47:10
иметь другое свойство данных Dash 4 и
02:47:14
это будет для здоровья
02:47:17
и еще раз скопируем
02:47:19
то, что у нас было выше, так и будет
02:47:22
Тире, а затем, если там пусто, то это
02:47:24
будет 1, иначе это будет
02:47:27
2. так что мы собираемся вставить это правильно
02:47:29
тут и тогда появится подсказка по данным Dash
02:47:33
быть равным
02:47:34
здоровье
02:47:36
а затем здоровье игрока DOT вот так
02:47:40
наконец, давайте дадим ему имя класса, равное
02:47:42
чтобы стили поставили точку на здоровье игрока
02:47:46
и вот мы идем, есть бар, где
02:47:49
здоровье уйдет, но сейчас наше время
02:47:51
на самом деле засунуть решетку внутрь
02:47:54
этого отдела здоровья, поэтому для этого мы
02:47:57
должны найти способ представить
02:48:00
номер 25 как отдельные бары
02:48:03
для этого мы собираемся открыть динамический
02:48:06
блок кода, который мы собираемся сделать
02:48:08
массив, а затем мы собираемся распространить
02:48:11
массив player.health
02:48:14
тогда мы собираемся вытащить ключи из
02:48:17
это свойство, и мы хотим сопоставить его
02:48:19
что мы собираемся нанести на карту каждый
02:48:21
отдельный предмет, и мы собираемся также
02:48:24
получить индекс
02:48:26
теперь мы хотим вернуть что-то для каждого
02:48:28
свойство, и мы собираемся вернуть div
02:48:31
у этого div будет ключ, который
02:48:35
будет равен
02:48:36
давайте сделаем элемент Dash Dash, а затем
02:48:40
мы можем отобразить предмет прямо здесь
02:48:43
и давайте дадим ему имя класса
02:48:46
в данном случае это будут Стили
02:48:49
игрок в точки
02:48:51
полоска здоровья
02:48:53
если мы сохраним это, ничего не произойдет
02:48:55
это произойдет, потому что мы должны
02:48:57
подсчитать уровень здоровья, который нам предстоит
02:49:00
знаю, он зеленый, красный или
02:49:03
Апельсин
02:49:04
для этого мы можем создать новую функцию
02:49:06
на верхнем постоянном уровне здоровья
02:49:10
это заберет очки здоровья
02:49:12
и затем на основе этого мы можем проверить
02:49:15
внутри круглых скобок, если точки
02:49:19
больше или равно 12. в этом случае
02:49:23
мы можем сделать BG Dash зеленым Dash 500
02:49:27
круче, тогда у нас будет еще один
02:49:30
и мы хотим проверить, есть ли точки
02:49:32
больше или равно шести, то мы
02:49:35
хочу сделать BG Dash оранжевым Dash
02:49:38
500, а остальное мы хотим отрендерить фоновый рисунок.
02:49:42
Dash red Dash 500 и теперь мы можем поставить
02:49:46
вот эта шкала здоровья
02:49:48
это будет уровень здоровья и
02:49:51
мы собираемся передать player.health
02:49:55
если мы сохраним это, вы сможете увидеть все
02:49:57
батончики здоровья прямо здесь
02:49:59
но ты видишь, что они довольно близки
02:50:01
вместе, верно, нам придется их разделить
02:50:03
как-то, но как мы узнаем, как
02:50:06
их будет много, если мы поместим слишком большое
02:50:09
поле что-то вроде поля справа
02:50:11
ну, давай сделаем два, тогда они собираются
02:50:14
распространение слишком тонкое, но если его не много
02:50:17
из них, то нам придется увеличить
02:50:19
ширину или опустите поля, поэтому мы собираемся
02:50:22
создать еще одну функцию для расчета
02:50:24
это также константная индексация маржи
02:50:28
будет равна функции, которая
02:50:29
собираюсь принять индекс в качестве
02:50:31
параметр, а затем мы проверим
02:50:34
если индекс не равен очкам здоровья
02:50:38
минус 1
02:50:41
тогда мы собираемся вернуться
02:50:43
мистер-1, иначе мы вернемся
02:50:47
мр-0, и теперь мы можем преодолеть эту разницу
02:50:51
индексирование прямо здесь как функция и
02:50:54
также передать индекс, как только мы это вызовем
02:50:57
это будет выглядеть намного лучше
02:51:00
идеально, мне это нравится
02:51:02
теперь нам нужно сделать то же самое для
02:51:05
Мана, но мы просто собираемся провести
02:51:07
кружок, в котором будет указано количество
02:51:09
Мана, которая у нас есть, и что мы можем сделать
02:51:12
теперь мы можем закрыть этот div как есть
02:51:16
самозакрывающийся элемент div, поэтому я просто собираюсь
02:51:17
закрой это прямо здесь
02:51:19
а затем под этим блоком кода и
02:51:22
под элементом div, который его обертывает, мы можем
02:51:24
создать новый div
02:51:26
и этот div будет для маны
02:51:30
и у него также будут данные для
02:51:32
свойство, причина, по которой мы добавляем
02:51:34
это потому, что пакет реагирования
02:51:37
собираемся использовать его позже, так что как только мы
02:51:39
наведите на него курсор, и мы сможем получить больше
02:51:41
информация
02:51:42
Итак, данные для Mana Dash, если они пусты, то
02:51:47
это один, иначе можно сказать, что два
02:51:50
data Dash подсказка, это будет просто сказано
02:51:53
Мана
02:51:55
и имя класса будет
02:51:58
строка шаблона
02:52:01
стилей dot Flex Center
02:52:05
Стили с эффектом точечного стекла
02:52:08
и стили точечного игрока Мана
02:52:12
внутри мы можем визуализировать динамический
02:52:15
строка точки игрока Мана или ноль сейчас, если
02:52:20
мы сохраняем, чтобы вы могли видеть, что игра идет медленно
02:52:23
начинаем обретать смысл, потому что мы можем
02:52:25
увидеть, чтобы у обоих игроков было полное здоровье
02:52:28
так как игра только началась 25 здоровья и
02:52:31
у них обоих по 10 маны, это ровно
02:52:33
как и должно быть, это наконец-то здорово
02:52:36
давайте добавим подсказки, чтобы сделать еще больше
02:52:39
смысл игровых данных
02:52:41
сначала мы добавим всплывающую подсказку
02:52:44
компонент
02:52:45
и у этого должен быть идентификатор, чтобы
02:52:49
ID будет равен шаблону
02:52:51
строка игрока Dash и мы собираемся
02:52:54
сделай то же самое еще раз, если это
02:52:56
пусто, тогда мы скажем одно
02:52:59
иначе это будет 2. это будет
02:53:02
также иметь эффект, который будет
02:53:04
установите твердый, и он будет иметь
02:53:07
цвет фона, который мы можем установить
02:53:09
что-то вроде хеша 7f
02:53:13
4 6 Ж 0 Мне было холоднее работать
02:53:17
действительно хорошо
02:53:19
и внутри мы можем визуализировать два
02:53:21
разные теги P, первый тег P
02:53:24
собираюсь отобразить имя игрока
02:53:26
поэтому мы можем визуализировать диапазон внутри него
02:53:30
и этот диапазон будет отображать
02:53:33
имя или, скорее, оно будет называть имя
02:53:36
Прямо здесь
02:53:37
и после промежутка мы можем визуализировать
02:53:40
игрок
02:53:41
вопросительный знак точка имя игрока теперь буква P
02:53:44
тег будет иметь имя класса, равное
02:53:47
для стилей расставьте информацию об игроке и диапазон
02:53:50
будет иметь имя класса, равное
02:53:54
Стили точечно отображают информацию об игроке.
02:53:59
теперь мы можем продублировать тег скорости ниже
02:54:02
и во второй раз мы хотим отрендерить
02:54:04
адрес игрока, поэтому здесь мы
02:54:07
могу сказать игроку точку, адрес игрока
02:54:11
вопросительный знак, точечный срез от 0 до 10
02:54:13
только первые 10 символов
02:54:16
теперь давайте сохраним это, мы получим ошибку
02:54:19
потому что здесь нам не хватает точки
02:54:22
но если мы сохраним это, мы получим ошибку
02:54:25
еще раз, давайте откроем проверку
02:54:28
элемент, перейдем к консоли
02:54:31
похоже, что этот фрагмент не определен
02:54:33
потому что информация об игроке введена неправильно
02:54:36
здесь этого вообще не должно было быть
02:54:38
иногда автозамена все портит
02:54:41
но проверь это, если сейчас наведешь курсор
02:54:44
имя игрока, которого вы видите, аккаунт 2
02:54:46
назвать учетную запись 2, которая, похоже, не является
02:54:49
прямо сейчас нам придется это исправить
02:54:52
а затем мы также можем увидеть адрес
02:54:54
тот аккаунт, который великолепен
02:54:57
Теперь мне интересно, почему этот аккаунт
02:55:00
то же самое для обоих или, по крайней мере, для имени и
02:55:03
адрес тоже вроде тот же
02:55:05
для обоих, так что если ты вернешься в бой
02:55:07
Это информация об игроке
02:55:09
первым должен быть игрок 2, а
02:55:11
второй должен быть первым игроком
02:55:14
вроде бы здесь все хорошо, но
02:55:17
тогда если мы пойдем выше
02:55:20
давайте проверим, где мы их устанавливаем
02:55:22
Игрок 1 поставил игрока 2, который смотрит
02:55:25
хорошо, что мы распространили плеер, который мы
02:55:29
Распределить защиту от атаки игрока 2
02:55:32
здоровье
02:55:34
все выглядит хорошо
02:55:36
это интересно Игрок 1, игрок второй
02:55:39
да, это выглядит хорошо для меня и в
02:55:42
здесь ошибка могла быть здесь, если
02:55:44
активных игроков 0 — адрес кошелька
02:55:47
тогда мы знаем, что нулевой игрок — это
02:55:50
первый игрок, и тогда мы знаем, что
02:55:52
игрок 2 — второй индекс, иначе игрок
02:55:56
один - второй игрок, а игрок 2 -
02:55:58
Индекс 0. Мне это кажется хорошим, так как
02:56:01
ну, сейчас я не могу найти
02:56:03
проблема с этим, поэтому мы собираемся
02:56:05
обязательно вернемся к этому позже, если
02:56:08
проблема сохраняется, но теперь мы можем вернуться
02:56:10
и мы также можем добавить всплывающие подсказки для
02:56:13
здоровья и маны, так что давайте создадим
02:56:15
еще одна подсказка по реагированию
02:56:18
этот будет самозакрывающимся
02:56:21
мы собираемся дать ему идентификатор, равный
02:56:24
нить Health Dash Mt
02:56:28
в таком случае один
02:56:31
и тогда здесь у нас будет два
02:56:33
давайте добавим ему эффект твердости и
02:56:36
давайте зададим ему цвет фона
02:56:39
так же, как и раньше, чтобы мы могли скопировать
02:56:43
это прямо отсюда, это для здоровья
02:56:46
так что если вы сейчас наведете курсор на полоску здоровья
02:56:48
вы можете увидеть Здоровье 25, это здорово
02:56:50
это гораздо проще, чем читать все
02:56:52
линии индивидуально
02:56:53
и мы можем повторить это, скажем, Мана, верно
02:56:56
здесь и сохрани это, и теперь оно скажет
02:57:00
что это Мана, это красиво
02:57:02
способ добавить интерактивности в ваш
02:57:04
приложение, как видите, это было так просто
02:57:07
добавить эти всплывающие подсказки, но они помогают
02:57:09
много
02:57:10
так что мне сейчас это кажется великолепным
02:57:13
мы просто придали игре гораздо больше смысла
02:57:16
поскольку теперь у нас есть значки, у нас есть
02:57:18
полоски здоровья и полоски маны теперь
02:57:21
время, когда мы реализуем следующий шаг
02:57:24
страница битвы, которая в данном случае
02:57:27
будут сами карты
02:57:30
главная звезда шоу, так что давайте перейдем к
02:57:33
открытка и давай начнем
02:57:36
реализуя наш карточный компонент, мы можем
02:57:39
импортировать что-то, известное как наклон, из
02:57:42
реагировать
02:57:43
косая черта
02:57:45
Дэш-параллакс
02:57:47
Наклони черту, ты быстро увидишь, что
02:57:51
этот пакет делает это довольно круто и
02:57:53
тогда мы сможем импортировать эти стили
02:57:56
из стилей точечной косой черты
02:57:59
мы также можем импортировать что-то, известное как
02:58:01
все карты взяты из ресурсов с косой чертой
02:58:06
это массив всех карточных активов, которые
02:58:09
мы уже подготовили то, что хотим сделать
02:58:12
принести случайную карточную кислоту из The
02:58:15
Коллекция, поэтому давайте создадим функцию
02:58:18
генерировать
02:58:20
случайное изображение карты
02:58:23
это будет функция
02:58:25
там мы сможем использовать все карты
02:58:29
получить доступ к math.floor, а затем выполнить математику
02:58:34
случайным образом, а затем мы можем умножить это на
02:58:37
длина всех карточек минус одна эта
02:58:41
функция прямо здесь нам поможет
02:58:42
сгенерируем случайную карту, как только мы это сделаем
02:58:45
мы можем сказать, что const IMG равен
02:58:48
Сгенерируйте случайное изображение карты, а также мы
02:58:51
могу сделать то же самое для изображения 2. это
02:58:54
мы заботимся о том, чтобы каждый игрок
02:58:56
имеет уникальную карту
02:58:58
теперь наша функция принимает некоторые
02:59:01
такие параметры, как заголовок карты
02:59:03
судья и второй игрок, давайте возьмем их
02:59:06
Прямо здесь
02:59:07
карта
02:59:09
стили остальных титулов
02:59:12
судья карты и второй игрок
02:59:16
внутри здесь давайте создадим div, который
02:59:20
будет ссылка на эту карту
02:59:22
и ссылкой будет ссылка на карту
02:59:25
если мы сохраним это, это может сломать
02:59:27
приложение, как я и думал, если мы представим его как
02:59:30
пустая строка, она все равно будет
02:59:32
сломаться, потому что это не позволяет нам
02:59:34
передавать ошибочные ссылки, а пока давайте
02:59:36
удали эту часть, мы собираемся ее перенести
02:59:38
вернемся позже, когда нам нужно будет добавить
02:59:40
эти анимации взрывов
02:59:42
а пока давайте добавим имя класса, равное
02:59:45
шаблонная строка стилей Dot card
02:59:48
контейнер, а также стили отдыха
02:59:53
теперь внутри мы хотим отрендерить
02:59:55
Изображение
02:59:56
у этого изображения будет источник
02:59:58
равно игроку 2. если это игрок 2
03:00:02
тогда это будет изображение 2, иначе это
03:00:05
это будет изображение 1. там будет
03:00:08
ALT, равный карте
03:00:10
и у него будет имя класса
03:00:12
эквивалентно карте Styles Dot IMG
03:00:17
как только мы это сохраним, вы увидите одну карточку
03:00:20
хотя второй похоже сломан
03:00:22
так что что-то здесь не так
03:00:26
в этом случае, кажется, я забыл добавить
03:00:29
скобка, чтобы обернуть точку всех карт
03:00:32
длина минус один, потому что это было
03:00:34
до сих пор это было умножение математических вычислений
03:00:36
в случайное время все автомобили такой длины и
03:00:39
затем уменьшив единицу, мы хотим сделать это
03:00:42
вместе, а затем умножим их, как только сделаем
03:00:44
что мы можем увидеть две великие карты и
03:00:47
каждый раз, когда вы сохраняете файл, вы
03:00:48
собираюсь получить два новых, что
03:00:51
феноменальная игра уже выглядит
03:00:54
намного лучше, теперь вы можете видеть, что
03:00:57
значения атаки и защиты в настоящее время
03:00:59
пусто, поэтому теперь нам нужно добавить их и вас
03:01:02
также можно увидеть, что кнопки действий
03:01:04
в настоящее время не используется, так что достаточно скоро мы
03:01:07
тоже собираюсь их реализовать, но
03:01:09
это пока в отдельном компоненте
03:01:11
давайте сосредоточимся на значениях атаки и защиты
03:01:13
под нашим изображением давайте создадим div и
03:01:17
у этого div будет имя класса
03:01:20
равен шаблонной строке стилей Dot
03:01:23
Контейнер Card Point на небольших устройствах
03:01:27
у него будет левое свойство
03:01:30
21,2 процента Я нашел это значение таким, какое оно есть
03:01:34
очень специфично, но работать лучше и
03:01:37
тогда левых будет 22 процента
03:01:40
Прямо здесь
03:01:42
и, наконец, мы можем поставить ему точку стилей
03:01:44
Флекс Центр
03:01:46
внутри этого div мы хотим отобразить P
03:01:49
отметьте, что этот тег P будет иметь класс
03:01:52
имя снова равно строке шаблона
03:01:56
стили
03:01:58
Точка карты
03:02:00
и отправьте текстовое сообщение Dash Yellow Dash 400.
03:02:04
и он может отображать динамическое свойство
03:02:07
card.att
03:02:09
если мы сохраним это, вы увидите цифру 9
03:02:12
здесь и X тут же, если мы запутаемся
03:02:15
проценты немного похожи на давайте сделаем 10
03:02:18
вы можете заметить, что это немного не так, но с
03:02:20
эти ценности, мы гарантируем, что это
03:02:22
всегда будет посередине
03:02:24
с учетом сказанного, теперь мы можем дублировать это
03:02:27
div ниже
03:02:29
Здесь нам нужно изменить
03:02:31
проценты, так что давайте сделаем
03:02:33
14,2 здесь
03:02:35
для левого в данном случае не пойдет
03:02:38
быть левым, это будет правым и
03:02:40
давайте сделаем что-то вроде 15 процентов
03:02:43
и мы собираемся изменить цвет на
03:02:46
текст Дэш красный Дэш 700.
03:02:50
и вот мы и противостоящие игроки
03:02:53
значения скрыты прямо здесь и затем в
03:02:56
вот у нас есть 9 и 9 и теперь мы знаем наши
03:02:59
значения атаки и защиты, которые не
03:03:01
кажется, пока правы, но мы надеемся
03:03:03
скоро это исправлю
03:03:05
наконец, нам нужен титул нашего игрока
03:03:08
Итак, под этим div мы можем создать еще один
03:03:11
div
03:03:12
у этого div будет имя класса
03:03:15
равен шаблонной строке стилей Dot
03:03:18
текстовый контейнер карточки и стили dot Flex
03:03:24
Центр
03:03:25
внутри мы можем отобразить тег P
03:03:29
и этот тег P будет отображать
03:03:31
заголовок
03:03:33
если мы сохраним это, мы сможем увидеть учетную запись 2 и
03:03:36
JS Mastery ох как интересно это так
03:03:38
освоить JS Mastery прямо здесь, это
03:03:40
хороший
03:03:41
и затем мы хотим дать этому класс
03:03:44
имя, равное карточке Styles Dot
03:03:48
текст
03:03:49
если мы сохраним это, это выглядит
03:03:51
феноменально, если мы расширим наш браузер
03:03:55
игра больше похожа на игру
03:03:58
теперь это так красиво
03:04:00
Поле битвы, у нас есть наши изображения, но большинство
03:04:03
главное, что наши данные находятся здесь
03:04:05
хотя эти проценты, кажется, не
03:04:08
будь прямо сейчас, нам придется посмотреть

Описание:

Web 3.0 has the power to change the internet as we know it forever. You're still early in catching the trend right now and building your first blockchain application. Create your characters, create and join live battles, choose your battleground, and battle other players in real-time! This video is a collaboration between Avalanche and JS Mastery. ⭐ Avalanche - https://www.avax.network/ ⭐ Download Core - https://chromewebstore.google.com/detail/core-crypto-wallet-nft-ex/agoakfejjabomempkjlepdflaleeobhb ⭐ Learn more about the latest Avalanche News - https://medium.com/avalancheavax ⭐ Follow Avalanche on Twitter for the latest updates - https://twitter.com/avalancheavax Avalanche is an open, programmable smart contracts platform for decentralized applications. It allows you to build fast, low-cost, Solidity-compatible dApps, and launch customized blockchain networks via Subnets. Create without limits - Build anything you want, any way you want. Avalanche has the tooling and composability you need to speed from concept to launch. Learn more about building on Avalanche with the below developer resources: 📙Developer Documentation - https://docs.avax.network/ 📙Avalanche-Cli - https://github.com/ava-labs/avalanche-cli 📙Avalanche Network Runner - https://github.com/ava-labs/avalanche-network-runner 📙AvalancheJS - https://github.com/ava-labs/avalanchejs 📙Postman Collection - https://github.com/ava-labs/avalanche-postman-collection Become a Web3.0 Pioneer by Building an Advanced NFT Marketplace App: 💻 JS Mastery Pro - https://www.jsmastery.pro/ ✅ A special YOUTUBE discount code is automatically applied! 📙 The Web 3.0 Developer Roadmap : https://resource.jsmastery.pro/web3.0-roadmap 📙 The Ultimate Solidity CheatSheet : https://resource.jsmastery.pro/solidity-cheatsheet 🐛Got stuck? Get your bugs resolved immediately - https://discord.com/servers/javascript-mastery-programming-coding-community-710138849350647871 📚 Materials/References: GitHub Code (give it a star ⭐): https://github.com/adrianhajdin/project_web3_battle_game/tree/main Starter Code - https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/adrianhajdin/project_web3_battle_game/tree/main/client-starter GitHub Gist Code Snippets: https://gist.github.com/adrianhajdin/cc3befc6cc1ed69f59334edacbcdb91e Deployment - https://hostinger.com/javascriptmastery With a stunning design, interactive gameplay, smart wallet pairing, live interaction with smart contracts, and, most importantly, the ability to battle other players in real-time, AvaxGods is the best and the only Web3 battle-style online multiplayer card game that you can currently find on YouTube. In this course, you'll learn the following: - How to connect a regular React.js application to the blockchain and pair it to your wallet - You’ll also learn about the solidity programming language and how smart contracts written in Solidity work - You’ll learn how to create smart contracts and decentralized applications on the Avalanche platform 💻 Join JSM on Discord - https://discord.com/invite/n6EdbFJ 🐦 Follow JSM on Twitter - https://twitter.com/jsmasterypro 🖼️ Follow JSM on Instagram - https://www.facebook.com/unsupportedbrowser 💼 Business Inquiries: [email protected] 👇 Time Stamps 00:00:00 Intro 00:05:27 Web3 Setup 00:23:41 Client-side Setup 00:29:25 Higher Order Components 00:44:52 React Web3 Context 01:09:15 Smart Contract Interaction 01:27:52 Smart Contract Event Listeners 01:41:59 New Battle and Join Battle Page 02:22:47 Battle Page 03:07:42 Game Info 03:17:02 Change Battleground 03:29:04 Web3 Modal 03:39:47 Battle Functionality 03:47:58 Custom Error Handling 03:59:04 Explosion Animation 04:22:46 Exit Battle Functionality 04:27:38 Bug Fixes 04:39:28 Code Overview 04:41:27 Deployment

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Build and Deploy an Online Multiplayer Web 3 NFT Card Game | Full Course"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

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