酷代码 AI
菜单

用c++写一个图形界面程序,有七个球,可以点击球然后按上下左右键移动球,七个球的颜色分别为红、橙、黄、绿、青、蓝、紫。不含第三方内容,球移动后原位置的球立即消失。不含控制台(黑框)

在C++中实现一个不含第三方库的图形界面程序,并且要实现球的移动功能,同时不显示控制台窗口,可以使用Windows API。以下是一个示例代码: ```cpp #include <windows.h> // 定义球的结构体 struct Ball { int x, y; COLORREF color; bool isSelected; }; // 定义七个球的颜色 const COLORREF ballColors[] = { RGB(255, 0, 0), // 红色 RGB(255, 165, 0), // 橙色 RGB(255, 255, 0), // 黄色 RGB(0, 128, 0), // 绿色 RGB(0, 255, 255), // 青色 RGB(0, 0, 255), // 蓝色 RGB(128, 0, 128) // 紫色 }; // 定义球的数量 const int ballCount = 7; Ball balls[ballCount]; // 窗口过程函数 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: { // 初始化球的位置和状态 for (int i = 0; i < ballCount; ++i) { balls[i].x = 50 + i * 100; balls[i].y = 100; balls[i].color = ballColors[i]; balls[i].isSelected = false; } break; } case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); // 绘制所有球 for (int i = 0; i < ballCount; ++i) { HBRUSH hBrush = CreateSolidBrush(balls[i].color); SelectObject(hdc, hBrush); Ellipse(hdc, balls[i].x - 20, balls[i].y - 20, balls[i].x + 20, balls[i].y + 20); DeleteObject(hBrush); } EndPaint(hwnd, &ps); break; } case WM_LBUTTONDOWN: { int clickX = LOWORD(lParam); int clickY = HIWORD(lParam); // 检查点击的位置是否在某个球内 for (int i = 0; i < ballCount; ++i) { if ((clickX - balls[i].x) * (clickX - balls[i].x) + (clickY - balls[i].y) * (clickY - balls[i].y) <= 20 * 20) { // 选中该球,取消其他球的选中状态 for (int j = 0; j < ballCount; ++j) { balls[j].isSelected = (j == i); } InvalidateRect(hwnd, NULL, TRUE); break; } } break; } case WM_KEYDOWN: { for (int i = 0; i < ballCount; ++i) { if (balls[i].isSelected) { switch (wParam) { case VK_UP: balls[i].y -= 10; break; case VK_DOWN: balls[i].y += 10; break; case VK_LEFT: balls[i].x -= 10; break; case VK_RIGHT: balls[i].x += 10; break; } InvalidateRect(hwnd, NULL, TRUE); break; } } break; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } // 主函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // 注册窗口类 WNDCLASS wc = {}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszClassName = L"BallWindowClass"; RegisterClass(&wc); // 创建窗口 HWND hwnd = CreateWindow(wc.lpszClassName, L"Moving Balls", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); // 隐藏控制台窗口 ShowWindow(GetConsoleWindow(), SW_HIDE); // 显示窗口 ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } ``` 代码解释: 1. 结构体 `Ball`:用于存储每个球的位置、颜色和选中状态。 2. 颜色数组 `ballColors`:存储七个球的颜色。 3. 窗口过程函数 `WndProc`:处理窗口的各种消息,包括窗口创建、绘制、鼠标点击和键盘按键事件。 - `WM_CREATE`:初始化球的位置和状态。 - `WM_PAINT`:绘制所有球。 - `WM_LBUTTONDOWN`:检查鼠标点击的位置是否在某个球内,并选中该球。 - `WM_KEYDOWN`:处理上下左右键,移动选中的球。 - `WM_DESTROY`:退出消息循环。 4. 主函数 `WinMain`: - 注册窗口类。 - 创建窗口。 - 隐藏控制台窗口。 - 显示窗口并开始消息循环。 编译和运行: 将上述代码保存为一个 `.cpp` 文件,例如 `ball_program.cpp`,然后使用Visual Studio等C++开发环境进行编译和运行。编译完成后,将会弹出一个窗口,显示七个不同颜色的球。你可以点击球,然后使用上下左右键移动选中的球。 [2026-01-23 08:22:03 | AI问答 | 1505点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多