Es gibt ein altes Spielzeug LaserAge, das in Flash (auf einem sehr alten Macromedia Flash 4) geschrieben ist und nur unter Windows funktioniert. Als Kind hat es mir sehr gut gefallen, deshalb habe ich beschlossen, es fΓΌr die Seele zu portieren, damit ich von allen GerΓ€ten aus ΓΌber den Browser spielen kann.
Das Ziel des Spiels ist es, Gegner mit Ihrem Raumschiff auf verschiedenen Ebenen zu zerstΓΆren und Boni zu erhalten. Wenn Sie einen Bonus erhalten, wird die Waffe verbessert. Wenn ein feindlicher Torpedo trifft, wird die Waffe des Spielers herabgestuft.
Wenn alle Gegner in einem Level zerstΓΆrt sind, wechseln Sie zum nΓ€chsten Level. Insgesamt gibt es 100 Level.
In Bezug auf das Spiel ist das Level eine Welle (Wave) und mehrere Wellen werden zu einem groΓen Level (Level) kombiniert, was einfach eine Γnderung des Hintergrunds ist, d. H. Nur 4 groΓe Ebenen in jeweils 25 Wellen. In der letzten Welle eines hohen Levels gibt es normalerweise einen Boss - einen Feind mit einem enormen Lebenswert und mΓ€chtigen Waffen.
GeschΓ€ftslogikspiel
Spielraum
Es ist ein gewΓΆhnlicher rechteckiger Bereich, im oberen Teil befinden sich feindliche Schiffe und unterhalb des Spielers.
, , .
.
( ) ( ).
, : ( ), .
1 (), 0 .
- β
- β 1
- β 2
- β 3
-
- β 4
- β 5
- β 6 7 ( )
- β 8 ( )
- β 9 ( , , )
:
- β 15-19 ( , , )
- β 20-24
- β 25-29
- β 30-34
- β 30-34
- β 35 β 39
- β 40+
Hit Points | ||||||
---|---|---|---|---|---|---|
1 | 5 | 25 | , , | |||
1 | 5 | 50 | ||||
3 | 7 | 30 | ||||
2 | 8 | 30 | 3 | |||
2 | 4 | 30 | ||||
4 | 4.5 | 30 | ||||
2 | 3.8 | 40 | ||||
4 | - | 15/55 | 5 |
1 | |
2 | + |
3 | + + |
4 | + + + |
5 | + + + + |
6 | + + |
7 | + + |
8 | + + |
9 | + + |
15 β 19 | + + + |
20 β 24 | + + + |
25 β 29 | + + + |
30 β 34 | + + + |
35 β 39 | + + + |
40+ | + + + |
2.5 | ||
3.5 | ||
4.5 | ||
5 | ||
3 | ||
3.2 β 3.8 | ||
4 β 6 | ||
- |
, .
, . ().
:
"torpedo": {
"sprite": "Bullet1_1.png", //
"isRandomIntensity": false, // - true - false
"intensity": [
// 0
{
"min": 50, //
"max": 200, //
"type": "pause" //pause - , shoot - ()
},
// 1
{
"min": 100,
"max": 200,
"type": "shoot"
},
{
"min": 50,
"max": 80,
"type": "pause"
},
{
"min": 30,
"max": 100,
"repeat": 2
}
],
"speed": 2.5, //
"type": "bullet", //
"sound": "alienTorpedo"
}
, .
β
β
. .
( ).
, , , . .
1 | 2 | ||||
2 | 4 | ||||
10 | () | ||||
10 | - | ||||
10 | ( ) | ||||
30 | ( ) | ( ) | |||
30 | ( ) | ||||
30 | |||||
1 | 2 | ||||
30 | ( ) | ||||
30 | |||||
35 | + | ||||
35 | + + + | ||||
100 | ( ) + ( ) | ||||
250 | ( ) | ||||
500 | + + + + + + + | ||||
1000 () | + + + + + + + + ( ) |
JSON- :
"alien10": {
"life": 35,
"weapons": [
{
"weapon": "blueTorpedo",
"position": {
"x": -6,
"y": 0
}
},
{
"weapon": "blueTorpedo",
"position": {
"x": 6,
"y": 0
}
}
],
"sprite": "AlienShip10_1.png",
"movement": "horizontalFast",
"killPoints": 2100
}
JSON- :
"horizontalFast": {
"movements": [
{
"type": "freeMovement", //freeMovement - , followPlayer - ( )
"speedDelta": {
"vx": -6,
"vy": 0
},
"intensity": [ //
{
"min": 20,
"max": 150
},
{
"min": 150,
"max": 350
}
]
}
]
}
,
, . , ().
, . .
JSON- :
"2": {
"level": 1,
"enemies": [ //
{
"id": "alien1",
"position": {
"x": 200,
"y": 35
}
},
//...
{
"id": "alien1",
"position": {
"x": 525,
"y": 40
}
}
],
"bonuses": [ //
{
"id": "bonus1",
"position": {
"x": 350,
"y": 10
}
}
]
},
JavaScript
JavaScript, Hexi JS: https://github.com/kittykatattack/hexi .
:
- (, )
- , ,
-
- -. JSON (, )
- (), -.
- TexturePacker
: https://github.com/kittykatattack/sound.js
:
:
Main
.
:
- resources β (, , json)
- sounds β : β , β
- gameScene β HexiJS
- game β Game
- hexi β HexiJS
- gameStorage β localStorage
:
- init() β HexiJS
- load() β (, , json)
- setup() β , ,
- playLoop() β ( , , , ).
- saveGame() β
- loadGame() β
:
Main.resources = [
"images/environment1.png",
"images/environment2.png",
"images/environment3.png",
"images/environment4.png",
"images/interface.png",
"images/life-icon.png",
"images/ships-texture.json",
"images/bullet-texture.json",
"sounds/alien-torpedo-shoot.wav",
"sounds/alien-red-plasma-shoot.wav",
"sounds/hero-torpedo-shoot.wav",
"sounds/explode.wav",
"sounds/hero-green-plasma-shoot.wav",
"sounds/alien-green-plasma-shoot.wav",
"sounds/alien-blue-torpedo-shoot.wav",
"sounds/alien-yellow-laser.wav",
"sounds/pulse-plasma.wav",
"sounds/laser.wav",
"sounds/track0.ogg",
"sounds/track1.ogg",
"sounds/track2.ogg",
"sounds/track3.ogg",
"sounds/track4.ogg",
"data/hero-configuration.json",
"data/levels-configuration.json",
"data/enemy-configuration.json",
"data/ui-configuration.json",
];
Game
.
:
- level β . :
{ "wave": 1 // , "type": 1 }
- score β . :
{"points": 0 }
- bulletsController β BulletsController.
- enemyController β EnemyController. ( .. )
- player β Player
- hexi β Hexi ()
- game β Game
- gameStorage β GameStorage
:
- clearShips() β ,
- setupLevel() β ( , , )
- nextLevel() β
- previousLevel() β
- forwardLevel() β ( 5)
- rewindLevel() β ( 5)
- restoreState(gameState: JSON) β gameState
- resetGame() β ( )
- update() β
- enemyDestroyed() β
GameStorage
.
:
- game β Game
:
- save() β
- load() β
InputDevice
: click touch , .
:
- game β Game
:
- init() β callback'
- loadTapped() β "Load"
- storeTapped() β "Store"
- resetTapped() β "Reset"
- pauseTapped() β "Pause"
Actor
.
:
- hexi β Hexi ()
- game β Game
- life β
- initialLife β
- sprite β Hexi.Sprite
- shipConfiguration β
:
- move() β
- update() β
- setPosition(position: {x, y}) β
WeaponedActor
( ) .
:
- automatedWeapons β
- canShoot β
- isWeaponShooting β
:
- startShoot() β
- stopShoot() β
- onShootStarted() β ,
- onShootStopped() β ,
- updateShooting() β
Enemy
.
:
- type β
- syncWeapons β
- movementEngine β MovementEngine
:
- setWeapon() β
- shootWithWeapon() β
- setLifeLine() β
- hit() β ()
MovementEngine
.
, . vx, vy . ( ).
:
- movementsConfiguration β
- firstMovementConfiguration β
- movementItensity β
- movementItensityCounter β
- movementItensitySlot β
- isBounceBottom β . false,
:
- setMovement() β
- updateMovement() β
Player
.
:
- weapons β
- collisionSprite β ( , )
- weaponLifeLevels β
- invisibilityCounter β ( , )
:
- upgrade() β (+1 )
- downgrade() β (+1 )
- shootWithLaser(currentWeapon, weapon) β
- shootWithBullets(currentWeapon, weapon) β
- setWeapon() β
- setLife(life: number) β ( )
- hitUpgrade(upgradeItem) β
Bonus
. .
:
- type β
- movementEngine β MovementEngine
- upgradeBonus β
:
- shootWithUpgrade(upgradeBonus: JSON) β
EnemyController
, , .
:
- enemies β
- bonuses β
- player β
- upgrades β
:
- isLevelCompleted() β ( , )
- update() β
- clear() β ,
BulletsController
(), .
:
- playerBullets β
- enemyBullets β
- explosionSplashes β
- playerLaser β ( ).
:
- update() β ,
- clear() β ,
- updatePlayerBullets() β
- updatePlayerLaser() β
- updateEnemyBullets() β
- updateExplosions() β
JavaScript.
, , .
, , ..
, !
!
http://laseroid.azurewebsites.net/ β
https://github.com/EntityFX/laseroid β