4729.js 3.9 KB

12
  1. "use strict";(self.webpackChunkmy_application=self.webpackChunkmy_application||[]).push([[4729],{4729:(t,e,n)=>{n.r(e),n.d(e,{default:()=>l});const l="/* Game of Life\n * Implemented in TypeScript\n * To learn more about TypeScript, please visit http://www.typescriptlang.org/\n */\n\nnamespace Conway {\n\n\texport class Cell {\n\t\tpublic row: number;\n\t\tpublic col: number;\n\t\tpublic live: boolean;\n\n\t\tconstructor(row: number, col: number, live: boolean) {\n\t\t\tthis.row = row;\n\t\t\tthis.col = col;\n\t\t\tthis.live = live;\n\t\t}\n\t}\n\n\texport class GameOfLife {\n\t\tprivate gridSize: number;\n\t\tprivate canvasSize: number;\n\t\tprivate lineColor: string;\n\t\tprivate liveColor: string;\n\t\tprivate deadColor: string;\n\t\tprivate initialLifeProbability: number;\n\t\tprivate animationRate: number;\n\t\tprivate cellSize: number;\n\t\tprivate context: CanvasRenderingContext2D;\n\t\tprivate world;\n\n\n\t\tconstructor() {\n\t\t\tthis.gridSize = 50;\n\t\t\tthis.canvasSize = 600;\n\t\t\tthis.lineColor = '#cdcdcd';\n\t\t\tthis.liveColor = '#666';\n\t\t\tthis.deadColor = '#eee';\n\t\t\tthis.initialLifeProbability = 0.5;\n\t\t\tthis.animationRate = 60;\n\t\t\tthis.cellSize = 0;\n\t\t\tthis.world = this.createWorld();\n\t\t\tthis.circleOfLife();\n\t\t}\n\n\t\tpublic createWorld() {\n\t\t\treturn this.travelWorld( (cell : Cell) => {\n\t\t\t\tcell.live = Math.random() < this.initialLifeProbability;\n\t\t\t\treturn cell;\n\t\t\t});\n\t\t}\n\n\t\tpublic circleOfLife() : void {\n\t\t\tthis.world = this.travelWorld( (cell: Cell) => {\n\t\t\t\tcell = this.world[cell.row][cell.col];\n\t\t\t\tthis.draw(cell);\n\t\t\t\treturn this.resolveNextGeneration(cell);\n\t\t\t});\n\t\t\tsetTimeout( () => {this.circleOfLife()}, this.animationRate);\n\t\t}\n\n\t\tpublic resolveNextGeneration(cell : Cell) {\n\t\t\tvar count = this.countNeighbors(cell);\n\t\t\tvar newCell = new Cell(cell.row, cell.col, cell.live);\n\t\t\tif(count < 2 || count > 3) newCell.live = false;\n\t\t\telse if(count == 3) newCell.live = true;\n\t\t\treturn newCell;\n\t\t}\n\n\t\tpublic countNeighbors(cell : Cell) {\n\t\t\tvar neighbors = 0;\n\t\t\tfor(var row = -1; row <=1; row++) {\n\t\t\t\tfor(var col = -1; col <= 1; col++) {\n\t\t\t\t\tif(row == 0 && col == 0) continue;\n\t\t\t\t\tif(this.isAlive(cell.row + row, cell.col + col)) {\n\t\t\t\t\t\tneighbors++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn neighbors;\n\t\t}\n\n\t\tpublic isAlive(row : number, col : number) {\n\t\t\tif(row < 0 || col < 0 || row >= this.gridSize || col >= this.gridSize) return false;\n\t\t\treturn this.world[row][col].live;\n\t\t}\n\n\t\tpublic travelWorld(callback) {\n\t\t\tvar result = [];\n\t\t\tfor(var row = 0; row < this.gridSize; row++) {\n\t\t\t\tvar rowData = [];\n\t\t\t\tfor(var col = 0; col < this.gridSize; col++) {\n\t\t\t\t\trowData.push(callback(new Cell(row, col, false)));\n\t\t\t\t}\n\t\t\t\tresult.push(rowData);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tpublic draw(cell : Cell) {\n\t\t\tif(this.context == null) this.context = this.createDrawingContext();\n\t\t\tif(this.cellSize == 0) this.cellSize = this.canvasSize/this.gridSize;\n\n\t\t\tthis.context.strokeStyle = this.lineColor;\n\t\t\tthis.context.strokeRect(cell.row * this.cellSize, cell.col*this.cellSize, this.cellSize, this.cellSize);\n\t\t\tthis.context.fillStyle = cell.live ? this.liveColor : this.deadColor;\n\t\t\tthis.context.fillRect(cell.row * this.cellSize, cell.col*this.cellSize, this.cellSize, this.cellSize);\n\t\t}\n\n\t\tpublic createDrawingContext() {\n\t\t\tvar canvas = <HTMLCanvasElement> document.getElementById('conway-canvas');\n\t\t\tif(canvas == null) {\n\t\t\t\t\tcanvas = document.createElement('canvas');\n\t\t\t\t\tcanvas.id = 'conway-canvas';\n\t\t\t\t\tcanvas.width = this.canvasSize;\n\t\t\t\t\tcanvas.height = this.canvasSize;\n\t\t\t\t\tdocument.body.appendChild(canvas);\n\t\t\t}\n\t\t\treturn canvas.getContext('2d');\n\t\t}\n\t}\n}\n\nvar game = new Conway.GameOfLife();\n"}}]);
  2. //# sourceMappingURL=4729.js.map