Π ΡΠ°ΠΌΠΊΠ°Ρ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ³ΡΡ. ΠΠ³ΡΠ° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
ΠΠ³ΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
ΠΠ° ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ:
- ΠΠ΅Π»ΡΠ΅ ΡΡΠ΅Π½Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠΉ.
- ΠΡΠ°ΡΠ½ΡΠ΅ ΠΎΠ³Π½Π΅Π½Π½ΡΠ΅ ΡΠ°ΡΡ ΠΈ Π»Π°Π²Ρ.
- ΠΠ΅Π»ΡΡΠ΅ ΠΌΠΎΠ½Π΅ΡΠΊΠΈ.
- ΠΠ³ΡΠΎΠΊΠ° Π±ΠΎΡΠ΄ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ½ ΡΠΌΠ΅Ρ ΠΎΡ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Ρ ΠΎΠ³Π½Π΅Π½Π½ΡΠΌ ΡΠ°ΡΠΎΠΌ.
ΠΠ³ΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅Π»ΠΊΠ°ΠΌΠΈ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ β ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΠΌΠΎΠ½Π΅ΡΠΊΠΈ.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- ΠΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π²Π°Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ GitHub ΠΈΠ»ΠΈ BitBucket
- Π ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ CodePen ΠΈΠ»ΠΈ Repl.it
Π‘Π°ΠΌΠ° ΠΈΠ³ΡΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΠ΅ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ , Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ Π²Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ. Π‘Π°ΠΌ ΠΊΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡΡ, Π²Π΅ΡΠ½ΠΎ Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠ± ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β».
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ git.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ GitHub ΠΈΠ»ΠΈ BitBucket.
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
- Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ HTTPS, Π΅ΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅ Π²Ρ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ SSH).
- ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ Π²Π°Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
git clone
.
ΠΡΠΎΠ³ΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΡΠ²ΡΠ·Ρ Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ Π½Π° GitHub ΠΈΠ»ΠΈ BitBucket.
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ²Π΅ΠΆΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
https://github.com/netology-code/js-game/releases
- Π Π°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ Π°ΡΡ ΠΈΠ² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΏΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
- ΠΠ°Ρ ΠΊΠΎΠ΄ ΠΏΠΈΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π΅
./game.js
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ°ΠΉΠ»
./index.html
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ°ΠΉΠ»
./test/index.html
.
ΠΠ΅Π½ΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ.
- ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡΡ ΡΠ°ΠΉΠ»
game.js
ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉgit add game.js
. - Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ
git commit
. - ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
git push
.
ΠΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ³ΡΡ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ loadLevels
, Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π±ΡΠ°Π·ΡΠ΅ΡΠ°.
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΎΠ±ΠΎΠΉΡΠΈ ΡΡΠΎ β Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ php Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ.
- ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
php -S localhost:3000
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π°Π΄ΡΠ΅Ρ
http://localhost:3000/index.html
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π°Π΄ΡΠ΅Ρ
http://localhost:3000/test/index.html
.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ NodeJS.
- Π ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
npm install
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
npm start
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π°Π΄ΡΠ΅Ρ
http://localhost:3000/index.html
. - ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π°Π΄ΡΠ΅Ρ
http://localhost:3000/test/index.html
.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ NodeJS ΡΠ΅ΡΡΡ ΠΈ ΠΈΠ³ΡΠ° Π±ΡΠ΄ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ:
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²ΠΈΡΠ΅ CodePen.
- ΠΡΠΊΡΡΡΡ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
https://codepen.io/dfitiskin/pen/XRZqWd?editors=0010
- ΠΠ°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Β«ForkΒ», ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΎΠ·Π΄Π°Π² ΡΠ²ΠΎΡ ΠΊΠΎΠΏΠΈΡ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΠΈ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ³ΡΡ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π² ΠΎΠΊΠ½Π΅ Β«JSΒ».
- ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
- ΠΡΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ Π½Π°ΡΡΠ°Π²Π½ΠΈΠΊΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π²Π°Ρ ΠΏΠ΅Π½.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° CodePen: https://netology-university.bitbucket.io/wm/resourses/codepen-guide.html
- ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅ΡΠ²ΠΈΡΠ΅ Repl.it.
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΡ Β«HTML, CSS, JSΒ»
https://repl.it/languages/web_project
- ΠΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅
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>
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ Β«SaveΒ».
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈΠ³ΡΡ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«index.jsΒ».
- ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
- ΠΡΠΏΡΠ°Π²Π»ΡΠΉΡΠ΅ Π½Π°ΡΡΠ°Π²Π½ΠΈΠΊΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π²Π°ΡΡ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Β«ShareΒ».
Π ΡΠ°ΠΉΠ»Π΅ ./test/index.html
Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΡΡΠ΅Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ. Π Π΅ΡΠ»ΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ, ΡΠ΅ΡΡΡ β Π²Π°Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΠΊΠ°ΠΊΡΡ ΡΠ°ΡΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ, Π° ΠΊΠ°ΠΊΡΡ Π½Π΅Ρ.
ΠΠΎ ΡΠ΅ΡΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ², Π½Π΅ ΠΎΡΠ²Π»Π΅ΠΊΠ°ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π°Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΏΠ΅ΡΠ½ΡΠ΅.
ΠΡΠΎΡΡΠΎ ΠΊΠ»ΠΈΠΊΠ°ΠΉΡΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠ½ΠΊΡ, ΡΡΠΎΠ±Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π½Π΅ΠΌ.
ΠΡΠΎΡΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
- ΠΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡ, ΠΎΡΡΠ°Π²ΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΠ²Π°Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠ΅ΡΡΡ.
- Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ.
- ΠΡΠ»ΠΈ Π΅ΡΠ΅ ΠΎΡΡΠ°Π»ΠΈΡΡ ΠΏΡΠΎΠ²Π°Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ, Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠ½ΠΊΡΡ 3.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β» ΠΈΠ»ΠΈ TDD. ΠΠ° ΡΠ΅ΠΌ Π»ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΡ ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ:
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΠ³ΡΡ:
Vector
,Actor
ΠΈLevel
. - ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Ρ ΡΠΆΠ΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΠ³ΡΡ.
const grid = [
new Array(3),
['wall', 'wall', 'lava']
];
const level = new Level(grid);
runLevel(level, DOMDisplay);
ΠΠ° ΡΠΊΡΠ°Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡ ΡΡ
Π΅ΠΌΠ° ΡΡΠΎΠ²Π½Ρ. Π£Π·Π½Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ runLevel
ΠΈ ΠΊΠ»Π°ΡΡ DOMDisplay
Π½ΠΈΠΆΠ΅.
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅
LevelParser
, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΠΎΠ²Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΡ Π΅ΠΌΡ:
const schema = [
' ',
' ',
' ',
' ',
' !xxx',
' ',
'xxx! ',
' '
];
const parser = new LevelParser();
const level = parser.parse(schema);
runLevel(level, DOMDisplay);
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅
Player
, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ» Π½Π° ΡΡ Π΅ΠΌΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ°:
const schema = [
' ',
' ',
' ',
' ',
' !xxx',
' @ ',
'xxx! ',
' '
];
const actorDict = {
'@': Player
}
const parser = new LevelParser(actorDict);
const level = parser.parse(schema);
runLevel(level, DOMDisplay);
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΠΉΡΠ΅ ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π° ΡΡ Π΅ΠΌΡ ΠΈ Π² ΡΠ»ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ°.
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΡΠΎΠ²Π½Π΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
loadLevels
ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΈΠ³ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡrunGame
. - ΠΠΎΠ³Π΄Π° ΠΈΠ³ΡΠΎΠΊ ΠΏΡΠΎΠΉΠ΄Π΅Ρ Π²ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
alert
, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΎ ΠΏΠΎΠ±Π΅Π΄Π΅.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ΅ΡΠΊΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ Π΄Π²ΠΈΠΆΡΡΠΈΡ
ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ΠΏΠ΅ΡΠ²ΡΠΉ β ΡΠ·Π΅Π» 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);
ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠΊΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, Π²ΡΠ΅ Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎ ΡΡΠ° ΡΡ Π΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠΉ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ΡΡΠΎΠ²Π΅Π½Ρ (ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° 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}`));
ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π° ΡΡ Π΅ΠΌΠ° ΡΡΠΎΠ²Π½Ρ, Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ, ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ³ΡΡ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ΡΠΏΠΈΡΠΎΠΊ ΡΡ
Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ΠΉ, ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ β ΡΡ
Π΅ΠΌΠ° (ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ); ΠΏΠ°ΡΡΠ΅Ρ ΡΡ
Π΅ΠΌ, ΠΎΠ±ΡΠ΅ΠΊΡ 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('ΠΡ Π²ΡΠΈΠ³ΡΠ°Π»ΠΈ ΠΏΡΠΈΠ·!'));
ΠΠ°ΠΏΡΡΡΠΈΡ ΠΈΠ³ΡΡ ΠΈΠ· Π΄Π²ΡΡ ΡΡΠΎΠ²Π½Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ. ΠΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠΌΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡΡ JSON-ΡΡΡΠΎΠΊΠΎΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΡ Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ΠΉ.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Vector
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΡ
ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° β ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎ ΠΎΡΠΈ X ΠΈ ΠΏΠΎ ΠΎΡΠΈ Y, ΡΠΈΡΠ»Π°, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 0
.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ x
ΠΈ y
, ΡΠ°Π²Π½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π²Π΅ΠΊΡΠΎΡ, ΠΎΠ±ΡΠ΅ΠΊΡ Vector
.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠΎ Π±ΡΠΎΡΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ±Π°Π²Π»ΡΡΡ ΠΊ Π²Π΅ΠΊΡΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΠΊΡΠΎΡ ΡΠΈΠΏΠ° Vector
.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Vector
, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ ΡΡΠΌΠΌΠΎΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΡΠΌΠΌΠΈΡΡΠ΅ΠΌΡΡ
Π²Π΅ΠΊΡΠΎΡΠΎΠ².
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Ρ, ΡΠΈΡΠ»ΠΎ.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° 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
, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Π»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 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
ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΈΠ³ΡΡΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ³ΡΡΡΠ° ΠΈΠ³ΡΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π»Π°ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π·Π°Π²Π΅ΡΡΠ΅Π½ Π»ΠΈ ΡΡΠΎΠ²Π΅Π½Ρ. ΠΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true
, Π΅ΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ status
Π½Π΅ ΡΠ°Π²Π½ΠΎ null
ΠΈ finishDelay
ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π΄Π²ΠΈΠΆΡΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, Π²Π΅ΡΠ½ΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π΄Π²ΠΈΠΆΡΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Actor
. ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ Actor
, ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ undefined
, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΄Π²ΠΈΠΆΡΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Π½ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Actor
, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Ρ Π½ΠΈΠΌ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π²Π΅ΡΠ½Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ actorAt
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π½Π΅Ρ Π»ΠΈ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ Π²ΡΡ
ΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΡΠΊΠ²ΠΎΠ·Ρ ΡΡΠ΅Π½Ρ, ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡΠ΄Π° ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π²Π΅ΠΊΡΠΎΡ Vector
, ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎΠΆΠ΅ Π²Π΅ΠΊΡΠΎΡ Vector
. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ Vector
, ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠΎΡΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ΅ΡΠ½Π΅Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡ ΠΈΠ· ΡΠ΅ΡΠΊΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΠ΅ΠΌΡ ΠΎΠ±Π»Π°ΡΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π΄Π²ΡΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌΠΈ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ undefined
, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠΉ Π½Π΅Ρ.
ΠΡΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π΄Π²ΡΠΌΡ Π²Π΅ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π²Π΅ΡΠ½Π΅Ρ ΡΡΡΠΎΠΊΡ lava
, Π΅ΡΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ½ΠΈΠ·Ρ. Π Π²Π΅ΡΠ½Π΅Ρ wall
Π² ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
. ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠ»Π΅Π²Π°, ΡΠ²Π΅ΡΡ
Ρ ΠΈ ΡΠΏΡΠ°Π²Π° ΠΎΠ³ΠΎΡΠΎΠΆΠ΅Π½ΠΎ ΡΡΠ΅Π½ΠΎΠΉ ΠΈ ΡΠ½ΠΈΠ·Ρ Ρ Π½Π΅Π³ΠΎ ΡΠΌΠ΅ΡΡΠ΅Π»ΡΠ½Π°Ρ Π»Π°Π²Π°.
ΠΠ΅ΡΠΎΠ΄ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π½Π΅Ρ, Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ Actor
. ΠΠ°Ρ
ΠΎΠ΄ΠΈΡ ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ Π΅Π³ΠΎ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΎΡΡΠ°Π»ΠΈΡΡ Π»ΠΈ Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΠΈΠΏ Π΄Π²ΠΈΠΆΡΡΠ΅Π³ΠΎΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΡΡΠΎΠΊΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true
, Π΅ΡΠ»ΠΈ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π½Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ type
). ΠΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ false
.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ³ΡΡ. ΠΠ΅Π½ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΏΡΠΈ ΠΊΠ°ΡΠ°Π½ΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠΉ.
ΠΡΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³ΡΡ ΡΠΆΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΡ 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
.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΠ»ΠΎΠ²Π°ΡΡ Π΄Π²ΠΈΠΆΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ β ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ», ΡΡΡΠΎΠΊΠ°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ Π½Π΅ Π½Π°ΡΠ»ΠΎΡΡ ΠΊΠ»ΡΡΠ° Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ, Π²Π΅ΡΠ½Π΅Ρ undefined
.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ», ΡΡΡΠΎΠΊΠ°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡ. ΠΡΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡ, ΡΠΎ Π²Π΅ΡΠ½Π΅Ρ undefined
.
ΠΠ΅ΡΠ½Π΅Ρ wall
, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ x
.
ΠΠ΅ΡΠ½Π΅Ρ lava
, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ !
.
ΠΠ΅ΡΠ½Π΅Ρ undefined
, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π² ΡΡΠ΅ΠΉΠΊΠ°Ρ
ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡ, Π»ΠΈΠ±ΠΎ undefined
.
ΠΠ²ΠΈΠΆΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ΅ΡΠΊΠ΅.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ² Π΄Π²ΠΈΠΆΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π²ΠΈΠΆΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΡΡΠΎΠΊ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ (Y) ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² ΡΡΡΠΎΠΊΠ΅ (X).
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ»Π°ΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠΈ ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ Actor
, ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡΠΌΠΈ ΠΈ Π΄Π²ΠΈΠΆΡΡΠΈΠΌΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ.
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
.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ Vector
ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ»Π½ΠΈΠΈ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π ΠΊΠ°ΠΊ Π² ΡΠΊΠΎΠ»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅, Π½ΠΎΠ²Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ β ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ»ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½Π°Ρ Π½Π° Π²ΡΠ΅ΠΌΡ. Π ΡΠ°ΠΊ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡΠ΅ΠΉ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π²ΡΠ΅ΠΌΡ, ΡΠΈΡΠ»ΠΎ. ΠΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ 1
.
ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ»Π½ΠΈΠΈ Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ. ΠΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ.
ΠΠ΅Π½ΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½Π° ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΉ. ΠΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ» 5:5
, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ -5:-5
.
ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π²ΠΈΠΆΡΡΠ΅Π³ΠΎΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ β Π²ΡΠ΅ΠΌΡ, ΡΠΈΡΠ»ΠΎ, Π²ΡΠΎΡΠΎΠΉ β ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΎΠ±ΡΠ΅ΠΊΡ Level
.
ΠΠ΅ΡΠΎΠ΄ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ. ΠΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΠ΅ΠΌΡ.
- ΠΡΡΡΠ½ΠΈΡΡ, Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅ΡΡΡ Π»ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ. ΠΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π΄Π²ΠΈΠΆΡΡΠΈΠΌΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
- ΠΡΠ»ΠΈ Π½Π΅Ρ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
- ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Ρ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ, ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ.
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Ο
.
ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°Π·Ρ ΠΏΠΎΠ΄ΠΏΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π²ΡΠ΅ΠΌΡ, ΡΠΈΡΠ»ΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1
.
ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ. ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΡΠ°Π·Ρ spring
, ΡΠ²Π΅Π»ΠΈΡΠΈΠ² Π΅Ρ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ springSpeed
, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡΡ Π½Π° Π²ΡΠ΅ΠΌΡ.
Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ ΠΏΠΎΠ΄ΠΏΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡ. ΠΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΡΠΈ Y, ΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° X Π²Π΅ΠΊΡΠΎΡΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ.
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Y Π²Π΅ΠΊΡΠΎΡΠ° ΡΠ°Π²Π½Π° ΡΠΈΠ½ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ°Π·Ρ, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡ Π½Π° ΡΠ°Π΄ΠΈΡΡ.
ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΡΠ°Π·Ρ, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π΅ΠΊΡΠΎΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΌΠΎΠ½Π΅ΡΠΊΠΈ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π²ΡΠ΅ΠΌΡ, ΡΠΈΡΠ»ΠΎ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1
.
ΠΠΎΠ²ΡΠΉ Π²Π΅ΠΊΡΠΎΡ ΡΠ°Π²Π΅Π½ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π²Π΅ΠΊΡΠΎΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Π½ΠΎΠΌΡ Π½Π° Π²Π΅ΠΊΡΠΎΡ ΠΏΠΎΠ΄ΠΏΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡ. Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ Π²Π΅ΠΊΡΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, Π° Π½Π΅ ΡΠ΅ΠΊΡΡΠΈΠΉ.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β Π²ΡΠ΅ΠΌΡ. ΠΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π·Π°Π΄Π°Π΅Ρ Π΅Ρ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΡΡ. ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ.
ΠΠ»Π°ΡΡ Player
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π΄Π²ΠΈΠΆΡΡΠ΅Π³ΠΎΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅. ΠΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Actor
.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅, ΠΎΠ±ΡΠ΅ΠΊΡ Vector
.
Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, Π½Π° Π²Π΅ΠΊΡΠΎΡ 0:-0,5
. ΠΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 0,8:1,5
. Π ΡΠΊΠΎΡΠΎΡΡΡ 0:0
.
ΠΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ type
, ΡΠ°Π²Π½ΠΎΠ΅ player
.