我用c ++编写游戏风险编程。在该游戏中,您可以向您所在国家/地区的国家/地区宣战。
但我唯一可以想出来测试两个国家是否是邻居"如果测试是一个巨大的。
以下是清单的声明:
//Europe:
gebieden << CGebied("iceland","europe");
gebieden << CGebied("scandinavia","europe");
gebieden << CGebied("great-britain", "europe");
gebieden << CGebied("northern-europe","europe");
gebieden << CGebied("western-europe","europe");
gebieden << CGebied("southern-europe","europe");
gebieden << CGebied("ukraine", "europe");
//Asia
gebieden << CGebied("ural", "asia");
gebieden << CGebied("siberia", "asia");
gebieden << CGebied("yakutsk", "asia");
gebieden << CGebied("kamchatka", "asia");
gebieden << CGebied("irkutsk", "asia");
gebieden << CGebied("mongolia", "asia");
gebieden << CGebied("afghanistan", "asia");
gebieden << CGebied("china", "asia");
gebieden << CGebied("japan", "asia");
gebieden << CGebied("middle-east", "asia");
gebieden << CGebied("india", "asia");
gebieden << CGebied("siam", "asia");
//Australië
gebieden << CGebied("indonesia", "australia");
gebieden << CGebied("new-guinea", "australia");
gebieden << CGebied("western-australia", "australia");
gebieden << CGebied("eastern-australia", "australia");
//Africa
gebieden << CGebied("egypt", "africa");
gebieden << CGebied("north-africa", "africa");
gebieden << CGebied("east-africa", "africa");
gebieden << CGebied("congo", "africa");
gebieden << CGebied("south-africa", "africa");
gebieden << CGebied("madagascar", "africa");
//North-America
gebieden << CGebied("alaska","n-america");
gebieden << CGebied("northwest territory", "n-america");
gebieden << CGebied("alberta", "n-america");
gebieden << CGebied("ontario", "n-america");
gebieden << CGebied("quebec", "n-america");
gebieden << CGebied("greenland", "n-america");
gebieden << CGebied("western-us", "n-america");
gebieden << CGebied("eastern-us", "n-america");
gebieden << CGebied("central-america", "n-america");
//South-America
gebieden << CGebied("venezuela", "s-america");
gebieden << CGebied("brazil", "s-america");
gebieden << CGebied("peru", "s-america");
gebieden << CGebied("argentina", "s-america");
这是巨人如果测试的一部分:
if(QString::compare(naam1,"alaska",Qt::CaseInsensitive) || QString::compare(naam2,"alaska", Qt::CaseInsensitive))
{
if(QString::compare(naam1,"kamchatka", Qt::CaseInsensitive) || QString::compare(naam2,"kamchatka", Qt::CaseInsensitive))
return 1;
if(QString::compare(naam1, "northwest territory", Qt::CaseInsensitive) || QString::compare(naam2, "northwest territory", Qt::CaseInsensitive))
return 1;
if(QString::compare(naam1, "alberta", Qt::CaseInsensitive) || QString::compare(naam2, "alberta", Qt::CaseInsensitive))
return 1;
}
有更有效的方法吗? 谢谢!
答案 0 :(得分:1)
您使用什么样的数据结构来存储您的诉讼?
我建议使用图表类型结构:对于每个国家/地区,您都会保留一个列表(std::set<Country*>
)的邻居。通过这种方式,您可以轻松检查其他国家/地区是否在其邻居列表中。
另一种可能性是:
bool isNeighbour[COUNTRY_COUNT][COUNTRY_COUNT];
这比c
更c++
。它假定您的县已编号,并且可以让您查找邻居,如
if(isNeighbour[countryAid][countryBid]){...
请记住,你必须两次填写每个关系才能使它们互相生效。
答案 1 :(得分:1)
我认为使用巨人&#39; if&#39;不是正确的方式。
我会尝试创建一个class Map
,并且在该类的内部,我将使用每个国家的名称作为已经具有我需要的信息的函数,在这种情况下它是邻居。
这样做,每当我想要发现哪些国家/地区是邻居时,我只需要调用具有该国家/地区功能的class Map
,例如country.Italy(neighbours)
或country.Italy()
,其中country将是一个对象,意大利是Map类中函数的名称。
答案 2 :(得分:0)
您可以在每个国家/地区结构中使用指针向量来创建&#34;流程图&#34;比如说所有国家邻居的国家。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct country{
vector<country*> neighbours;
//various other properties of the country.
string name;
};
int main()
{
country country1;
country country2;
country1.name = "The first country";
country2.name = "The second country";
//Make country1 and country 2 neighbours.
country1.neighbours.push_back(&country2);
country2.neighbours.push_back(&country1);
cout<<country1.name<<" is a neighbour with "<<country1.neighbours[0]->name<<endl;
return 0;
}