ngx-snake
Version:
Snake game as an angular component, its only the core of the game... you need to add everything around it (controls, score...) yourself :)
58 lines • 6.14 kB
JavaScript
import { Component, Input, Output } from '@angular/core';
import { GameManagerService } from './services/game-manager.service';
import * as i0 from "@angular/core";
import * as i1 from "./services/game-manager.service";
import * as i2 from "./components/board/board.component";
import * as i3 from "@angular/common";
export class NgxSnakeComponent {
constructor(_manager) {
this._manager = _manager;
this.boardHeight = 10;
this.boardWidth = 10;
this.foodEaten = this._manager.foodEaten$;
this.gameOver = this._manager.gameOver$;
this.grid$ = this._manager.grid$;
}
ngOnInit() {
this._manager.initialize(this.boardHeight, this.boardWidth);
}
actionUp() { this._manager.up(); }
actionRight() { this._manager.right(); }
actionDown() { this._manager.down(); }
actionLeft() { this._manager.left(); }
actionStart() {
this._manager.start();
}
actionStop() {
this._manager.pause();
}
actionReset() {
this._manager.reset();
}
}
NgxSnakeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: NgxSnakeComponent, deps: [{ token: i1.GameManagerService }], target: i0.ɵɵFactoryTarget.Component });
NgxSnakeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: NgxSnakeComponent, selector: "ngx-snake", inputs: { boardHeight: "boardHeight", boardWidth: "boardWidth" }, outputs: { foodEaten: "foodEaten", gameOver: "gameOver" }, providers: [GameManagerService], ngImport: i0, template: `
<ngx-snake-board
[data]="grid$ | async"></ngx-snake-board>
`, isInline: true, components: [{ type: i2.BoardComponent, selector: "ngx-snake-board", inputs: ["data"] }], pipes: { "async": i3.AsyncPipe } });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: NgxSnakeComponent, decorators: [{
type: Component,
args: [{
selector: 'ngx-snake',
template: `
<ngx-snake-board
[data]="grid$ | async"></ngx-snake-board>
`,
styles: [],
providers: [GameManagerService]
}]
}], ctorParameters: function () { return [{ type: i1.GameManagerService }]; }, propDecorators: { boardHeight: [{
type: Input
}], boardWidth: [{
type: Input
}], foodEaten: [{
type: Output
}], gameOver: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNuYWtlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbmFrZS9zcmMvbGliL25neC1zbmFrZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDOzs7OztBQVduRSxNQUFNLE9BQU8saUJBQWlCO0lBUzFCLFlBQ1ksUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFUL0IsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUV2QixjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBRXRDLFVBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUtuQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsV0FBVyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLFVBQVUsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxVQUFVLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFHdEMsV0FBVztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs4R0FsQ1EsaUJBQWlCO2tHQUFqQixpQkFBaUIsaUtBRmYsQ0FBQyxrQkFBa0IsQ0FBQywwQkFMckI7OztLQUdUOzJGQUlRLGlCQUFpQjtrQkFUN0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFOzs7S0FHVDtvQkFDRCxNQUFNLEVBQUUsRUFBRTtvQkFDVixTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDbEM7eUdBRVksV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtHYW1lTWFuYWdlclNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvZ2FtZS1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1zbmFrZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5neC1zbmFrZS1ib2FyZFxuICAgICAgICAgICAgW2RhdGFdPVwiZ3JpZCQgfCBhc3luY1wiPjwvbmd4LXNuYWtlLWJvYXJkPlxuICAgIGAsXG4gICAgc3R5bGVzOiBbXSxcbiAgICBwcm92aWRlcnM6IFtHYW1lTWFuYWdlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE5neFNuYWtlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBib2FyZEhlaWdodDogbnVtYmVyID0gMTA7XG4gICAgQElucHV0KCkgYm9hcmRXaWR0aDogbnVtYmVyID0gMTA7XG5cbiAgICBAT3V0cHV0KCkgZm9vZEVhdGVuID0gdGhpcy5fbWFuYWdlci5mb29kRWF0ZW4kO1xuICAgIEBPdXRwdXQoKSBnYW1lT3ZlciA9IHRoaXMuX21hbmFnZXIuZ2FtZU92ZXIkO1xuXG4gICAgcHVibGljIGdyaWQkID0gdGhpcy5fbWFuYWdlci5ncmlkJDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9tYW5hZ2VyOiBHYW1lTWFuYWdlclNlcnZpY2VcbiAgICApIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWFuYWdlci5pbml0aWFsaXplKHRoaXMuYm9hcmRIZWlnaHQsIHRoaXMuYm9hcmRXaWR0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGlvblVwKCkgeyB0aGlzLl9tYW5hZ2VyLnVwKCk7IH1cbiAgICBwdWJsaWMgYWN0aW9uUmlnaHQoKSB7IHRoaXMuX21hbmFnZXIucmlnaHQoKTsgfVxuICAgIHB1YmxpYyBhY3Rpb25Eb3duKCkgeyB0aGlzLl9tYW5hZ2VyLmRvd24oKTsgfVxuICAgIHB1YmxpYyBhY3Rpb25MZWZ0KCkgeyB0aGlzLl9tYW5hZ2VyLmxlZnQoKTsgfVxuXG5cbiAgICBwdWJsaWMgYWN0aW9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMuX21hbmFnZXIuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aW9uU3RvcCgpIHtcbiAgICAgICAgdGhpcy5fbWFuYWdlci5wYXVzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3Rpb25SZXNldCgpIHtcbiAgICAgICAgdGhpcy5fbWFuYWdlci5yZXNldCgpO1xuICAgIH1cblxufVxuIl19