/* * Call board_reset and print the resulting board. * Copyright © 2023 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include /* * This will stub out the high precision timer, which means this will not * contribute to the initial seed (good for the tests we want to do). */ #include "game-notime.h" static int output_tile(unsigned tile, unsigned (*counts)[TILE_MAX], int goal) { static const char chars[TILE_MAX] = ".ROYGBW"; unsigned wtf = tile ? 4 : !goal; if (tile >= TILE_MAX) { fprintf(stderr, "invalid tile value (%u)\n", tile); return -1; } if (++counts[!goal][tile] > (tile ? 4 : !goal)) { printf("WTF %u\n", wtf); fprintf(stderr, "%s has too many (%u) %c tiles\n", goal ? "goal" : "game", counts[!goal][tile], chars[tile]); return -1; } putchar(chars[tile]); return 0; } int main(void) { unsigned counts[2][TILE_MAX] = {0}; struct board board; int i, j; game_reset(&board); for (i = 0; i < 25; i++) { int tile; tile = board_tile(board.game, i); if (output_tile(tile, counts, 0) < 0) return EXIT_FAILURE; if ((i+1) % 5) continue; if (i < 15) { putchar(' '); for (j = 0; j < 3; j++) { tile = board_tile(board.goal, i-4 + j); if (output_tile(tile, counts, 1) < 0) return EXIT_FAILURE; } } putchar('\n'); } return 0; }