UNPKG

@ng-casino/rock-paper-scissors

Version:

Angular component to play a game of Rock, Paper, Scissors

87 lines 15.7 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { RockPaperScissorsChoice, RockPaperScissorsResult } from './rock-paper-scissors.enums'; import { RockPaperScissorsImages } from './rock-paper-scissors.assets'; export class RockPaperScissorsComponent { constructor() { this.onPlaying = new EventEmitter(); this.onGameResult = new EventEmitter(); this.gameChoice = RockPaperScissorsChoice; this.gameOutcome = RockPaperScissorsResult; this.gameImages = RockPaperScissorsImages; this.choice = null; this.opponent = null; this.result = null; this.choiceImage = null; this.opponentImage = null; } play(choice) { this.playing = true; this.onPlaying.emit(true); setTimeout(() => { this.choice = choice; const choices = Object.keys(RockPaperScissorsChoice) .filter((c) => isNaN(parseInt(c, 10))); const randomChoice = Math.floor(Math.random() * choices.length); this.opponent = RockPaperScissorsChoice[choices[randomChoice]]; this.showResults(); }, 1500); } showResults() { this.choiceImage = this.getImage(this.choice); this.opponentImage = this.getImage(this.opponent); if (this.choice === RockPaperScissorsChoice.Rock) { this.result = this.opponent === RockPaperScissorsChoice.Rock ? RockPaperScissorsResult.Draw : this.opponent === RockPaperScissorsChoice.Paper ? RockPaperScissorsResult.Lost : RockPaperScissorsResult.Won; } else if (this.choice === RockPaperScissorsChoice.Paper) { this.result = this.opponent === RockPaperScissorsChoice.Paper ? RockPaperScissorsResult.Draw : this.opponent === RockPaperScissorsChoice.Scissors ? RockPaperScissorsResult.Lost : RockPaperScissorsResult.Won; } else if (this.choice === RockPaperScissorsChoice.Scissors) { this.result = this.opponent === RockPaperScissorsChoice.Scissors ? RockPaperScissorsResult.Draw : this.opponent === RockPaperScissorsChoice.Rock ? RockPaperScissorsResult.Lost : RockPaperScissorsResult.Won; } this.onGameResult.emit(this.result); } getImage(option) { var _a, _b, _c; switch (option) { case RockPaperScissorsChoice.Rock: return ((_a = this.images) === null || _a === void 0 ? void 0 : _a.rock) ? this.images.rock : this.gameImages.rock; case RockPaperScissorsChoice.Paper: return ((_b = this.images) === null || _b === void 0 ? void 0 : _b.paper) ? this.images.paper : this.gameImages.paper; case RockPaperScissorsChoice.Scissors: return ((_c = this.images) === null || _c === void 0 ? void 0 : _c.scissors) ? this.images.scissors : this.gameImages.scissors; } } resetGame() { this.playing = false; this.result = null; this.choice = null; this.choiceImage = null; this.opponent = null; this.opponentImage = null; this.onPlaying.emit(false); } } RockPaperScissorsComponent.decorators = [ { type: Component, args: [{ selector: 'casino-rock-paper-scissors', template: "<div class=\"ng-casino__rps\">\n <ng-container *ngIf=\"playing\">\n <div class=\"ng-casino__rps-options\">\n <img class=\"ng-casino__rps-option ng-casino__rps-option--reversed ng-casino__rps-choice\"\n [src]=\"choiceImage ? choiceImage : gameImages.rock\"/>\n\n <img class=\"ng-casino__rps-option ng-casino__rps-choice\"\n [src]=\"opponentImage ? opponentImage : gameImages.rock\"/>\n </div>\n\n <ng-container *ngIf=\"result !== null\">\n <p class=\"ng-casino__rps-text\"\n *ngIf=\"result === gameOutcome.Won\">{{ wonText ? wonText : 'You have won this game!' }}</p>\n <p class=\"ng-casino__rps-text\"\n *ngIf=\"result === gameOutcome.Lost\">{{ lostText ? lostText : 'You have lost this game!' }}</p>\n <p class=\"ng-casino__rps-text\"\n *ngIf=\"result === gameOutcome.Draw\">{{ drawText ? drawText : 'There is no winner in this game!' }}</p>\n\n <div class=\"ng-casino__rps-try-again\">\n <button class=\"ng-casino__rps-try-again-button\"\n (click)=\"resetGame()\">{{ tryAgainText ? tryAgainText : 'Try again' }}</button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!playing\">\n <div class=\"ng-casino__rps-options\">\n <img class=\"ng-casino__rps-option\"\n alt=\"Rock\"\n [src]=\"images?.rock ? images.rock : gameImages.rock\"\n (click)=\"play(gameChoice.Rock)\"/>\n <img class=\"ng-casino__rps-option\"\n alt=\"Paper\"\n [src]=\"images?.paper ? images.paper : gameImages.paper\"\n (click)=\"play(gameChoice.Paper)\"/>\n <img class=\"ng-casino__rps-option\"\n alt=\"Scissors\"\n [src]=\"images?.scissors ? images.scissors : gameImages.scissors\"\n (click)=\"play(gameChoice.Scissors)\"/>\n </div>\n\n <p class=\"ng-casino__rps-text\">{{ startText ? startText : 'Make your choice' }}</p>\n </ng-container>\n</div>\n", styles: [".ng-casino__rps-options{display:flex;justify-content:space-around}.ng-casino__rps-option{cursor:pointer;height:33%;position:relative;width:33%}.ng-casino__rps-option--reversed{transform:scaleX(-1)}.ng-casino__rps-option:not(.ng-casino__rps-choice):hover{-webkit-animation:upDownAnimation 1s linear infinite;animation:upDownAnimation 1s linear infinite}.ng-casino__rps-choice{-webkit-animation:upDownAnimation .5s linear 3;animation:upDownAnimation .5s linear 3;cursor:default}.ng-casino__rps-text{font-size:1.25rem;text-align:center}.ng-casino__rps-try-again{text-align:center}@-webkit-keyframes upDownAnimation{0%,to{bottom:0}50%{bottom:.5rem}}@keyframes upDownAnimation{0%,to{bottom:0}50%{bottom:.5rem}}"] },] } ]; RockPaperScissorsComponent.propDecorators = { startText: [{ type: Input }], wonText: [{ type: Input }], lostText: [{ type: Input }], drawText: [{ type: Input }], tryAgainText: [{ type: Input }], images: [{ type: Input }], onPlaying: [{ type: Output }], onGameResult: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9jay1wYXBlci1zY2lzc29ycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3Rob21hc2Jsb20vV29ya3NwYWNlL2Nhc2luby9Sb2NrUGFwZXJTY2lzc29ycy9wcm9qZWN0cy9yb2NrLXBhcGVyLXNjaXNzb3JzL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9yb2NrLXBhcGVyLXNjaXNzb3JzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzdGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBT3JFLE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUE4QkUsY0FBUyxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBRy9ELGlCQUFZLEdBQTBDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRXpGLGVBQVUsR0FBRyx1QkFBdUIsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLHVCQUF1QixDQUFDO1FBQ3RDLGVBQVUsR0FBRyx1QkFBdUIsQ0FBQztRQUk5QyxXQUFNLEdBQTRCLElBQUksQ0FBQztRQUV2QyxhQUFRLEdBQTRCLElBQUksQ0FBQztRQUV6QyxXQUFNLEdBQTRCLElBQUksQ0FBQztRQUV2QyxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixrQkFBYSxHQUFXLElBQUksQ0FBQztJQXNEL0IsQ0FBQztJQXBEQyxJQUFJLENBQUMsTUFBK0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcs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QUM7WUFDeEUsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRO2dCQUNuQyxPQUFPLE9BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDbEY7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7OztZQXJHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsbzhEQUFtRDs7YUFFcEQ7Ozt3QkFHRSxLQUFLO3NCQUdMLEtBQUs7dUJBR0wsS0FBSzt1QkFHTCxLQUFLOzJCQUdMLEtBQUs7cUJBR0wsS0FBSzt3QkFPTCxNQUFNOzJCQUdOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um9ja1BhcGVyU2Npc3NvcnNDaG9pY2UsIFJvY2tQYXBlclNjaXNzb3JzUmVzdWx0fSBmcm9tICcuL3JvY2stcGFwZXItc2Npc3NvcnMuZW51bXMnO1xuaW1wb3J0IHtSb2NrUGFwZXJTY2lzc29yc0ltYWdlc30gZnJvbSAnLi9yb2NrLXBhcGVyLXNjaXNzb3JzLmFzc2V0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nhc2luby1yb2NrLXBhcGVyLXNjaXNzb3JzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvY2stcGFwZXItc2Npc3NvcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yb2NrLXBhcGVyLXNjaXNzb3JzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm9ja1BhcGVyU2Npc3NvcnNDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpXG4gIHN0YXJ0VGV4dD86IHN0cmluZztcblxuICBASW5wdXQoKVxuICB3b25UZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGxvc3RUZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGRyYXdUZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHRyeUFnYWluVGV4dD86IHN0cmluZztcblxuICBASW5wdXQoKVxuICBpbWFnZXM/OiB7XG4gICAgcm9jazogc3RyaW5nO1xuICAgIHBhcGVyOiBzdHJpbmc7XG4gICAgc2Npc3NvcnM6IHN0cmluZztcbiAgfTtcblxuICBAT3V0cHV0KClcbiAgb25QbGF5aW5nOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uR2FtZVJlc3VsdDogRXZlbnRFbWl0dGVyPFJvY2tQYXBlclNjaXNzb3JzUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8Um9ja1BhcGVyU2Npc3NvcnNSZXN1bHQ+KCk7XG5cbiAgcmVhZG9ubHkgZ2FtZUNob2ljZSA9IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlO1xuICByZWFkb25seSBnYW1lT3V0Y29tZSA9IFJvY2tQYXBlclNjaXNzb3JzUmVzdWx0O1xuICByZWFkb25seSBnYW1lSW1hZ2VzID0gUm9ja1BhcGVyU2Npc3NvcnNJbWFnZXM7XG5cbiAgcGxheWluZzogYm9vbGVhbjtcblxuICBjaG9pY2U6IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlID0gbnVsbDtcblxuICBvcHBvbmVudDogUm9ja1BhcGVyU2Npc3NvcnNDaG9pY2UgPSBudWxsO1xuXG4gIHJlc3VsdDogUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQgPSBudWxsO1xuXG4gIGNob2ljZUltYWdlOiBzdHJpbmcgPSBudWxsO1xuICBvcHBvbmVudEltYWdlOiBzdHJpbmcgPSBudWxsO1xuXG4gIHBsYXkoY2hvaWNlOiBSb2NrUGFwZXJTY2lzc29yc0Nob2ljZSkge1xuICAgIHRoaXMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5vblBsYXlpbmcuZW1pdCh0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2hvaWNlID0gY2hvaWNlO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IE9iamVjdC5rZXlzKFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlKVxuICAgICAgICAuZmlsdGVyKChjOiBzdHJpbmcpID0+IGlzTmFOKHBhcnNlSW50KGMsIDEwKSkpO1xuICAgICAgY29uc3QgcmFuZG9tQ2hvaWNlID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hvaWNlcy5sZW5ndGgpO1xuICAgICAgdGhpcy5vcHBvbmVudCA9IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlW2Nob2ljZXNbcmFuZG9tQ2hvaWNlXV07XG4gICAgICB0aGlzLnNob3dSZXN1bHRzKCk7XG4gICAgfSwgMTUwMCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dSZXN1bHRzKCkge1xuICAgIHRoaXMuY2hvaWNlSW1hZ2UgPSB0aGlzLmdldEltYWdlKHRoaXMuY2hvaWNlKTtcbiAgICB0aGlzLm9wcG9uZW50SW1hZ2UgPSB0aGlzLmdldEltYWdlKHRoaXMub3Bwb25lbnQpO1xuICAgIGlmICh0aGlzLmNob2ljZSA9PT0gUm9ja1BhcGVyU2Npc3NvcnNDaG9pY2UuUm9jaykge1xuICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLm9wcG9uZW50ID09PSBSb2NrUGFwZXJTY2lzc29yc0Nob2ljZS5Sb2NrID8gUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuRHJhdyA6XG4gICAgICAgIHRoaXMub3Bwb25lbnQgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlBhcGVyID8gUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuTG9zdCA6XG4gICAgICAgICAgUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuV29uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaG9pY2UgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlBhcGVyKSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IHRoaXMub3Bwb25lbnQgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlBhcGVyID8gUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuRHJhdyA6XG4gICAgICAgIHRoaXMub3Bwb25lbnQgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlNjaXNzb3JzID8gUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuTG9zdCA6XG4gICAgICAgICAgUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuV29uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaG9pY2UgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlNjaXNzb3JzKSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IHRoaXMub3Bwb25lbnQgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlNjaXNzb3JzID8gUm9ja1BhcGVyU2Npc3NvcnNSZXN1bHQuRHJhdyA6XG4gICAgICAgIHRoaXMub3Bwb25lbnQgPT09IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlLlJvY2sgPyBSb2NrUGFwZXJTY2lzc29yc1Jlc3VsdC5Mb3N0IDpcbiAgICAgICAgICBSb2NrUGFwZXJTY2lzc29yc1Jlc3VsdC5Xb247XG4gICAgfVxuICAgIHRoaXMub25HYW1lUmVzdWx0LmVtaXQodGhpcy5yZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbWFnZShvcHRpb246IFJvY2tQYXBlclNjaXNzb3JzQ2hvaWNlKSB7XG4gICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgIGNhc2UgUm9ja1BhcGVyU2Npc3NvcnNDaG9pY2UuUm9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5yb2NrID8gdGhpcy5pbWFnZXMucm9jayA6IHRoaXMuZ2FtZUltYWdlcy5yb2NrO1xuICAgICAgY2FzZSBSb2NrUGFwZXJTY2lzc29yc0Nob2ljZS5QYXBlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5wYXBlciA/IHRoaXMuaW1hZ2VzLnBhcGVyIDogdGhpcy5nYW1lSW1hZ2VzLnBhcGVyO1xuICAgICAgY2FzZSBSb2NrUGFwZXJTY2lzc29yc0Nob2ljZS5TY2lzc29yczpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5zY2lzc29ycyA/IHRoaXMuaW1hZ2VzLnNjaXNzb3JzIDogdGhpcy5nYW1lSW1hZ2VzLnNjaXNzb3JzO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0R2FtZSgpIHtcbiAgICB0aGlzLnBsYXlpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jaG9pY2UgPSBudWxsO1xuICAgIHRoaXMuY2hvaWNlSW1hZ2UgPSBudWxsO1xuICAgIHRoaXMub3Bwb25lbnQgPSBudWxsO1xuICAgIHRoaXMub3Bwb25lbnRJbWFnZSA9IG51bGw7XG4gICAgdGhpcy5vblBsYXlpbmcuZW1pdChmYWxzZSk7XG4gIH1cbn1cbiJdfQ==