#include
#include
// 初始化SDL
int init(SDL_Window window, SDL_Renderer renderer) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %sn", SDL_GetError());
return 0;
}
*window = SDL_CreateWindow("NS Diagram", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);
if (*window == NULL) {
printf("Window could not be created! SDL_Error: %sn", SDL_GetError());
return 0;
}
*renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);
if (*renderer == NULL) {
printf("Renderer could not be created! SDL_Error: %sn", SDL_GetError());
SDL_DestroyWindow(*window);
return 0;
}
return 1;
}
// 绘制椭圆
void drawEllipse(SDL_Renderer *renderer, int x, int y, int rx, int ry) {
for (int w = 0; w < rx * 2; w++) {
for (int h = 0; h < ry * 2; h++) {
int dx = rx - w; // horizontal offset
int dy = ry - h; // vertical offset
if ((dx*dx + dy*dy) <= (rx * rx)) {
SDL_RenderDrawPoint(renderer, x + dx, y + dy);
SDL_RenderDrawPoint(renderer, x - dx, y + dy);
SDL_RenderDrawPoint(renderer, x + dx, y - dy);
SDL_RenderDrawPoint(renderer, x - dx, y - dy);
}
}
}
}
// 绘制矩形
void drawRectangle(SDL_Renderer *renderer, int x, int y, int w, int h) {
SDL_Rect rect = {x, y, w, h};
SDL_RenderDrawRect(renderer, &rect);
}
// 绘制菱形
void drawDiamond(SDL_Renderer *renderer, int x, int y, int w, int h) {
SDL_RenderDrawLine(renderer, x, y - h/2, x + w/2, y);
SDL_RenderDrawLine(renderer, x + w/2, y, x, y + h/2);
SDL_RenderDrawLine(renderer, x, y + h/2, x - w/2, y);
SDL_RenderDrawLine(renderer, x - w/2, y, x, y - h/2);
}
// 绘制连接线
void drawLine(SDL_Renderer *renderer, int x1, int y1, int x2, int y2) {
SDL_RenderDrawLine(renderer, x1, y1, x2, y2);
}
// 主函数
int main(int argc, char* args[]) {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
if (!init(&window, &renderer)) {
return -1;
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
// 绘制起始符
drawEllipse(renderer, 400, 100, 50, 30);
// 绘制处理过程
drawRectangle(renderer, 350, 200, 100, 50);
// 绘制决策
drawDiamond(renderer, 400, 350, 100, 50);
// 绘制连接线
drawLine(renderer, 400, 130, 400, 200); // 起始符到处理过程
drawLine(renderer, 400, 250, 400, 325); // 处理过程到决策
SDL_RenderPresent(renderer);
SDL_Delay(5000);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}