/* * @Author: klmp200 * @Date: 2016-12-27 19:59:21 * @Last Modified by: klmp200 * @Last Modified time: 2016-12-29 02:51:25 */ #include #include #include #include #include #include #include #include void SetPixel(SDL_Renderer *renderer, int x, int y, bool value){ if (value){ SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); } else { SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); } SDL_RenderDrawPoint(renderer, x, y); } void DisplayMatrixSDL(SCREEN *screen, Matrix m){ int i; int j; SDL_SetRenderDrawColor(screen->renderer, 0, 0, 0, 0); SDL_RenderClear(screen->renderer); for (i=0;irenderer, i, j, GetCellValue(m, j, i)); } } SDL_RenderPresent(screen->renderer); } void WaitUntilEnter(SCREEN * screen){ int keypress = 0; while (!keypress){ while(SDL_PollEvent(&screen->event)){ switch (screen->event.type){ case SDL_QUIT: keypress = 1; break; case SDL_KEYDOWN: switch(screen->event.key.keysym.sym){ case SDLK_RETURN: keypress = 1; break; } } } } } int NewWindowFromMatrix(Matrix m){ SCREEN screen; screen.WIDTH = m.colCount; screen.HEIGHT = m.rowCount; if (SDL_Init(SDL_INIT_VIDEO) < 0){ SDL_Quit(); return 1; } SDL_CreateWindowAndRenderer(screen.WIDTH, screen.HEIGHT, SDL_WINDOW_RESIZABLE | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_SHOWN, &(screen.window), &(screen.renderer)); if (screen.window == NULL || screen.renderer == NULL){ SDL_Quit(); return 1; } DisplayMatrixSDL(&screen, m); WaitUntilEnter(&screen); SDL_DestroyRenderer(screen.renderer); SDL_DestroyWindow(screen.window); SDL_Quit(); return 0; } bool YesOrNo(char message[]){ char response; printf("%s (Y/n)\n", message); response = getchar(); ClearBuffer(); if (response == 'n'){ return false; } else { return true; } } void ClearBuffer(){ char c; while ((c = getchar()) != '\n' && c != EOF) { } } void DisplayMatrixGUI(Matrix m, bool useSDL){ if (useSDL){ printf("Press ENTER or the red cross to exit the window and continue.\n"); NewWindowFromMatrix(m); } else { BasicPrintMatrix(m); } } int SafeNumberInput(int min, int max){ char str[30]; int input; fgets(str, 29, stdin); ClearBuffer(); input = atoi(str); while (input < min || input > max){ printf("The number should be between %d and %d\n", min, max); fgets(str, 29, stdin); ClearBuffer(); input = atoi(str); } return input; }