C++ - Game of Life
Auteur: TjOeNeR - 04 december 2006 - 15:17 - Gekeurd door: Joel - Hits: 3490 - Aantal punten: (0 stemmen)
|
Code: |
<?/**
* Auteur: Jan De Kock
* Klas: 2EA-ICT/2
* Kort: "Game of Life"
* Bedenkingen
* Game of life had ik al eens tegengekomen op het net, maar dan met leeftijden (dus dieptes) bij
* Ik von dit wel een fascinerend iets, dus heb ik mij daar eens in verdiept.
* Ik heb daarom ook deze C implementatie geschreven.
* Bronnen: - http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life (voor informatie, niet voor source)
*/
#include <iostream>
using namespace std;
#define WIDTH 72
#define HEIGHT 50
#define LIVE '*'
#define DEAD '.'
#define XHALF (WIDTH / 2)
#define YHALF (HEIGHT / 2)
void display(char world[WIDTH+2][HEIGHT+2]);
void empty (char world[WIDTH+2][HEIGHT+2]);
void live (char world[WIDTH+2][HEIGHT+2]);
void setCell(int x, int y, char world[WIDTH+2][HEIGHT+2]);
void inputCell(char world[WIDTH+2][HEIGHT+2]);
int main()
{
char world[WIDTH+2][HEIGHT+2];
empty(world);
setCell(XHALF+3, YHALF-1, world);
setCell(XHALF-3, YHALF+0, world);
setCell(XHALF-2, YHALF+0, world);
setCell(XHALF-2, YHALF+1, world);
setCell(XHALF+2, YHALF+1, world);
setCell(XHALF+3, YHALF+1, world);
setCell(XHALF+4, YHALF+1, world);
while(true)
{
system("cls");
display(world);
system("pause");
live(world);
}
}
/**
* Geeft de wereld weer
*/
void display(char world[WIDTH+2][HEIGHT+2])
{
int x, y;
for(y = 1; y <= HEIGHT; y++)
{
for(x = 1; x <= WIDTH; x++)
{
cout << world[x][y];
}
cout << endl;
}
cout << endl;
}
/**
* Maakt de wereld leeg (of doods)
*/
void empty(char world[WIDTH+2][HEIGHT+2])
{
memset(world, DEAD, (WIDTH+2)*(HEIGHT+2));
}
/**
* Geeft de wereld een iteratie bij.
*/
void live(char world[WIDTH+2][HEIGHT+2])
{
int x, y, neighbours;
char tempw[WIDTH+2][HEIGHT+2];
for(x = 1; x <= WIDTH; x++)
{
for(y = 1; y <= HEIGHT; y++)
{
// Tel het aantal buren
neighbours = (
(world[x-1][y-1] == LIVE ? 1 : 0) +
(world[x-0][y-1] == LIVE ? 1 : 0) +
(world[x+1][y-1] == LIVE ? 1 : 0) +
(world[x-1][y-0] == LIVE ? 1 : 0) +
(world[x+1][y-0] == LIVE ? 1 : 0) +
(world[x-1][y+1] == LIVE ? 1 : 0) +
(world[x-0][y+1] == LIVE ? 1 : 0) +
(world[x+1][y+1] == LIVE ? 1 : 0));
if(neighbours < 2 || neighbours > 3)
tempw[x][y] = DEAD;
else if(neighbours == 3)
tempw[x][y] = LIVE;
else
tempw[x][y] = world[x][y];
}
}
memcpy(world, tempw, (WIDTH+2)*(HEIGHT+2));
}
/**
* Zet een cel op levend
*/
void setCell(int x, int y, char world[WIDTH+2][HEIGHT+2])
{
world[x][y] = LIVE;
}
/**
* Geef een cel in
*/
void inputCell(char world[WIDTH+2][HEIGHT+2])
{
int x, y;
cout << "X-Positie van cel (van 0 tot " << WIDTH << "): ";
cin >> x;
cout << "Y-Positie van cel (van 0 tot " << HEIGHT << "): ";
cin >> y;
setCell(x, y, world);
}
<?/** * Auteur: Jan De Kock * Klas: 2EA-ICT/2 * Kort: "Game of Life" * Bedenkingen * Game of life had ik al eens tegengekomen op het net, maar dan met leeftijden (dus dieptes) bij * Ik von dit wel een fascinerend iets, dus heb ik mij daar eens in verdiept. * Ik heb daarom ook deze C implementatie geschreven. * Bronnen: - http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life (voor informatie, niet voor source) */ #include <iostream> using namespace std; #define WIDTH 72 #define HEIGHT 50 #define LIVE '*' #define DEAD '.' #define XHALF (WIDTH / 2) #define YHALF (HEIGHT / 2) void display(char world[WIDTH+2][HEIGHT+2]); void empty (char world [WIDTH +2][HEIGHT +2]);void live (char world[WIDTH+2][HEIGHT+2]); void setCell(int x, int y, char world[WIDTH+2][HEIGHT+2]); void inputCell(char world[WIDTH+2][HEIGHT+2]); int main() { char world[WIDTH+2][HEIGHT+2]; setCell(XHALF+3, YHALF-1, world); setCell(XHALF-3, YHALF+0, world); setCell(XHALF-2, YHALF+0, world); setCell(XHALF-2, YHALF+1, world); setCell(XHALF+2, YHALF+1, world); setCell(XHALF+3, YHALF+1, world); setCell(XHALF+4, YHALF+1, world); while(true) { display(world); live(world); } } /** * Geeft de wereld weer */ void display(char world[WIDTH+2][HEIGHT+2]) { int x, y; for(y = 1; y <= HEIGHT; y++) { for(x = 1; x <= WIDTH; x++) { cout << world[x][y]; } cout << endl; } cout << endl; } /** * Maakt de wereld leeg (of doods) */ void empty(char world [WIDTH +2][HEIGHT +2]){ memset(world, DEAD, (WIDTH+2)*(HEIGHT+2)); } /** * Geeft de wereld een iteratie bij. */ void live(char world[WIDTH+2][HEIGHT+2]) { int x, y, neighbours; char tempw[WIDTH+2][HEIGHT+2]; for(x = 1; x <= WIDTH; x++) { for(y = 1; y <= HEIGHT; y++) { // Tel het aantal buren neighbours = ( (world[x-1][y-1] == LIVE ? 1 : 0) + (world[x-0][y-1] == LIVE ? 1 : 0) + (world[x+1][y-1] == LIVE ? 1 : 0) + (world[x-1][y-0] == LIVE ? 1 : 0) + (world[x+1][y-0] == LIVE ? 1 : 0) + (world[x-1][y+1] == LIVE ? 1 : 0) + (world[x-0][y+1] == LIVE ? 1 : 0) + (world[x+1][y+1] == LIVE ? 1 : 0)); if(neighbours < 2 || neighbours > 3) tempw[x][y] = DEAD; else if(neighbours == 3) tempw[x][y] = LIVE; else tempw[x][y] = world[x][y]; } } memcpy(world, tempw, (WIDTH+2)*(HEIGHT+2)); } /** * Zet een cel op levend */ void setCell(int x, int y, char world[WIDTH+2][HEIGHT+2]) { world[x][y] = LIVE; } /** * Geef een cel in */ void inputCell(char world[WIDTH+2][HEIGHT+2]) { int x, y; cout << "X-Positie van cel (van 0 tot " << WIDTH << "): "; cin >> x; cout << "Y-Positie van cel (van 0 tot " << HEIGHT << "): "; cin >> y; setCell(x, y, world); }
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|