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