Conway's Game of Life: Difference between revisions
Content added Content deleted
LalaithMeren (talk | contribs) No edit summary |
|||
Line 4,657: | Line 4,657: | ||
=={{header|Chapel}}== |
=={{header|Chapel}}== |
||
Compile and run with <code>chpl gol.chpl; ./gol --gridWidth [x] --gridHeight [y]</code>. |
|||
<syntaxhighlight lang="chapel"> |
<syntaxhighlight lang="chapel"> |
||
config const gridHeight: int = 3; |
config const gridHeight : int = 3; |
||
config const gridWidth: int = 3; |
config const gridWidth : int = 3; |
||
enum |
enum state { dead = 0, alive = 1 }; |
||
class ConwaysGameofLife |
|||
{ |
|||
var gridDomain : domain(2, int); |
|||
var computeDomain : subdomain(gridDomain); |
|||
var grid : [gridDomain] state; |
|||
proc init(height : int, width : int) |
|||
{ |
|||
this.gridDomain = {0..#height+2, 0..#width+2}; |
|||
this.computeDomain = this.gridDomain.expand(-1); |
|||
} |
|||
proc step() : void |
|||
{ |
|||
var tempGrid: [this.computeDomain] state; |
|||
forall (i,j) in this.computeDomain |
|||
{ |
|||
var isAlive = this.grid[i,j] == state.alive; |
|||
var numAlive = (+ reduce this.grid[i-1..i+1, j-1..j+1]:int) - if isAlive then 1 else 0; |
|||
tempGrid[i,j] = if ( (2 == numAlive && isAlive) || numAlive == 3 ) then state.alive else state.dead ; |
|||
} |
|||
this.grid[this.computeDomain] = tempGrid; |
|||
} |
|||
proc this(i : int, j : int) ref : state |
|||
{ |
|||
return this.grid[i,j]; |
|||
} |
|||
proc prettyPrint() : string |
|||
{ |
|||
var str : string; |
|||
for i in this.gridDomain.dim(0) |
|||
{ |
|||
if i == 0 || i == gridDomain.dim(0).last |
|||
{ |
|||
for j in this.gridDomain.dim(1) |
|||
{ |
|||
str += "-"; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
for j in this.gridDomain.dim(1) |
|||
{ |
|||
if j == 0 || j == this.gridDomain.dim(1).last |
|||
{ |
|||
str += "|"; |
|||
} |
|||
else |
|||
{ |
|||
str += if this.grid[i,j] == state.alive then "#" else " "; |
|||
} |
|||
} |
|||
} |
|||
str += "\n"; |
|||
} |
|||
return str; |
|||
} |
|||
class ConwaysGameofLife { |
|||
var gridDomain: domain(2); |
|||
var computeDomain: subdomain( gridDomain ); |
|||
var grid: [gridDomain] int; |
|||
proc ConwaysGameofLife( height: int, width: int ) { |
|||
this.gridDomain = {0..#height+2, 0..#width+2}; |
|||
this.computeDomain = this.gridDomain.expand( -1 ); |
|||
} |
|||
proc step(){ |
|||
var tempGrid: [this.computeDomain] State; |
|||
forall (i,j) in this.computeDomain { |
|||
var isAlive = this.grid[i,j] == State.alive; |
|||
var numAlive = (+ reduce this.grid[ i-1..i+1, j-1..j+1 ]) - if isAlive then 1 else 0; |
|||
tempGrid[i,j] = if ( (2 == numAlive && isAlive) || numAlive == 3 ) then State.alive else State.dead ; |
|||
} |
|||
this.grid[this.computeDomain] = tempGrid; |
|||
} |
|||
proc this( i: int, j: int ) ref : State { |
|||
return this.grid[i,j]; |
|||
} |
|||
proc prettyPrint(): string { |
|||
var str: string; |
|||
for i in this.gridDomain.dim(1) { |
|||
if i == 0 || i == gridDomain.dim(1).last { |
|||
for j in this.gridDomain.dim(2) { |
|||
str += "-"; |
|||
} |
|||
} else { |
|||
for j in this.gridDomain.dim(2) { |
|||
if j == 0 || j == this.gridDomain.dim(2).last { |
|||
str += "|"; |
|||
} else { |
|||
str += if this.grid[i,j] == State.alive then "#" else " "; |
|||
} |
|||
} |
|||
} |
|||
str += "\n"; |
|||
} |
|||
return str; |
|||
} |
|||
} |
} |
||
proc main{ |
|||
proc main() |
|||
var game = new ConwaysGameofLife( gridHeight, gridWidth ); |
|||
{ |
|||
game[gridHeight/2 + 1, gridWidth/2 ] = State.alive; |
|||
var game = new ConwaysGameofLife(gridHeight, gridWidth); |
|||
game[gridHeight/2 + 1, gridWidth/2 + 2 ] = State.alive; |
|||
game[gridHeight/2 + 1, gridWidth/2 ] = state.alive; |
|||
for i in 1..3 { |
|||
game[gridHeight/2 + 1, gridWidth/2 + 1 ] = state.alive; |
|||
writeln( game.prettyPrint() ); |
|||
game[gridHeight/2 + 1, gridWidth/2 + 2 ] = state.alive; |
|||
game.step(); |
|||
} |
|||
for i in 1..3 |
|||
{ |
|||
writeln(game.prettyPrint()); |
|||
game.step(); |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
</syntaxhighlight> |