#include <SFML/Graphics.hpp>
#include <vector>
#include <string>
#include <map>
#include <iostream>
// 定义国家结构体
struct Country {
std::string name;
sf::Color color;
std::vector<sf::Vector2f> borderPoints;
sf::Vector2f capitalPosition;
std::string capitalName;
};
// 定义大陆结构体
struct Continent {
std::string name;
sf::Color color;
std::vector<Country> countries;
};
class WorldMap {
private:
sf::RenderWindow window;
std::vector<Continent> continents;
sf::Font font;
float scale;
sf::Vector2f offset;
bool isDragging;
sf::Vector2i dragStart;
public:
WorldMap(unsigned int width, unsigned int height)
: window(sf::VideoMode(width, height), "世界地图"), scale(1.0f), offset(0, 0), isDragging(false) {
// 加载字体
if (!font.loadFromFile("arial.ttf")) {
std::cerr << "无法加载字体!" << std::endl;
}
// 初始化世界地图数据
initializeWorldMap();
}
// 初始化世界地图数据
void initializeWorldMap() {
// 这里简化处理,只创建几个代表性的国家和大陆
// 实际应用中可以从文件或数据库加载详细数据
// 亚洲
Continent asia;
asia.name = "亚洲";
asia.color = sf::Color(255, 100, 100, 100); // 半透明红色
// 中国
Country china;
china.name = "中国";
china.color = sf::Color(255, 50, 50);
china.borderPoints = {
sf::Vector2f(400, 200), sf::Vector2f(500, 150), sf::Vector2f(600, 200),
sf::Vector2f(650, 300), sf::Vector2f(600, 400), sf::Vector2f(450, 400),
sf::Vector2f(350, 350)
};
china.capitalPosition = sf::Vector2f(480, 280);
china.capitalName = "北京";
// 日本
Country japan;
japan.name = "日本";
japan.color = sf::Color(255, 100, 100);
japan.borderPoints = {
sf::Vector2f(650, 220), sf::Vector2f(680, 200), sf::Vector2f(700, 230),
sf::Vector2f(680, 260), sf::Vector2f(650, 250)
};
japan.capitalPosition = sf::Vector2f(680, 230);
japan.capitalName = "东京";
// 添加国家到亚洲
asia.countries.push_back(china);
asia.countries.push_back(japan);
// 欧洲
Continent europe;
europe.name = "欧洲";
&nbs