using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
private int SQsize = 25;
private int[,] paintSQ = new int[50, 50];
private int shape = 1;
private int gridLines = 1;
private int maxRow = 20;
private int maxCol = 20;
private int gridSize = 500;
private int speed = 100;
private byte[] myData = new byte[10];
public Form1()
{
InitializeComponent();
colorDialog1.Color = Color.Red;
}
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//Paint grid
if (gridLines == 1)
{
Graphics grid = e.Graphics;
Pen myPen = new Pen(Color.Black, 1); //create a pen object
for (int a = 0; a <= this.gridSize; a += this.SQsize)
{
grid.DrawLine(myPen, 0, a, gridSize, a); //use the DrawLine Horizontal
grid.DrawLine(myPen, a, 0, a, gridSize); //use the DrawLine Vertical
}
myPen.Dispose();
}
Graphics paint = e.Graphics;
SolidBrush myBrush = new SolidBrush(colorDialog1.Color);
if (gridSize == 500 && SQsize == 10)
{
this.maxCol = 50;
this.maxRow = 50;
toolStripStatusLabel1.Text = "Grid Size: Large 50x50";
}
if (gridSize == 500 && SQsize == 25)
{
this.maxCol = 20;
this.maxRow = 20;
toolStripStatusLabel1.Text = "Grid Size: Large 20x20";
}
if (gridSize == 500 && SQsize == 50)
{
this.maxCol = 10;
this.maxRow = 10;
toolStripStatusLabel1.Text = "Grid Size: Large 10x10";
}
if (gridSize == 250 && SQsize == 10)
{
this.maxCol = 25;
this.maxRow = 25;
toolStripStatusLabel1.Text = "Grid Size: Medium 25x25";
}
if (gridSize == 250 && SQsize == 25)
{
this.maxCol = 10;
this.maxRow = 10;
toolStripStatusLabel1.Text = "Grid Size: Medium 10x10";
}
if (gridSize == 250 && SQsize == 50)
{
this.maxCol = 5;
this.maxRow = 5;
toolStripStatusLabel1.Text = "Grid Size: Medium 5x5";
}
if (gridSize == 200 && SQsize == 10)
{
this.maxCol = 20;
this.maxRow = 20;
toolStripStatusLabel1.Text = "Grid Size: Small 20x20";
}
if (gridSize == 200 && SQsize == 25)
{
this.maxCol = 8;
this.maxRow = 8;
toolStripStatusLabel1.Text = "Grid Size: Small 8x8";
}
if (gridSize == 200 && SQsize == 50)
{
this.maxCol = 4;
this.maxRow = 4;
toolStripStatusLabel1.Text = "Grid Size: Small 4x4";
}
int cellRow = 0;
while (cellRow < maxRow)
{
int cellCol = 0;
while (cellCol < maxCol)
{
if (shape == 1)
{
if (paintSQ[cellCol, cellRow] == 1)
{
paint.FillRectangle(myBrush, (cellCol * this.SQsize) + 1, (cellRow * this.SQsize) + 1, this.SQsize - 1, this.SQsize - 1);
}
}
if (shape == 0)
{
if (paintSQ[cellCol, cellRow] == 1)
{
paint.SmoothingMode = SmoothingMode.HighQuality;
paint.FillEllipse(myBrush, new Rectangle((cellCol * this.SQsize), (cellRow * this.SQsize), this.SQsize, this.SQsize));
}
}
cellCol++;
}
cellRow++;
}
myBrush.Dispose();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.X < pictureBox1.Width && e.Y < pictureBox1.Height && e.X > 0 && e.Y > 0 && e.Button == MouseButtons.Left)
{
int xMouse = 0;
int yMouse = 0;
double xMouse1 = (e.X - 1) / SQsize;
double yMouse1 = (e.Y - 1) / SQsize;
xMouse = (int)System.Math.Ceiling(xMouse1);
yMouse = (int)System.Math.Ceiling(yMouse1);
this.paintSQ[xMouse, yMouse] = 1;
pictureBox1.Refresh();
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.X < pictureBox1.Width && e.Y < pictureBox1.Height && e.X > 0 && e.Y > 0 && e.Button == MouseButtons.Left)
{
int xMouse = 0;
int yMouse = 0;
double xMouse1 = (e.X - 1) / SQsize;
double yMouse1 = (e.Y - 1) / SQsize;
xMouse = (int)System.Math.Ceiling(xMouse1);
yMouse = (int)System.Math.Ceiling(yMouse1);
this.paintSQ[xMouse, yMouse] = 1;
pictureBox1.Refresh();
}
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void colourToolStripMenuItem_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
Refresh();
}
private void smallToolStripMenuItem_Click_1(object sender, EventArgs e)
{
maxRow = 10;
maxCol = 10;
gridSize = 200;
Refresh();
}
private void mediumToolStripMenuItem_Click(object sender, EventArgs e)
{
gridSize = 250;
maxRow = 25;
maxCol = 25;
Refresh();
}
private void largeToolStripMenuItem_Click(object sender, EventArgs e)
{
gridSize = 500;
maxRow = 50;
maxCol = 50;
Refresh();
}
private void exitToolStripMenuItem_Click_1(object sender, EventArgs e)
{
Close();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
int[,] tempPaintSQ = new int[50, 50];
int cellRow = 0;
while (cellRow < maxRow)
{
int cellCol = 0;
while (cellCol < maxCol)
{
int cellAlive = 0;
if (cellCol - 1 >= 0 && cellRow - 1 >= 0 && cellCol - 1 < this.maxCol && cellRow - 1 < this.maxRow)
{
if (paintSQ[cellCol - 1, cellRow - 1] == 1)
{
cellAlive++;
}
}
if (cellCol - 1 >= 0 && cellRow >= 0 && cellCol - 1 < this.maxCol && cellRow < this.maxRow)
{
if (paintSQ[cellCol - 1, cellRow] == 1)
{
cellAlive++;
}
}
if (cellCol - 1 >= 0 && cellRow + 1 >= 0 && cellCol - 1 < this.maxCol && cellRow + 1 < this.maxRow)
{
if (paintSQ[cellCol - 1, cellRow + 1] == 1)
{
cellAlive++;
}
}
if (cellCol >= 0 && cellRow - 1 >= 0 && cellCol < this.maxCol && cellRow - 1 < this.maxRow)
{
if (paintSQ[cellCol, cellRow - 1] == 1)
{
cellAlive++;
}
}
if (cellCol >= 0 && cellRow + 1 >= 0 && cellCol < this.maxCol && cellRow + 1 < this.maxRow)
{
if (paintSQ[cellCol, cellRow + 1] == 1)
{
cellAlive++;
}
}
if (cellCol >= +1 && cellRow - 1 >= 0 && cellCol + 1 < this.maxCol && cellRow - 1 < this.maxRow)
{
if (paintSQ[cellCol + 1, cellRow - 1] == 1)
{
cellAlive++;
}
}
if (cellCol + 1 >= 0 && cellRow >= 0 && cellCol + 1 < this.maxCol && cellRow < this.maxRow)
{
if (paintSQ[cellCol + 1, cellRow] == 1)
{
cellAlive++;
}
}
if (cellCol + 1 >= 0 && cellRow + 1 >= 0 && cellCol + 1 < this.maxCol && cellRow + 1 < this.maxRow)
{
if (paintSQ[cellCol + 1, cellRow + 1] == 1)
{
cellAlive++;
}
}
if (paintSQ[cellCol, cellRow] == 1)
{
if (cellAlive < 2)
{
tempPaintSQ[cellCol, cellRow] = 0;
}
if (cellAlive == 2 || cellAlive == 3)
{
tempPaintSQ[cellCol, cellRow] = 1;
}
if (cellAlive > 3)
{
tempPaintSQ[cellCol, cellRow] = 0;
}
}
else
{
if (cellAlive == 3)
{ tempPaintSQ[cellCol, cellRow] = 1; }
else
{ tempPaintSQ[cellCol, cellRow] = 0; }
}
cellCol++;
}
cellRow++;
}
this.paintSQ = tempPaintSQ;
speedBarMove();
cellcountAliveDead();
pictureBox1.Refresh();
}
private void speedBarMove()
{
if (speedBar.Value == 0)
{
timer1.Interval = 400;
}
if (speedBar.Value == 1)
{
timer1.Interval = 200;
}
if (speedBar.Value == 2)
{
timer1.Interval = 100;
}
if (speedBar.Value == 3)
{
timer1.Interval = 50;
}
if (speedBar.Value == 4)
{
timer1.Interval = 5;
}
}
private void start_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void stop_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
private void Clear_Click(object sender, EventArgs e)
{
int cellRow = 0;
while (cellRow < maxRow)
{
int cellCol = 0;
while (cellCol < maxCol)
{
paintSQ[cellCol, cellRow] = 0;
cellCol++;
}
cellRow++;
}
pictureBox1.Refresh();
}
private void button1_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
}
private void onToolStripMenuItem_Click(object sender, EventArgs e)
{
gridLines = 1;
pictureBox1.Refresh();
}
private void squareToolStripMenuItem_Click(object sender, EventArgs e)
{
shape = 1;
pictureBox1.Refresh();
}
private void circleToolStripMenuItem_Click(object sender, EventArgs e)
{
shape = 0;
pictureBox1.Refresh();
}
private void offToolStripMenuItem_Click(object sender, EventArgs e)
{
gridLines = 0;
pictureBox1.Refresh();
}
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
SQsize = 10;
pictureBox1.Refresh();
}
private void mediumToolStripMenuItem1_Click(object sender, EventArgs e)
{
SQsize = 25;
pictureBox1.Refresh();
}
private void largeToolStripMenuItem1_Click(object sender, EventArgs e)
{
SQsize = 50;
pictureBox1.Refresh();
}
private void slowToolStripMenuItem_Click(object sender, EventArgs e)
{
timer1.Interval = 400;
speed = 400;
if (speed == 400)
{
speedBar.Value = 0;
}
}
private void slowToolStripMenuItem1_Click(object sender, EventArgs e)
{
timer1.Interval = 200;
speed = 200;
if (speed == 200)
{
speedBar.Value = 1;
}
}
private void mediumToolStripMenuItem2_Click(object sender, EventArgs e)
{
timer1.Interval = 100;
speed = 100;
if (speed == 100)
{
speedBar.Value = 2;
}
}
private void fastToolStripMenuItem_Click(object sender, EventArgs e)
{
timer1.Interval = 50;
speed = 50;
if (speed == 50)
{
speedBar.Value = 3;
}
}
private void lightSpeedToolStripMenuItem_Click(object sender, EventArgs e)
{
timer1.Interval = 5;
speed = 5;
if (speed == 5)
{
speedBar.Value = 4;
}
}
private void cellcountAliveDead()
{
int currentAlive = 0;
int currentDead = 0;
int cellRow = 0;
while (cellRow < maxRow)
{
int cellCol = 0;
while (cellCol < maxCol)
{
if (paintSQ[cellCol, cellRow] == 1)
{
currentAlive++;
}
if (paintSQ[cellCol, cellRow] == 0)
{
currentDead++;
}
cellCol++;
}
cellRow++;
}
toolStripStatusLabel2.Text = "Cells Alive: " + currentAlive;
toolStripStatusLabel3.Text = "Dead Cells: " + currentDead;
if (aliveProgress.Visible)
{
aliveProgress.Value = (currentAlive) / (this.maxCol * this.maxRow) * (100);
}
if (DeadProgress.Visible)
{
DeadProgress.Value = (currentDead) / (this.maxCol * this.maxRow) * (100);
}
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void saveToolStripMenuItem_Click_1(object sender, EventArgs e)
{
saveMyData();
}
void saveMyData()
{
Stream outputStream = File.OpenWrite(@"C:\myData.dat");
for (int x = 0; x < myData.Length; x++)
{
outputStream.WriteByte(myData[x]);
}
outputStream.Close();
}
void loadMyData()
{
Stream inputStream = File.OpenRead(@"C:\myData.dat");
for (int x = 0; x < myData.Length; x++)
{
myData[x] = (byte)inputStream.ReadByte();
}
inputStream.Close();
}
private void openToolStripMenuItem_Click_1(object sender, EventArgs e)
{
loadMyData();
}
}
}