Migrated handling of grid and game to game.(c/h).
This commit is contained in:
		
							parent
							
								
									1ad1660736
								
							
						
					
					
						commit
						50eeaa8f0a
					
				
							
								
								
									
										51
									
								
								game.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								game.c
									
									
									
									
									
								
							| @ -6,9 +6,15 @@ | ||||
| static Grid* grid = 0; | ||||
| 
 | ||||
| static bool running = true; | ||||
| static bool stepping_mode = false; | ||||
| static bool do_step = true; | ||||
| static Vect2i cursor; | ||||
| 
 | ||||
| // declaration of locally used
 | ||||
| static void toggleStepMode(); | ||||
| 
 | ||||
| static void toggleCell(); | ||||
| 
 | ||||
| void initGame() | ||||
| { | ||||
| 	int width = 0; | ||||
| @ -16,28 +22,29 @@ void initGame() | ||||
| 	// stdscr is screen created by initscr()
 | ||||
| 	getmaxyx(stdscr, height, width); | ||||
| 	 | ||||
| 	initGrid(grid, height, width); | ||||
| 	grid = initGrid(width, height); | ||||
| 	randomizeGrid(grid); | ||||
| 	cursor.x = width/2; cursor.y = height/2; | ||||
| } | ||||
| 
 | ||||
| static void step() { do_step ^= 1; } | ||||
| 
 | ||||
| void updateGame() | ||||
| { | ||||
| 	if (!grid) return; | ||||
| 	if (do_step) updateGrid(grid); | ||||
| 	if (do_step) { | ||||
| 		updateGrid(grid); | ||||
| 		if (stepping_mode) do_step = false; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void drawGame() | ||||
| { | ||||
| 	if (!grid) return; | ||||
| 	drawGrid(grid); | ||||
| 	refresh(); | ||||
| } | ||||
| 
 | ||||
| bool isRunning() { return running; } | ||||
| 
 | ||||
| 
 | ||||
| void handleInput(char ch) | ||||
| { | ||||
| 	switch (ch) { | ||||
| @ -45,7 +52,7 @@ void handleInput(char ch) | ||||
| 		running = false; | ||||
| 		break; | ||||
| 	case ' ': | ||||
| 		do_step ^= 1; | ||||
| 		toggleStepMode(); | ||||
| 		break; | ||||
| 	case 'h': | ||||
| 		moveVect2i(&cursor, -1, 0); | ||||
| @ -59,13 +66,18 @@ void handleInput(char ch) | ||||
| 	case 'l': | ||||
| 		moveVect2i(&cursor, 1, 0); | ||||
| 		break; | ||||
| 	case 's': | ||||
| 		step(); | ||||
| 	case '\n': | ||||
| 		do_step = true; | ||||
| 		break; | ||||
| 	case 'i': | ||||
| 		toggleCell(); | ||||
| 		break; | ||||
| 	default: | ||||
| 		if (ch != -1) do_step = true; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void showLastPressed(char ch) | ||||
| void drawLastPressed(char ch) | ||||
| { | ||||
| 	static char lastc = ' '; | ||||
| 	if (ch != -1) lastc = ch; | ||||
| @ -74,16 +86,33 @@ void showLastPressed(char ch) | ||||
| 	attroff(COLOR_PAIR(2)); | ||||
| } | ||||
| 
 | ||||
| void showCurPos() | ||||
| void drawCurPos() | ||||
| { | ||||
| 	attron(COLOR_PAIR(2)); | ||||
| 	mvprintw(1, 0, "curpos: %i, %i", cursor.x, cursor.y); | ||||
| 	attroff(COLOR_PAIR(2)); | ||||
| 	attron(COLOR_PAIR(3)); | ||||
| 	mvaddch(cursor.y, cursor.x, ' '); | ||||
| 	attroff(COLOR_PAIR(3)); | ||||
| 	attroff(COLOR_PAIR(2)); | ||||
| } | ||||
| 
 | ||||
| void endGame() | ||||
| { | ||||
| 	// free stuff
 | ||||
| } | ||||
| 
 | ||||
| // locally used
 | ||||
| static void toggleStepMode() | ||||
| { | ||||
| 	stepping_mode ^= 1; | ||||
| 	do_step = true; | ||||
| } | ||||
| 
 | ||||
| static void toggleCell() | ||||
| { | ||||
| 	if (!grid) return; | ||||
| 	bool cell = getPixel(grid, cursor.x, cursor.y); | ||||
| 	if (cell) setPixel(grid, cursor.x, cursor.y, 0); | ||||
| 	else setPixel(grid, cursor.x, cursor.y, 1); | ||||
| 
 | ||||
| } | ||||
|  | ||||
							
								
								
									
										4
									
								
								game.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								game.h
									
									
									
									
									
								
							| @ -15,9 +15,9 @@ void handleInput(char ch); | ||||
| 
 | ||||
| // Overlays
 | ||||
| // Draws cursor and cursor position
 | ||||
| void showLastPressed(char ch); | ||||
| void drawLastPressed(char ch); | ||||
| 
 | ||||
| void showCurPos(); | ||||
| void drawCurPos(); | ||||
| 
 | ||||
| bool endgame(); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										86
									
								
								grid.c
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								grid.c
									
									
									
									
									
								
							| @ -3,12 +3,17 @@ | ||||
| #include <ncurses.h> | ||||
| #include "grid.h" | ||||
| 
 | ||||
| void initGrid(Grid* grid, unsigned int width, unsigned int height) | ||||
| // locally used declaration
 | ||||
| static bool isAliveNext(Grid* grid, int x, int y); | ||||
| 
 | ||||
| Grid* initGrid(unsigned int width, unsigned int height) | ||||
| { | ||||
| 	Grid* grid = (Grid*)malloc(sizeof(Grid)); | ||||
| 	grid->size = width*height; | ||||
| 	grid->width = width; | ||||
| 	grid->state = (bool*)malloc(sizeof(bool)*grid->size); | ||||
| 	grid->next_state = (bool*)malloc(sizeof(bool)*grid->size); | ||||
| 	return grid; | ||||
| } | ||||
| 
 | ||||
| void randomizeGrid(Grid* grid) | ||||
| @ -34,6 +39,46 @@ void clearGrid(Grid* grid) | ||||
| 	for (int i = 0; i < grid->size; i++) grid->state[i]=false; | ||||
| } | ||||
| 
 | ||||
| void updateGrid(Grid* grid) | ||||
| { | ||||
| 	unsigned int width = grid->width; | ||||
| 	unsigned int height = grid->size/width; | ||||
| 
 | ||||
| 	for (int y = 0; y < height; y++) { | ||||
| 		for (int x = 0; x < width; x++) { | ||||
| 			grid->next_state[toIndex(grid, x, y)] = isAliveNext(grid, x, y); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	for (int i = 0; i < grid->size; i++) { | ||||
| 		grid->state[i] = grid->next_state[i]; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void setPixel(Grid* grid, int x, int y, bool on) | ||||
| { | ||||
| 	grid->state[toIndex(grid, x, y)] = on; | ||||
| } | ||||
| 
 | ||||
| void drawGrid(Grid* grid) | ||||
| { | ||||
| 	unsigned int width, height; | ||||
| 	width = grid->width; | ||||
| 	height = grid->size/width; | ||||
| 	// Init color pair init_pair(index, fg, bg);
 | ||||
| 	for (int y = 0; y < height; y++) { | ||||
| 		for (int x = 0; x < width; x++) { | ||||
| 			if (grid->state[toIndex(grid, x, y)]){ | ||||
| 				attron(COLOR_PAIR(1)); | ||||
| 				mvaddch(y, x, ' '); | ||||
| 				attroff(COLOR_PAIR(1)); | ||||
| 			} | ||||
| 			else mvaddch(y, x, ' '); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // locally used
 | ||||
| // check if cell's next state is alive
 | ||||
| static bool isAliveNext(Grid* grid, int x, int y) | ||||
| { | ||||
| @ -71,42 +116,3 @@ static bool isAliveNext(Grid* grid, int x, int y) | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| void updateGrid(Grid* grid) | ||||
| { | ||||
| 	unsigned int width = grid->width; | ||||
| 	unsigned int height = grid->size/width; | ||||
| 
 | ||||
| 	for (int y = 0; y < height; y++) { | ||||
| 		for (int x = 0; x < width; x++) { | ||||
| 			grid->next_state[toIndex(grid, x, y)] = isAliveNext(grid, x, y); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	for (int i = 0; i < grid->size; i++) { | ||||
| 		grid->state[i] = grid->next_state[i]; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void putPixel(Grid* grid, int x, int y) | ||||
| { | ||||
| 	grid->state[toIndex(grid, x, y)] = true; | ||||
| } | ||||
| 
 | ||||
| void drawGrid(Grid* grid) | ||||
| { | ||||
| 	unsigned int width, height; | ||||
| 	width = grid->width; | ||||
| 	height = grid->size/width; | ||||
| 	// Init color pair init_pair(index, fg, bg);
 | ||||
| 	for (int y = 0; y < height; y++) { | ||||
| 		for (int x = 0; x < width; x++) { | ||||
| 			if (grid->state[toIndex(grid, x, y)]){ | ||||
| 				attron(COLOR_PAIR(1)); | ||||
| 				mvaddch(y, x, ' '); | ||||
| 				attroff(COLOR_PAIR(1)); | ||||
| 			} | ||||
| 			else mvaddch(y, x, ' '); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										4
									
								
								grid.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								grid.h
									
									
									
									
									
								
							| @ -10,7 +10,7 @@ typedef struct Grid { | ||||
| 	bool* next_state; | ||||
| } Grid; | ||||
| 
 | ||||
| void initGrid(Grid* grid, unsigned int width, unsigned int height); | ||||
| Grid* initGrid(unsigned int width, unsigned int height); | ||||
| 
 | ||||
| void randomizeGrid(Grid* grid); | ||||
| 
 | ||||
| @ -22,7 +22,7 @@ void clearGrid(Grid* grid); | ||||
| 
 | ||||
| void updateGrid(Grid* grid); | ||||
| 
 | ||||
| void putPixel(Grid* grid, int x, int y); | ||||
| void setPixel(Grid* grid, int x, int y, bool on); | ||||
| 
 | ||||
| void drawGrid(Grid* grid); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										10
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								main.c
									
									
									
									
									
								
							| @ -36,7 +36,7 @@ int main() | ||||
| 	const int FRAME_RATE = 30; | ||||
| 	const float FRAME_TIME = 1.f/(float)FRAME_RATE; | ||||
| 
 | ||||
| 	//initGame();
 | ||||
| 	initGame(); | ||||
| 
 | ||||
| 	float t = 0; | ||||
| 	while (isRunning()) { | ||||
| @ -45,9 +45,13 @@ int main() | ||||
| 
 | ||||
| 		handleInput(ch); | ||||
| 
 | ||||
| 		//drawGame();
 | ||||
| 		drawGame(); | ||||
| 		drawLastPressed(ch); | ||||
| 		drawCurPos(); | ||||
| 
 | ||||
| 		//updateGame();
 | ||||
| 		refresh(); | ||||
| 		 | ||||
| 		updateGame(); | ||||
| 
 | ||||
| 		usleep(pow(10,6)*(FRAME_TIME-t)); | ||||
| 		float t = (float) (clock()-start_t) / (float) CLOCKS_PER_SEC; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user