Skip to content

Artser/NEW

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π”ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ курса JavaScript

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ³Ρ€Ρ‹. Π˜Π³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π˜Π³Ρ€Π° послС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс: Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΈΠ³Ρ€Ρ‹

На ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ:

  • Π‘Π΅Π»Ρ‹Π΅ стСны прСпятствий.
  • ΠšΡ€Π°ΡΠ½Ρ‹Π΅ ΠΎΠ³Π½Π΅Π½Π½Ρ‹Π΅ ΡˆΠ°Ρ€Ρ‹ ΠΈ Π»Π°Π²Ρƒ.
  • Π–Π΅Π»Ρ‚Ρ‹Π΅ ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠΈ.
  • Π˜Π³Ρ€ΠΎΠΊΠ° Π±ΠΎΡ€Π΄ΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ ΡƒΠΌΠ΅Ρ€ ΠΎΡ‚ столкновСния с ΠΎΠ³Π½Π΅Π½Π½Ρ‹ΠΌ ΡˆΠ°Ρ€ΠΎΠΌ.

Π˜Π³Ρ€ΠΎΠΊ управляСтся стрСлками с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Основная Ρ†Π΅Π»ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ уровня β€” ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠΈ.

РСализация

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ двумя способами:

  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub ΠΈΠ»ΠΈ BitBucket
  • Π’ ΠΎΠ½Π»Π°ΠΉΠ½-пСсочницС CodePen ΠΈΠ»ΠΈ Repl.it

Π‘Π°ΠΌΠ° ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π΄Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ Π²Ρ‹ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ. Π‘Π°ΠΌ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ рСкомСндуСтся.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚, Π²Π΅Ρ€Π½ΠΎ Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Об этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ВСстированиС».

РСализация Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° рСпозитория

  1. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ git.
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π² сСрвисС GitHub ΠΈΠ»ΠΈ BitBucket.
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  4. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ссылку Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HTTPS, Ссли Ρ€Π°Π½Π΅Π΅ Π²Ρ‹ Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с SSH).
  5. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ваш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ локально, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git clone.

Π˜Ρ‚ΠΎΠ³ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ настроСна связь с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π½Π° GitHub ΠΈΠ»ΠΈ BitBucket.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

  1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΡΠ²Π΅ΠΆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ ссылкС

https://github.com/netology-code/js-game/releases

  1. Π Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π°Ρ€Ρ…ΠΈΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΏΠ°ΠΏΠΊΡƒ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ рСпозитория.
  2. Π’Π°Ρˆ ΠΊΠΎΠ΄ ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ ./game.js.
  3. Для запуска ΠΈΠ³Ρ€Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Ρ„Π°ΠΉΠ» ./index.html.
  4. Для запуска тСстов ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Ρ„Π°ΠΉΠ» ./test/index.html.

ΠœΠ΅Π½ΡΡ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ рСкомСндуСтся.

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… вСрсий

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Ρ„Π°ΠΉΠ» game.js ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git add game.js.
  2. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ git commit.
  3. ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ измСнСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git push.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ локального сСрвСра (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ³Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ локально, ΠΊΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ loadLevels, дСйствия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ бСзопасности Π±Ρ€Π°Π·ΡƒΠ΅Ρ€Π°.

Один ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅Π±-сСрвСр.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр Π½Π° php
  1. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ php Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.
  2. Для запуска сСрвСра Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ php -S localhost:3000.
  3. Для запуска ΠΈΠ³Ρ€Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс http://localhost:3000/index.html.
  4. Для запуска тСстов ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс http://localhost:3000/test/index.html.
Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр Π½Π° NodeJS
  1. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ NodeJS.
  2. Π’ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm install.
  3. Для запуска сСрвСра Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm start.
  4. Для запуска ΠΈΠ³Ρ€Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс http://localhost:3000/index.html.
  5. Для запуска тСстов ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс http://localhost:3000/test/index.html.

ΠŸΡ€ΠΈ использовании NodeJS тСсты ΠΈ ΠΈΠ³Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ автоматичСски ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ².

РСализация Π² пСсочницС

CodePen

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½-пСсочницС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:

  1. Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° сСрвисС CodePen.
  2. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ ссылкС:

https://codepen.io/dfitiskin/pen/XRZqWd?editors=0010

  1. ΠΠ°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ForkΒ», Ρ‚Π΅ΠΌ самым создав свою копию Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ.
  2. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ³Ρ€Ρ‹, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуя инструкции, Π² ΠΎΠΊΠ½Π΅ Β«JSΒ».
  3. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ сохраняйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ измСнСния.
  4. ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠΉΡ‚Π΅ наставнику Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ссылку Π½Π° ваш ΠΏΠ΅Π½.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ использованию сСрвиса CodePen: https://netology-university.bitbucket.io/wm/resourses/codepen-guide.html

Repl.it

  1. Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° сСрвисС Repl.it.
  2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ пСсочницу Β«HTML, CSS, JSΒ»

https://repl.it/languages/web_project

  1. Π’ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ index.html помСститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <link rel="stylesheet" href="https://netology-code.github.io/js-game/css/main.css">
</head>
<body>
  <script src="https://netology-code.github.io/js-game/js/app.js"></script>
  <script src="./index.js"></script>
</body>
</html>
  1. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«SaveΒ».
  2. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ³Ρ€Ρ‹, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуя инструкции, Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«index.jsΒ».
  3. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ сохраняйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ измСнСния.
  4. ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠΉΡ‚Π΅ наставнику Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ссылку Π½Π° Π²Π°ΡˆΡƒ пСсочницу, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Β«ShareΒ».

ВСстированиС

Π’ Ρ„Π°ΠΉΠ»Π΅ ./test/index.html настроСна срСда Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования вашСго ΠΊΠΎΠ΄Π°. Она провСряСт созданныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° соотвСтствиС трСбованиям. И Ссли Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ расхоТдСния, сообщаСт ΠΎΠ± ошибкС. Π’Π΅ΠΌ самым, тСсты β€” ваш Π½Π°Π²ΠΈΠ³Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π² вашСм ΠΊΠΎΠ΄Π΅ Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ, Π° ΠΊΠ°ΠΊΡƒΡŽ Π½Π΅Ρ‚.

По тСстам ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ. МоТно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… тСстов, Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°ΡΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π½Ρ‹Π΅ тСсты ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅.

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊΠ»ΠΈΠΊΠ°ΠΉΡ‚Π΅ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡƒΠ½ΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΌ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.
  2. ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ тСсты, оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄.
  3. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ тСсту.
  4. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ тСст ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ.
  5. Если Π΅Ρ‰Π΅ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½Π½Ρ‹Π΅ тСсты, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 3.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся Β«Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· тСстированиС» ΠΈΠ»ΠΈ TDD. Π—Π° Ρ‚Π΅ΠΌ лишь ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ тСсты ΡƒΠΆΠ΅ написаны.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΈ порядок Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ максимально просто ΠΈ быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

  1. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы ΠΈΠ³Ρ€Ρ‹: Vector, Actor ΠΈ Level.
  2. ПослС этого Π²Ρ‹ ΡƒΠΆΠ΅ смоТСтС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ.
const grid = [
  new Array(3),
  ['wall', 'wall', 'lava']
];
const level = new Level(grid);
runLevel(level, DOMDisplay);

На экранС отобразится схСма уровня. Π£Π·Π½Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ runLevel ΠΈ класс DOMDisplay Π½ΠΈΠΆΠ΅.

  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ LevelParser, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСкстовой схСмы:
const schema = [
  '         ',
  '         ',
  '         ',
  '         ',
  '     !xxx',
  '         ',
  'xxx!     ',
  '         '
];
const parser = new LevelParser();
const level = parser.parse(schema);
runLevel(level, DOMDisplay);
  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Player, помСститС Π΅Π³ΠΎ символ Π½Π° схСму ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΡ€ΠΈ создании парсСра:
const schema = [
  '         ',
  '         ',
  '         ',
  '         ',
  '     !xxx',
  ' @       ',
  'xxx!     ',
  '         '
];
const actorDict = {
  '@': Player
}
const parser = new LevelParser(actorDict);
const level = parser.parse(schema);
runLevel(level, DOMDisplay);
  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ ΠΈΡ… символы Π½Π° схСму ΠΈ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ парсСра.
  2. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ loadLevels ΠΈ запуск ΠΈΠ³Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ runGame.
  3. Когда ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ всС ΡƒΡ€ΠΎΠ²Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ alert, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ ΠΏΠΎΠ±Π΅Π΄Π΅.

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Класс DOMDisplay

ΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° отрисовку Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ сСтки ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΈ двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ β€” ΡƒΠ·Π΅Π» DOM, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Level, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

НСпосрСдствСнно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ потрСбуСтся. Π•Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ runLevel ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ runGame.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

const schema = [
  '         ',
  '         ',
  '    =    ',
  '         ',
  '     !xxx',
  ' @       ',
  'xxx!     ',
  '         '
];
const actorDict = {
  '@': Player,
  '=': HorizontalFireball
}
const parser = new LevelParser(actorDict);
const level = parser.parse(schema);
DOMDisplay(document.body, level);

ПослС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ отрисовано исходноС состояниС сСтки ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, всС двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Но эта схСма Π±ΡƒΠ΄Π΅Ρ‚ статичной.

Ѐункция runLevel

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ процСсс рСгулярной отрисовки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Level) ΠΈ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π° отрисовку. Π’ случаС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс DOMDisplay.

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡΡ статусом Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΠ³Ρ€Ρ‹, строка. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Level ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния won ΠΈΠ»ΠΈ lost.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

const schema = [
  '         ',
  '         ',
  '    =    ',
  '       o ',
  '     !xxx',
  ' @       ',
  'xxx!     ',
  '         '
];
const actorDict = {
  '@': Player,
  '=': HorizontalFireball
}
const parser = new LevelParser(actorDict);
const level = parser.parse(schema);
runLevel(level, DOMDisplay)
  .then(status => console.log(`Π˜Π³Ρ€ΠΎΠΊ ${status}`));

ПослС Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ отрисована схСма уровня, двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ, ΠΈ Π²Ρ‹ смоТСтС ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

Ѐункция runGame

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ процСсс прохоТдСния ΠΈΠ³Ρ€Ρ‹, состоящСй ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прохоТдСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: список схСм ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, массив, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” схСма (массив строк); парсСр схСм, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ LevelParser, ΠΈ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π° отрисовку. Π’ случаС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс DOMDisplay.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ всС ΡƒΡ€ΠΎΠ²Π½ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

const schemas = [
  [
    '         ',
    '         ',
    '    =    ',
    '       o ',
    '     !xxx',
    ' @       ',
    'xxx!     ',
    '         '
  ],
  [
    '      v  ',
    '    v    ',
    '  v      ',
    '        o',
    '        x',
    '@   x    ',
    'x        ',
    '         '
  ]
];
const actorDict = {
  '@': Player,
  'v': FireRain
}
const parser = new LevelParser(actorDict);
runGame(schemas, parser, DOMDisplay)
  .then(() => console.log('Π’Ρ‹ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ ΠΏΡ€ΠΈΠ·!'));

Запустит ΠΈΠ³Ρ€Ρƒ ΠΈΠ· Π΄Π²ΡƒΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Ѐункция loadLevels

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. НС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡΡ JSON-строкой, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ массив схСм ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π’Π΅ΠΊΡ‚ΠΎΡ€

НСобходимо Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Vector, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ располоТСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ пространствС ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ оси X ΠΈ ΠΏΠΎ оси Y, числа, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0.

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со свойствами x ΠΈ y, Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² конструктор ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ.

ΠœΠ΅Ρ‚ΠΎΠ΄ plus

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector.

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ МоТно ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Vector.

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ суммой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ суммируСмых Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ².

ΠœΠ΅Ρ‚ΠΎΠ΄ times

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, число.

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ исходного Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π½Π° ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

const start = new Vector(30, 50);
const moveTo = new Vector(5, 10);
const finish = start.plus(moveTo.times(2));

console.log(`Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ располоТСниС: ${start.x}:${start.y}`);
console.log(`Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ располоТСниС: ${finish.x}:${finish.y}`);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠ΄Π°:

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ располоТСниС: 30:50
Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ располоТСниС: 40:70

ДвиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

НСобходимо Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Actor, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… пСрСсСчСниС.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: располоТСниС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector, Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector. ВсС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ 0:0, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1x1 ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 0:0.

Если Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Vector, Ρ‚ΠΎ конструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Бвойства

Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ свойство pos, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Vector.

Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ свойство size, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Vector.

Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ свойство speed, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Vector.

Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ act, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния left, top, right, bottom, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСны Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ осям X ΠΈ Y с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π΅Π³ΠΎ располоТСния ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свойство type β€” строку со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ actor, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

ΠœΠ΅Ρ‚ΠΎΠ΄ isIntersect

ΠœΠ΅Ρ‚ΠΎΠ΄ провСряСт, пСрСсСкаСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈ Ссли Π΄Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, ΠΈΠ½Π°Ρ‡Π΅ – false.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Actor. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° этот ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ пСрСсСкаСтся сам с собой.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ смСТныС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

const items = new Map();
const player = new Actor();
items.set('Π˜Π³Ρ€ΠΎΠΊ', player);
items.set('ΠŸΠ΅Ρ€Π²Π°Ρ ΠΌΠΎΠ½Π΅Ρ‚Π°', new Actor(new Vector(10, 10)));
items.set('Вторая ΠΌΠΎΠ½Π΅Ρ‚Π°', new Actor(new Vector(15, 5)));

function position(item) {
  return ['left', 'top', 'right', 'bottom']
    .map(side => `${side}: ${item[side]}`)
    .join(', ');  
}

function movePlayer(x, y) {
  player.pos = player.pos.plus(new Vector(x, y));
}

function status(item, title) {
  console.log(`${title}: ${position(item)}`);
  if (player.isIntersect(item)) {
    console.log(`Π˜Π³Ρ€ΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π» ${title}`);
  }
}

items.forEach(status);
movePlayer(10, 10);
items.forEach(status);
movePlayer(5, -5);
items.forEach(status);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Π˜Π³Ρ€ΠΎΠΊ: left: 0, top: 0, right: 1, bottom: 1
ΠŸΠ΅Ρ€Π²Π°Ρ ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 10, top: 10, right: 11, bottom: 11
Вторая ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 15, top: 5, right: 16, bottom: 6
Π˜Π³Ρ€ΠΎΠΊ: left: 10, top: 10, right: 11, bottom: 11
ΠŸΠ΅Ρ€Π²Π°Ρ ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 10, top: 10, right: 11, bottom: 11
Π˜Π³Ρ€ΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π» ΠŸΠ΅Ρ€Π²Π°Ρ ΠΌΠΎΠ½Π΅Ρ‚Π°
Вторая ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 15, top: 5, right: 16, bottom: 6
Π˜Π³Ρ€ΠΎΠΊ: left: 15, top: 5, right: 16, bottom: 6
ΠŸΠ΅Ρ€Π²Π°Ρ ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 10, top: 10, right: 11, bottom: 11
Вторая ΠΌΠΎΠ½Π΅Ρ‚Π°: left: 15, top: 5, right: 16, bottom: 6
Π˜Π³Ρ€ΠΎΠΊ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π» Вторая ΠΌΠΎΠ½Π΅Ρ‚Π°

Π˜Π³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Level Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ схСму ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ уровня, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ всС двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π½Ρ‘ΠΌ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ прСдставляСт собой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ высоту.

Π‘Π΅Ρ‚ΠΊΠ° уровня прСдставляСт собой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠ΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, прСдставлСнноС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ массив β€” строки ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля; индСкс этого массива соотвСтствуСт ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Y Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ с индСксом 5 соотвСтствуСт строкС с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ Y, Ρ€Π°Π²Π½ΠΎΠΉ 5. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы, располоТСнныС Π² элСмСнтах массива строк, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ячСйки поля. ИндСкс этих массивов соотвСтствуСт ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ X. НапримСр, элСмСнт с индСксом 10, соотвСтствуСт ячСйкС с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ X, Ρ€Π°Π²Π½ΠΎΠΉ 10.

Π’Π°ΠΊ ΠΊΠ°ΠΊ grid β€” это Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сСтку ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ находится Π² ячСйкС с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ X=10 ΠΈ Y=5 (10:5), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ grid[5][10]. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого элСмСнта Ρ€Π°Π²Π½ΠΎ undefined, Ρ‚ΠΎ эта ячСйка пуста. Π˜Π½Π°Ρ‡Π΅ Ρ‚Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ строка, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ прСпятствиС. НапримСр, wall β€” для стСны ΠΈ lava β€” для Π»Π°Π²Ρ‹. ΠžΡ‚ΡΡŽΠ΄Π° Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΊΡ‚: всС прСпятствия ΠΈΠΌΠ΅ΡŽΡ‚ цСлочислСнныС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: сСтку ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля с прСпятствиями, массив массивов строк, ΠΈ список двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Actor. Оба Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅.

Бвойства

Π˜ΠΌΠ΅Π΅Ρ‚ свойство grid β€” сСтку ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля. Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив строк.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство actors β€” список двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Actor.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство player β€” двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” свойство type β€” Ρ€Π°Π²Π½ΠΎ player. Π˜Π³ΠΎΡ€ΠΎΠΊ пСрСдаётся с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ двиТущимися ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство height β€” высоту ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Ρ€Π°Π²Π½ΠΎΠ΅ числу строк Π² сСткС ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство width β€” ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Ρ€Π°Π²Π½ΠΎΠ΅ числу ячССк Π² строкС сСтки ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΈ этом, Ссли Π² Ρ€Π°Π·Π½Ρ‹Ρ… строках Ρ€Π°Π·Π½ΠΎΠ΅ число ячССк, Ρ‚ΠΎ width Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ количСству ячССк Π² строкС.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство status β€” состояниС прохоТдСния уровня, Ρ€Π°Π²Π½ΠΎΠ΅ null послС создания.

Π˜ΠΌΠ΅Π΅Ρ‚ свойство finishDelay β€” Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ послС окончания ΠΈΠ³Ρ€Ρ‹, Ρ€Π°Π²Π΅Π½ 1 послС создания. НСобходим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ послС Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΠ° ΠΈΠ³Ρ€Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»Π°ΡΡŒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.

ΠœΠ΅Ρ‚ΠΎΠ΄ isFinished

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ Π»ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. НС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли свойство status Π½Π΅ Ρ€Π°Π²Π½ΠΎ null ΠΈ finishDelay мСньшС нуля.

ΠœΠ΅Ρ‚ΠΎΠ΄ actorAt

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, располоТСн Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΈ Ссли Π΄Π°, Π²Π΅Ρ€Π½Ρ‘Ρ‚ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Actor. Если Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Actor, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ undefined, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ двиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ пСрСсСкаСтся Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Actor, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСсСкаСтся с Π½ΠΈΠΌ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. Если пСрСсСкаСтся с нСсколькими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄ obstacleAt

Аналогично ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ actorAt опрСдСляСт, Π½Π΅Ρ‚ Π»ΠΈ прСпятствия Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ мСстС. Π’Π°ΠΊΠΆΠ΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля.

Π’Π°ΠΊ ΠΊΠ°ΠΊ двиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ сквозь стСны, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡƒΠ΄Π° собираСмся ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Π΅ΠΊΡ‚ΠΎΡ€ Vector, ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΠΆΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€ Vector. Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ Vector, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’Π΅Ρ€Π½Π΅Ρ‚ строку, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΡŽ ΠΈΠ· сСтки ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ двумя ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ undefined, Ссли Π² этой области прСпятствий Π½Π΅Ρ‚.

Если описанная двумя Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Π΅Ρ€Π½Π΅Ρ‚ строку lava, Ссли ΠΎΠ±Π»Π°ΡΡ‚ΡŒ выступаСт снизу. И Π²Π΅Ρ€Π½Π΅Ρ‚ wall Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях. Π‘ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ слСва, свСрху ΠΈ справа ΠΎΠ³ΠΎΡ€ΠΎΠΆΠ΅Π½ΠΎ стСной ΠΈ снизу Ρƒ Π½Π΅Π³ΠΎ ΡΠΌΠ΅Ρ€Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π»Π°Π²Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ removeActor

ΠœΠ΅Ρ‚ΠΎΠ΄ удаляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля. Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π½Π΅Ρ‚, Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Actor. Находит ΠΈ удаляСт Π΅Π³ΠΎ.

ΠœΠ΅Ρ‚ΠΎΠ΄ noMoreActors

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π»ΠΈ Π΅Ρ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” Ρ‚ΠΈΠΏ двиТущСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, строка.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого Ρ‚ΠΈΠΏΠ° (свойство type). Π˜Π½Π°Ρ‡Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false.

ΠœΠ΅Ρ‚ΠΎΠ΄ playerTouched

Один ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Π½ΡΠ΅Ρ‚ состояниС ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΏΡ€ΠΈ касании ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ прСпятствий.

Если состояниС ΠΈΠ³Ρ€Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ null, Ρ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΈΠ³Ρ€Π° ΡƒΠΆΠ΅ ΠΈ Ρ‚Π°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΈΠΏ прСпятствия ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, строка. ДвиТущийся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ коснулся ΠΈΠ³Ρ€ΠΎΠΊ, β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Actor, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ строку lava ΠΈΠ»ΠΈ fireball, Ρ‚ΠΎ мСняСм статус ΠΈΠ³Ρ€Ρ‹ Π½Π° lost (свойство status). Π˜Π³Ρ€ΠΎΠΊ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ касании Π»Π°Π²Ρ‹ ΠΈΠ»ΠΈ ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ»Π½ΠΈΠΈ.

Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ строку coin, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ эту ΠΌΠΎΠ½Π΅Ρ‚Ρƒ с ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля. Если ΠΏΡ€ΠΈ этом Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ большС ΠΌΠΎΠ½Π΅Ρ‚, Ρ‚ΠΎ мСняСм статус ΠΈΠ³Ρ€Ρ‹ Π½Π° won. Π˜Π³Ρ€ΠΎΠΊ ΠΏΠΎΠ±Π΅ΠΆΠ΄Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° собираСт всС ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅. ΠžΡ‚ΡΡŽΠ΄Π° Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π±Π΅Π· ΠΌΠΎΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°

const grid = [
  [undefined, undefined],
  ['wall', 'wall']
];

function MyCoin(title) {
  this.type = 'coin';
  this.title = title;
}
MyCoin.prototype = Object.create(Actor);
MyCoin.constructor = MyCoin;

const goldCoin = new MyCoin('Π—ΠΎΠ»ΠΎΡ‚ΠΎ');
const bronzeCoin = new MyCoin('Π‘Ρ€ΠΎΠ½Π·Π°');
const player = new Actor();
const fireball = new Actor();

const level = new Level(grid, [ goldCoin, bronzeCoin, player, fireball ]);

level.playerTouched('coin', goldCoin);
level.playerTouched('coin', bronzeCoin);

if (level.noMoreActors('coin')) {
  console.log('ВсС ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ собраны');
  console.log(`Бтатус ΠΈΠ³Ρ€Ρ‹: ${level.status}`);
}

const obstacle = level.obstacleAt(new Vector(1, 1), player.size);
if (obstacle) {
  console.log(`На ΠΏΡƒΡ‚ΠΈ прСпятствиС: ${obstacle}`);
}

const otherActor = level.actorAt(player);
if (otherActor === fireball) {
  console.log('ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ столкнулся с ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ»Π½ΠΈΠ΅ΠΉ');
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния:

ВсС ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ собраны
Бтатус ΠΈΠ³Ρ€Ρ‹: won
На ΠΏΡƒΡ‚ΠΈ прСпятствиС: wall
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ столкнулся с ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ»Π½ΠΈΠ΅ΠΉ

ΠŸΠ°Ρ€ΡΠ΅Ρ€ уровня

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса LevelParser позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Level ΠΈΠ· массива строк ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ:

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива соотвСтствуСт строкС Π² сСткС уровня.
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ символ строки соотвСтствуСт ячСйкС Π² сСткС уровня.
  • Π‘ΠΈΠΌΠ²ΠΎΠ» опрСдСляСт Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ прСпятствия.
  • ИндСкс строки ΠΈ индСкс символа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ исходныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ прСпятствия.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ прСпятствия ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля:

  • x β€” стСна, прСпятствиС
  • ! β€” Π»Π°Π²Π°, прСпятствиС
  • @ β€” ΠΈΠ³Ρ€ΠΎΠΊ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • o β€” ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠ°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • = β€” двиТущаяся Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΡˆΠ°Ρ€ΠΎΠ²Π°Ρ молния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • | β€” двиТущаяся Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΡˆΠ°Ρ€ΠΎΠ²Π°Ρ молния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • v β€” ΠΎΠ³Π½Π΅Π½Π½Ρ‹ΠΉ доТдь, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ слово «символ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±ΡƒΠΊΠ²Ρƒ, Ρ†ΠΈΡ„Ρ€Ρƒ ΠΈΠ»ΠΈ Π·Π½Π°ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² строках, Π° Π½Π΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Symbol.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ символы ΠΈΠ· тСкстового прСдставлСния уровня, Π° значСниями β€” конструкторы, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄ actorFromSymbol

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ символ, строка. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ Π΅Π³ΠΎ символу, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. Если Π² словарС Π½Π΅ нашлось ΠΊΠ»ΡŽΡ‡Π° с Ρ‚Π°ΠΊΠΈΠΌ символом, Π²Π΅Ρ€Π½Π΅Ρ‚ undefined.

ΠœΠ΅Ρ‚ΠΎΠ΄ obstacleFromSymbol

Аналогично ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ символ, строка. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ символу прСпятствия. Если символу Π½Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСпятствия, Ρ‚ΠΎ Π²Π΅Ρ€Π½Π΅Ρ‚ undefined.

Π’Π΅Ρ€Π½Π΅Ρ‚ wall, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ x.

Π’Π΅Ρ€Π½Π΅Ρ‚ lava, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ !.

Π’Π΅Ρ€Π½Π΅Ρ‚ undefined, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ символ.

ΠœΠ΅Ρ‚ΠΎΠ΄ createGrid

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив строк ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² массив массивов, Π² ячСйках ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ хранится Π»ΠΈΠ±ΠΎ строка, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΡŽ, Π»ΠΈΠ±ΠΎ undefined.

ДвиТущиСся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сСткС.

ΠœΠ΅Ρ‚ΠΎΠ΄ createActors

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив строк ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² массив двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для ΠΈΡ… создания классы ΠΈΠ· словаря.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ массивС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ количСству символов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² массивС строк.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан с использованиСм Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π½Π° основС индСкса строки Π² массивС (Y) ΠΈ индСкса символа Π² строкС (X).

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ использован класс ΠΈΠ· словаря, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ символу. ΠŸΡ€ΠΈ этом, Ссли этот класс Π½Π΅ являСтся наслСдником Actor, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ символ игнорируСтся, ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ создаСтся.

ΠœΠ΅Ρ‚ΠΎΠ΄ parse

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив строк, создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ прСпятствиями ΠΈ двиТущимися ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π½Π° основС символов ΠΈ словаря.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

const plan = [
  ' @ ',
  'x!x'
];

const actorsDict = Object.create(null);
actorsDict['@'] = Actor;

const parser = new LevelParser(actorsDict);
const level = parser.parse(plan);

level.grid.forEach((line, y) => {
  line.forEach((cell, x) => console.log(`(${x}:${y}) ${cell}`));
});

level.actors.forEach(actor => console.log(`(${actor.pos.x}:${actor.pos.y}) ${actor.type}`));

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠ΄Π°:

(0:0) undefined
(1:0) undefined
(2:0) undefined
(0:1) wall
(1:1) lava
(2:1) wall
(1:0) actor

Шаровая молния

Класс Fireball станСт ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ для двиТущихся опасностСй Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ вСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» двиТущСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Actor.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector. Оба Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ 0:0 ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 0:0.

Бвойства

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свойство type со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ fireball. Π­Ρ‚ΠΎ свойство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 1:1 Π² свойствС size, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector.

ΠœΠ΅Ρ‚ΠΎΠ΄ getNextPosition

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ Vector ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΡˆΠ°Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ»Π½ΠΈΠΈ. Π­Ρ‚ΠΎ функция Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. И ΠΊΠ°ΠΊ Π² школьной Π·Π°Π΄Π°Ρ‡Π΅, новая позиция β€” это тСкущая позиция плюс ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, умноТСнная Π½Π° врСмя. И Ρ‚Π°ΠΊ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· осСй.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, врСмя, число. АргумСнт Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ 1.

ΠœΠ΅Ρ‚ΠΎΠ΄ handleObstacle

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ столкновСниС ΠΌΠΎΠ»Π½ΠΈΠΈ с прСпятствиСм. НС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НичСго Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚.

ΠœΠ΅Π½ΡΠ΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ скорости Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ. Если ΠΎΠ½ Π±Ρ‹Π» 5:5, Ρ‚ΠΎ послС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ -5:-5.

ΠœΠ΅Ρ‚ΠΎΠ΄ act

ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ состояниС двиТущСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” врСмя, число, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Level.

ΠœΠ΅Ρ‚ΠΎΠ΄ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. Но Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

  1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ врСмя.
  2. Π’Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π½Π΅ пСрСсСчСтся Π»ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ прСпятствиСм. ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ двиТущимися ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.
  3. Если Π½Π΅Ρ‚, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  4. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСсСкаСтся с прСпятствиСм, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ это событиС. ΠŸΡ€ΠΈ этом Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования

const time = 5;
const speed = new Vector(1, 0);
const position = new Vector(5, 5);

const ball = new Fireball(position, speed);

const nextPosition = ball.getNextPosition(time);
console.log(`Новая позиция: ${nextPosition.x}: ${nextPosition.y}`);

ball.handleObstacle();
console.log(`ВСкущая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: ${ball.speed.x}: ${ball.speed.y}`);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π°:

Новая позиция: 10: 5
ВСкущая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: -1: 0

Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΡˆΠ°Ρ€ΠΎΠ²Π°Ρ молния

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс HorizontalFireball. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ двиТСтся ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 2 ΠΈ ΠΏΡ€ΠΈ столкновСнии с прСпятствиСм двиТСтся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector. И ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1:1 ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Ρ€Π°Π²Π½ΠΎΠΉ 2 ΠΏΠΎ оси X.

Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΡˆΠ°Ρ€ΠΎΠ²Π°Ρ молния

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс VerticalFireball. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ двиТСтся ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 2 ΠΈ ΠΏΡ€ΠΈ столкновСнии с прСпятствиСм двиТСтся Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector. И ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1:1 ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Ρ€Π°Π²Π½ΠΎΠΉ 2 ΠΏΠΎ оси Y.

ΠžΠ³Π½Π΅Π½Π½Ρ‹ΠΉ доТдь

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс FireRain. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ двиТСтся ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 3 ΠΈ ΠΏΡ€ΠΈ столкновСнии с прСпятствиСм Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ· исходного полоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΎ ΠΏΡ€ΠΈ создании.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector. И ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1:1 ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Ρ€Π°Π²Π½ΠΎΠΉ 3 ΠΏΠΎ оси Y.

ΠœΠΎΠ½Π΅Ρ‚Π°

Класс Coin Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠΈ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΊ сСбС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ постоянно ΠΏΠΎΠ΄ΠΏΡ€Ρ‹Π³ΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… своСй ячСйки. Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ вСсь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» двиТущСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Actor.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ полоТСния Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector.

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 0,6:0,6. А Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² конструктор, Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ 0,2:0,1.

Бвойства

Бвойство type созданного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ coin.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ подпрыгивания, springSpeed, равная 8;
  • Радиус подпрыгивания, springDist, Ρ€Π°Π²Π΅Π½ 0.07;
  • Π€Π°Π·Π° подпрыгивания, spring, случайноС число ΠΎΡ‚ 0 Π΄ΠΎ 2Ο€.

ΠœΠ΅Ρ‚ΠΎΠ΄ updateSpring

ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Ρ„Π°Π·Ρƒ подпрыгивания. Π­Ρ‚ΠΎ функция Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” врСмя, число, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1.

НичСго Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„Π°Π·Ρƒ spring, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² Π΅Ρ‘ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ springSpeed, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π° врСмя.

ΠœΠ΅Ρ‚ΠΎΠ΄ getSpringVector

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ подпрыгивания. НС ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡ€Ρ‹Π³ΠΈΠ²Π°Π½ΠΈΠ΅ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ оси Y, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° X Π²Π΅ΠΊΡ‚ΠΎΡ€Π° всСгда Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ.

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Ρ€Π°Π²Π½Π° синусу Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„Π°Π·Ρ‹, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° радиус.

ΠœΠ΅Ρ‚ΠΎΠ΄ getNextPosition

ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„Π°Π·Ρƒ, создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΌΠΎΠ½Π΅Ρ‚ΠΊΠΈ.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” врСмя, число, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1.

Новый Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π°Π²Π΅Π½ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ полоТСния, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ подпрыгивания. Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ полоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² конструкторС, Π° Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄ act

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” врСмя. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ Π΅Ρ‘ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ. НичСго Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚.

Π˜Π³Ρ€ΠΎΠΊ

Класс Player содСрТит Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» двиТущСгося ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. Π”ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ возмоТности Actor.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ полоТСния Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Vector.

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² конструктор, Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ 0:-0,5. Π˜ΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 0,8:1,5. И ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ 0:0.

Бвойства

Π˜ΠΌΠ΅Π΅Ρ‚ свойство type, Ρ€Π°Π²Π½ΠΎΠ΅ player.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published