Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | 40x 40x 40x 40x 40x 261x 261x 253x 253x 253x 253x 253x 147x 147x 1x 261x 261x 261x 4x 4x 257x 1x 1x 256x 3x 3x 253x 253x 253x 253x 253x 107x 107x 253x 59x 59x 253x | import { Frame } from './Frame'
export class Jogo {
score: number
frame_atual: number
frames: Frame[] = []
constructor() {
this.score = 0
this.frame_atual = 0
const frame: Frame = new Frame(0)
this.frames.push(frame)
}
arremessar(pinos: number): void {
const frame = this.frames[this.frame_atual]
Eif (this.validarArremesso(pinos)) {
frame.adicionarBonus(pinos)
frame.gravarArremesso(pinos)
const bonus = this.obterBonus()
this.score += pinos * bonus
}
if (frame.permitirEncerrarFrame()) {
this.frame_atual += 1
this.frames.push(frame.gerarProximoFrame())
}
}
pontuacao(): number {
return this.score
}
private validarArremesso(pinos: number): boolean {
const frame = this.frames[this.frame_atual]
let validacao = true
if (pinos > 10 || pinos < 0 || !Number.isInteger(pinos)) {
validacao = false
throw new Error(`Valor de arremesso inválido: ${pinos}`)
}
if (frame.numero != 9 && pinos > frame.pinos_em_pe) {
validacao = false
throw new Error(`Valor total dos arremessos (${pinos}) superior a 10`)
}
if (frame.numero === 9 && frame.arremessos === 3) {
validacao = false
throw new Error('O jogo já foi encerrado')
}
return validacao
}
private obterBonus(): number {
const ultimo = this.frames[this.frame_atual - 1]
const penultimo = this.frames[this.frame_atual - 2]
let bonus = 1
if (this.frame_atual > 0 && ultimo.bonus > 0) {
ultimo.bonus -= 1
bonus += 1
}
if (this.frame_atual > 1 && penultimo.bonus > 0) {
penultimo.bonus -= 1
bonus += 1
}
return bonus
}
}
|