initial commit
This commit is contained in:
commit
60db522e87
107 changed files with 36924 additions and 0 deletions
116
examples/conway.pas
Normal file
116
examples/conway.pas
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
program conway;
|
||||
const cellwidth = 4;
|
||||
cellheight = 4;
|
||||
cols = 40;
|
||||
rows = 25;
|
||||
|
||||
WHITE = 1;
|
||||
BLACK = 0;
|
||||
|
||||
type gridType = array [1..rows, 1..cols] of integer;
|
||||
|
||||
var grid:gridType;
|
||||
ch:char;
|
||||
|
||||
procedure initGrid(var g:gridType);
|
||||
var x,y:integer;
|
||||
begin
|
||||
randomize;
|
||||
for y := 1 to rows do
|
||||
for x := 1 to cols do
|
||||
if (random and 1024) > 512 then
|
||||
grid[y,x] := 1;
|
||||
end;
|
||||
|
||||
procedure updateGrid;
|
||||
var oldGrid:gridType;
|
||||
neighbors:integer;
|
||||
x,y:integer;
|
||||
wasAlive:boolean;
|
||||
isAlive:boolean;
|
||||
gen:integer;
|
||||
begin
|
||||
oldGrid := grid;
|
||||
for y := 1 to rows do
|
||||
for x := 1 to cols do
|
||||
begin
|
||||
wasAlive := oldGrid[y,x] > 0;
|
||||
isAlive := false;
|
||||
|
||||
neighbors := 0;
|
||||
|
||||
if y > 1 then
|
||||
begin
|
||||
if x > 1 then
|
||||
if oldGrid[y-1,x-1] > 0 then neighbors := neighbors + 1;
|
||||
|
||||
if oldGrid[y-1,x] > 0 then neighbors := neighbors + 1;
|
||||
|
||||
if x < cols then
|
||||
if oldGrid[y-1,x+1] > 0 then neighbors := neighbors + 1;
|
||||
end;
|
||||
|
||||
if x > 1 then
|
||||
if oldGrid[y,x-1] > 0 then neighbors := neighbors + 1;
|
||||
if x < cols then
|
||||
if oldGrid[y,x+1] > 0 then neighbors := neighbors + 1;
|
||||
|
||||
if y < rows then
|
||||
begin
|
||||
if x > 1 then
|
||||
if oldGrid[y+1,x-1] > 0 then neighbors := neighbors + 1;
|
||||
|
||||
if oldGrid[y+1,x] > 0 then neighbors := neighbors + 1;
|
||||
|
||||
if x < cols then
|
||||
if oldGrid[y+1,x+1] > 0 then neighbors := neighbors + 1;
|
||||
end;
|
||||
|
||||
if wasAlive then
|
||||
begin
|
||||
if (neighbors = 2) or (neighbors = 3) then
|
||||
isAlive := true;
|
||||
end
|
||||
else
|
||||
if neighbors = 3 then
|
||||
isAlive := true;
|
||||
if isAlive then
|
||||
begin
|
||||
gen := grid[y,x];
|
||||
if gen < 8 then gen := gen + 1;
|
||||
grid[y,x] := gen;
|
||||
end
|
||||
else
|
||||
grid[y,x] := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure drawGrid;
|
||||
var x,y:integer;
|
||||
color:integer;
|
||||
screenx,screeny:integer;
|
||||
begin
|
||||
for x := 1 to cols do
|
||||
for y := 1 to rows do
|
||||
begin
|
||||
color := grid[y,x];
|
||||
|
||||
screenx := x * cellwidth;
|
||||
screeny := y * cellheight;
|
||||
putpixel(screenx,screeny,color);
|
||||
putpixel(screenx+1,screeny,color);
|
||||
putpixel(screenx,screeny+1,color);
|
||||
putpixel(screenx+1,screeny+1,color);
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
initGraphics;
|
||||
initGrid(grid);
|
||||
repeat
|
||||
drawGrid;
|
||||
updateGrid;
|
||||
{ delay(100); }
|
||||
until conavail;
|
||||
read(ch);
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue