first commit
This commit is contained in:
commit
a5a2be8e3a
8 changed files with 362 additions and 0 deletions
244
Hw01_121044046.cpp
Normal file
244
Hw01_121044046.cpp
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
/*
|
||||
* Hw01_121044046.cpp
|
||||
*
|
||||
* Created on: 23 Eyl 2014
|
||||
* Author: Yakup TURKAN
|
||||
*
|
||||
* Project Name : The Game of Life
|
||||
* Purpose : Implementing game of life(Von
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define FILLER "-"
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
//Prototypes
|
||||
struct cell_s {
|
||||
int isAlive; //1 = Alive 0 = Dead
|
||||
};
|
||||
|
||||
struct board_s {
|
||||
int rowc;
|
||||
int colc;
|
||||
struct cell_s *cells;
|
||||
};
|
||||
|
||||
struct event_s {
|
||||
struct cell_s *cell;
|
||||
struct event_s *nextEvent;
|
||||
};
|
||||
|
||||
struct board_s *initBoard(char *filename);
|
||||
void nextStep(struct board_s *board);
|
||||
void printBoard(struct board_s *board);
|
||||
void printBoard(struct board_s *board, char *filename);
|
||||
struct cell_s *getCell(struct board_s *board, int x, int y);
|
||||
struct event_s *addEvent(struct event_s *eventc, struct cell_s *cell);
|
||||
struct event_s *queEvents(struct board_s *board);
|
||||
void pollEvents(struct event_s *eventh);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char filename[FILENAME_MAX];
|
||||
struct board_s *board;
|
||||
int stepc;
|
||||
|
||||
cout << "Please enter the file name : ";
|
||||
cin >> filename;
|
||||
|
||||
cout << "Initial form of file : " << endl;
|
||||
board = initBoard(filename);
|
||||
printBoard(board);
|
||||
|
||||
cout << "How many steps you want to see ? : ";
|
||||
cin >> stepc;
|
||||
|
||||
while (cin.get() != '\n');
|
||||
|
||||
for (int i = 0; i < stepc; ++i) {
|
||||
cout << "Step " << i + 1 << " : " << endl;
|
||||
nextStep(board);
|
||||
printBoard(board);
|
||||
while (cin.get() != '\n')
|
||||
;
|
||||
}
|
||||
|
||||
cout << "Please enter the output file name : ";
|
||||
cin >> filename;
|
||||
|
||||
printBoard(board, filename);
|
||||
|
||||
free(board->cells);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct board_s *initBoard(char *filename) {
|
||||
FILE *file;
|
||||
static struct board_s board;
|
||||
int rowc, colc;
|
||||
char c;
|
||||
|
||||
file = fopen(filename, "r");
|
||||
|
||||
if (file != NULL) {
|
||||
fscanf(file, "%d %d%c", &rowc, &colc,&c);
|
||||
|
||||
if (c == '\r')
|
||||
fscanf(file, "%c", &c);
|
||||
|
||||
board.rowc = rowc;
|
||||
board.colc = colc;
|
||||
board.cells = (struct cell_s *) malloc(
|
||||
sizeof(struct cell_s) * rowc * colc);
|
||||
|
||||
for (int i = 0; i < rowc; ++i) {
|
||||
for (int j = 0; j < colc; ++j) {
|
||||
fscanf(file, "%c", &c);
|
||||
|
||||
if (c == 'X' || c == 'x')
|
||||
board.cells[i * colc + j].isAlive = TRUE;
|
||||
else
|
||||
board.cells[i * colc + j].isAlive = FALSE;
|
||||
}
|
||||
fscanf(file, "%c", &c);
|
||||
|
||||
if (c == '\r')
|
||||
fscanf(file, "%c", &c);
|
||||
}
|
||||
} else
|
||||
cout << "Error occurred : Cannot read file." << endl
|
||||
<< "Please make sure file exists."
|
||||
<< " If error persists contact with writer." << endl;
|
||||
|
||||
fclose(file);
|
||||
return &board;
|
||||
}
|
||||
|
||||
void nextStep(struct board_s *board) {
|
||||
pollEvents(queEvents(board));
|
||||
}
|
||||
|
||||
void printBoard(struct board_s *board) {
|
||||
struct cell_s *cells = board->cells;
|
||||
int rowc = board->rowc, colc = board->colc;
|
||||
|
||||
for (int i = 0; i < rowc; ++i) {
|
||||
for (int j = 0; j < colc; ++j)
|
||||
if (cells[i * colc + j].isAlive)
|
||||
cout << 'X';
|
||||
else
|
||||
cout << FILLER;
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void printBoard(struct board_s *board, char *filename) {
|
||||
struct cell_s *cells = board->cells;
|
||||
int rowc = board->rowc, colc = board->colc;
|
||||
FILE *outp;
|
||||
|
||||
outp = fopen(filename, "w");
|
||||
|
||||
if (outp == NULL) {
|
||||
cout << "An error occurred : Cannot write to file!" << endl
|
||||
<< "Please contact with writer." << endl;
|
||||
} else {
|
||||
for (int i = 0; i < rowc; ++i) {
|
||||
for (int j = 0; j < colc; ++j)
|
||||
if (cells[i * colc + j].isAlive)
|
||||
fprintf(outp, "X");
|
||||
else
|
||||
fprintf(outp, FILLER);
|
||||
fprintf(outp, "\n");
|
||||
}
|
||||
fclose(outp);
|
||||
}
|
||||
}
|
||||
|
||||
struct cell_s *getCell(struct board_s *board, int x, int y) {
|
||||
if (x >= 0 && x < board->colc)
|
||||
if (y >= 0 && y < board->rowc)
|
||||
return &(board->cells[y * board->colc + x]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct event_s *addEvent(struct event_s *eventc, struct cell_s *cell) {
|
||||
struct event_s *eventn;
|
||||
|
||||
eventn = (struct event_s *) malloc(sizeof(struct event_s));
|
||||
eventn->cell = cell;
|
||||
eventn->nextEvent = NULL;
|
||||
|
||||
if (eventc != NULL)
|
||||
eventc->nextEvent = eventn;
|
||||
|
||||
return eventn;
|
||||
}
|
||||
|
||||
struct event_s *queEvents(struct board_s *board) {
|
||||
struct cell_s *cellc, *celln;
|
||||
struct event_s *eventh = NULL, *eventc = NULL;
|
||||
int ans, //Alive Neighbor Count
|
||||
shouldAdd;
|
||||
|
||||
for (int row = 0; row < board->rowc; ++row) {
|
||||
for (int col = 0; col < board->colc; ++col) {
|
||||
ans = 0;
|
||||
shouldAdd = TRUE;
|
||||
cellc = getCell(board, col, row);
|
||||
|
||||
for (int distx = -1; distx < 2; ++distx) {
|
||||
for (int disty = -1; disty < 2; ++disty) {
|
||||
celln = getCell(board, distx + col, row + disty);
|
||||
if (celln != NULL && celln->isAlive)
|
||||
++ans;
|
||||
}
|
||||
}
|
||||
|
||||
if (cellc->isAlive) {
|
||||
if (ans == 3 || ans == 4)
|
||||
shouldAdd = FALSE;
|
||||
} else if (ans != 3)
|
||||
shouldAdd = FALSE;
|
||||
|
||||
if (shouldAdd) {
|
||||
if (eventh == NULL) {
|
||||
eventh = addEvent(eventh, cellc);
|
||||
eventc = eventh;
|
||||
} else
|
||||
eventc = addEvent(eventc, cellc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return eventh;
|
||||
}
|
||||
|
||||
void pollEvents(struct event_s *eventh) {
|
||||
struct cell_s *cell;
|
||||
|
||||
if (eventh != NULL) {
|
||||
cell = eventh->cell;
|
||||
|
||||
//Births
|
||||
if (!cell->isAlive)
|
||||
cell->isAlive = TRUE;
|
||||
//Deaths
|
||||
else if (cell->isAlive)
|
||||
cell->isAlive = FALSE;
|
||||
|
||||
pollEvents(eventh->nextEvent);
|
||||
free(eventh);
|
||||
}
|
||||
}
|
||||
18
Pulsar.txt
Normal file
18
Pulsar.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
17 17
|
||||
-----------------
|
||||
-----------------
|
||||
----XXX---XXX----
|
||||
-----------------
|
||||
--X----X-X----X--
|
||||
--X----X-X----X--
|
||||
--X----X-X----X--
|
||||
----XXX---XXX----
|
||||
-----------------
|
||||
----XXX---XXX----
|
||||
--X----X-X----X--
|
||||
--X----X-X----X--
|
||||
--X----X-X----X--
|
||||
-----------------
|
||||
----XXX---XXX----
|
||||
-----------------
|
||||
-----------------
|
||||
26
SpikedBox.txt
Normal file
26
SpikedBox.txt
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
25 50
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
------------------X-X-X-X-X-----------------------
|
||||
------------------XXXXXXXXXXX---------------------
|
||||
-----------------XX--------X----------------------
|
||||
------------------X--------XX---------------------
|
||||
-----------------XX--------X----------------------
|
||||
------------------X--------XX---------------------
|
||||
-----------------XX--------X----------------------
|
||||
------------------X--------XX---------------------
|
||||
-----------------XX--------X----------------------
|
||||
------------------X--------XX---------------------
|
||||
-----------------XXXXXXXXXXX----------------------
|
||||
-------------------X-X-X-X-X----------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
--------------------------------------------------
|
||||
5
basic.txt
Normal file
5
basic.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
4 4
|
||||
----
|
||||
-X--
|
||||
-XX-
|
||||
----
|
||||
8
file.txt
Normal file
8
file.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
7 10
|
||||
X---X---X-
|
||||
XX-XX-XX-X
|
||||
--X-XX--X-
|
||||
-X-X--XXX-
|
||||
--X-XX-XXX
|
||||
-X-X-XXX-X
|
||||
----X-XX--
|
||||
20
gliderGun.txt
Normal file
20
gliderGun.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
20 40
|
||||
----------------------------------------
|
||||
--------------------------X-------------
|
||||
------------------------X-X-------------
|
||||
--------------XX------XX------------XX--
|
||||
-------------X---X----XX------------XX--
|
||||
--XX--------X-----X---XX----------------
|
||||
--XX--------X---X-XX----X-X-------------
|
||||
------------X-----X-------X-------------
|
||||
-------------X---X----------------------
|
||||
--------------XX------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
21
iron.txt
Normal file
21
iron.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
20 41
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------XXXXXXX-----------------
|
||||
----------------X---X---X----------------
|
||||
---------------XX---X---XX---------------
|
||||
--------------X-----X-----X--------------
|
||||
-------------X-------------X-------------
|
||||
------------XXXXXXXXXXXXXXXXX------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
20
ironResult.txt
Normal file
20
ironResult.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-------------------XXX-------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
----------------XX-----XX----------------
|
||||
-------------X-X--X---X--X-X-------------
|
||||
--------------X-XX-----XX-X--------------
|
||||
-------------------XXX-------------------
|
||||
---------------XX-------XX---------------
|
||||
-----------------------------------------
|
||||
----------------X-------X----------------
|
||||
------------------XXXXX------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
-----------------------------------------
|
||||
Loading…
Reference in a new issue