|
|
楼主 |
发表于 2025-12-25 10:55:21
|
显示全部楼层
9数字亿进制点阵1
可以显示两竖,每竖4个数字,八个点阵阿拉伯数字,但是没有适度的间隔开来。
- #include <SDL2/SDL.h>
- #include <stdio.h>
- #include <stdbool.h> // 必须包含!
- #define DOT_SIZE 20
- #define PADDING 4 // 点与点之间,以及数字块之间的间隔
- // 3x5 点阵数字图案:0~9(这里只用前8个)
- const bool digits[10][5][3] = {
- {{true, true, true}, {true, false, true}, {true, false, true}, {true, false, true}, {true, true, true}}, // 0
- {{false, true, false}, {false, true, false}, {false, true, false}, {false, true, false}, {false, true, false}}, // 1
- {{true, true, true}, {false, false, true}, {true, true, true}, {true, false, false}, {true, true, true}}, // 2
- {{true, true, true}, {false, false, true}, {true, true, true}, {false, false, true}, {true, true, true}}, // 3
- {{true, false, true}, {true, false, true}, {true, true, true}, {false, false, true}, {false, false, true}}, // 4
- {{true, true, true}, {true, false, false}, {true, true, true}, {false, false, true}, {true, true, true}}, // 5
- {{true, true, true}, {true, false, false}, {true, true, true}, {true, false, true}, {true, true, true}}, // 6
- {{true, true, true}, {false, false, true}, {false, false, true}, {false, false, true}, {false, false, true}}, // 7
- {{true, true, true}, {true, false, true}, {true, true, true}, {true, false, true}, {true, true, true}}, // 8
- {{true, true, true}, {true, false, true}, {true, true, true}, {false, false, true}, {true, true, true}} // 9
- };
- int main(int argc, char* argv[]) {
- if (SDL_Init(SDL_INIT_VIDEO) != 0) {
- fprintf(stderr, "SDL_Init Error: %s\n", SDL_GetError());
- return 1;
- }
- const int grid_cols = 2; // 横向 2 个数字
- const int grid_rows = 4; // 竖向 4 个数字
- const int num_digits = 8; // 显示 0~7
- // 单个数字块的尺寸(含内部点阵间隙)
- const int block_width = 3 * DOT_SIZE + 2 * PADDING;
- const int block_height = 5 * DOT_SIZE + 4 * PADDING;
- // 整体窗口尺寸:每个块之间再加 PADDING 作为块间距
- int win_width = grid_cols * block_width + (grid_cols - 1) * PADDING;
- int win_height = grid_rows * block_height + (grid_rows - 1) * PADDING;
- SDL_Window* window = SDL_CreateWindow("2x4 3x5 Digit Matrix",
- SDL_WINDOWPOS_CENTERED,
- SDL_WINDOWPOS_CENTERED,
- win_width, win_height,
- SDL_WINDOW_SHOWN);
- if (!window) {
- fprintf(stderr, "SDL_CreateWindow Error: %s\n", SDL_GetError());
- SDL_Quit();
- return 1;
- }
- SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- if (!renderer) {
- fprintf(stderr, "SDL_CreateRenderer Error: %s\n", SDL_GetError());
- SDL_DestroyWindow(window);
- SDL_Quit();
- return 1;
- }
- bool quit = false;
- SDL_Event e;
- while (!quit) {
- while (SDL_PollEvent(&e)) {
- if (e.type == SDL_QUIT) {
- quit = true;
- }
- }
- // 白色背景
- SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
- SDL_RenderClear(renderer);
- // 绘制每个数字块
- for (int idx = 0; idx < num_digits; ++idx) {
- int row = idx / grid_cols; // 当前数字在网格中的行
- int col = idx % grid_cols; // 当前数字在网格中的列
- // 计算该数字块左上角坐标
- int block_x = col * (block_width + PADDING);
- int block_y = row * (block_height + PADDING);
- // 绘制该数字的 3x5 点阵
- for (int y = 0; y < 5; ++y) {
- for (int x = 0; x < 3; ++x) {
- if (digits[idx][y][x]) {
- int px = block_x + x * (DOT_SIZE + PADDING);
- int py = block_y + y * (DOT_SIZE + PADDING);
- SDL_Rect r = {px, py, DOT_SIZE, DOT_SIZE};
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 黑色点亮
- SDL_RenderFillRect(renderer, &r);
- }
- }
- }
- }
- SDL_RenderPresent(renderer);
- SDL_Delay(16);
- }
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
- return 0;
- }
复制代码 |
|