我试图在一个非常基本的程序中模拟一场战斗,但由于这是我第一次使用Java编写一个大程序,所以我对如何继续进行操作几乎一无所知.我以为我会有一个600×600的大面板并使用Graphics2D来绘制20x20矩形的地形......不幸的是,即使有几个教程,我也不知道该怎么做.
我有10种不同类型的地形可以循环,还有5种不同的景观轮廓.基本上我想让程序做的是当我在组合框中选择一个特定的轮廓时,它描绘了战斗中的景观和两个相对的边(虽然我还没有到那里)
老实说,我在这个项目上没有取得很大进展.我应该只使用Graphics2D和矩形这样的东西,还是应该切换到OpenGL或类似的东西?虽然凭借我目前的Java经验,我认为如果没有帮助我就不会有太大的帮助.无论如何,这是我到目前为止所拥有的:
public class Map extends JPanel {
int n = 1;
int x; int y;
int Area = 750;
public Color City = new Color(214,217,223);
public Color Desert = new Color(255,204,102);
public Color DirtRoad = new Color(153,102,0);
public Color Forest = new Color(0,102,0);
public Color Hills = new Color(51,153,0);
public Color Lake = new Color(0,153,153);
public Color Mountains = new Color(102,102,255);
public Color Ocean = new Color(0,0,153);
public Color PavedRoad = new Color(51,51,0);
public Color Plains = new …Run Code Online (Sandbox Code Playgroud) 鉴于以下内容:
user> (map (fn [x] (map #(* x %) '(1 2))) '(2 3))
((2 4) (3 6))
Run Code Online (Sandbox Code Playgroud)
在clojure中,如何以惯用方式进行更改,以便输出变为:
(2 4 3 6)
Run Code Online (Sandbox Code Playgroud)
我使用列表来说明,但任何收集都没问题.
我想删除Data.Map匹配特定条件的所有元素.我们说foobar是这个函数,这是他需要的行为:
foobar :: (a -> Bool) -> Map k a -> Map k a
foobar (>= 20) $ fromList [("john",3),("sasha",8),("mary",33),("philip",20)]
-- the expected result is fromList [("john",3),("sasha",8)]
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复!
我有一个MAP,它可选地是std :: map类型,也可以是unordered_map类型(根据typdef MAP),以及一个向给定键控值添加值的函数:
func1(MAP<string, double> &map, string &key, double &val2add){
try
{
map.at(key) += val2add;
}catch(out_of_range& oor){
map[key] = val2add; // in case map[key] didn't exist before.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,这意味着双重(甚至可能更多)工作而不是简单
func2(MAP<string, double> &map, string &key, double &val2add){
map[key] += val2add; // if map[key] doesn't exist - problem
}
Run Code Online (Sandbox Code Playgroud)
但是上面的代码不起作用,因为据我所知,[]运算符使用定义的键和默认的double值在map中初始化一个新对象.如果我知道默认的double值是0,那么func2仍然可以实现我想要的 - 但我不能依赖它.
那么有没有办法以更好的方式使用[]而不是func1?
当我在特定状态下关闭我的应用程序时,此代码运行:
void GameEndState::exit(){
delete m_pGameObjectManager;
delete m_pSceneManager;
}
Run Code Online (Sandbox Code Playgroud)
运行m_pGameObjectManager的析构函数后,它是:
GameObjectManager::~GameObjectManager(){
std::for_each(gameObjects.begin(),gameObjects.end(),GameObjectDeallocator());
}
//gameObjects is a std::map<sf::String,VisibleGameObject*>
///////////////
struct GameObjectDeallocator{
void operator()(const std::pair<sf::String,VisibleGameObject*>&p) const{
delete p.second;
}
};
Run Code Online (Sandbox Code Playgroud)
它会产生标题的错误.我没有从谷歌上找到任何这个错误的结果.我正在使用SFML 2.0.
VisibleGameObject的析构函数:
VisibleGameObject::~VisibleGameObject(){
m_pSceneManager->removeSprite(name);
}
void SceneManager::removeSprite(sf::String spritename){
std::cout << "removed " << std::string(spritename) << std::endl;
sprites.erase(sprites.find(spritename));
}
//sprites is a std::map<sf::String,sf::Sprite>
Run Code Online (Sandbox Code Playgroud)
提前致谢
我需要编写一个处理a的类,Map<String, String[]>根据它们的数字顺序处理它的键.为了增加对伤害的侮辱,一些键不是有效的整数,它们应该在最后以加入的词典顺序处理.
例如,如果键是:
["10", "2", "100", "duck", "black"]
Run Code Online (Sandbox Code Playgroud)
他们应该按此顺序迭代 -
["2", "10", "100", "black", "duck"]
Run Code Online (Sandbox Code Playgroud)
除了迭代和尝试捕获之外,在Java中最优雅的方法是什么NumberFormatException?显然,我无法控制给定地图的格式.
我遇到了一个问题,我需要重新设计我的数据结构.
现在我按时间顺序有很多信息,并将其保存在Hashmap中,其中key date也是其成员new Info().
hashMap.put(date.toString(), new Info(date, ...))
日期间隔为5分钟
2012-02-15 22:45:00.0
2012-02-15 22:50:00.0
2012-02-15 22:55:00.0
2012-02-15 23:00:00.0
...
2012-02-25 12:10:00.0
2012-02-25 12:15:00.0
到目前为止,通过获取密钥并且速度是恒定时间很容易获得信息
hashMap.get(date.toString())
到目前为止,当我从那里的hashmap获取日期时这么好.但现在信息时间顺序可能存在差距.在下面的例子中有缺失2012-02-15 22:50:00.0所以当搜索那个日期时我会得到NPE.
在那种情况下,我必须找到以前最接近的时间.
2012-02-15 22:45:00.0
2012-02-15 22:55:00.0
2012-02-15 23:00:00.0...
if (hashMap.get(date.toString()) != null) {
// found it
} else {
return previousTime(date.toString())
}
Run Code Online (Sandbox Code Playgroud)
我可以创建一个LinkedHashMap,previousTime可以迭代集合,直到我找到最接近的上一个日期.但最糟糕的情况是O(n)复杂性.是否可以为这种任务提供更好的数据结构,或者只使用LinkedHashMap?的SortedMap喜欢这里?但是最初的put代价很高,需要更多的内存.
第一
我有一个包含绘图功能的类Node.节点包含在地图中,例如:
map<std::string, Node*>
Run Code Online (Sandbox Code Playgroud)
当我使用迭代器绘制地图中的所有节点时,没有任何反应.(gc是我传递给绘图函数的图形上下文)
std::map<std::string, Node*>::const_iterator itr = _Nodes.begin();
while(itr != _Nodes.end())
{
itr->second->setX(100);
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.但是,如果我构造我的迭代器不同,它的工作原理.
std::map<std::string, Node*>::const_iterator end = _Nodes.end();
for(std::map<std::string, Node*>::const_iterator it = _Nodes.begin(); it != end; ++it){
it->second->draw(gc);
it->second->setSize(100);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么一个工作而不是另一个?
第二个问题是什么是存储NodeManager类中的所有节点而不必命名它们的替代方法?只是一个简单的清单?
class Board {
public:
virtual void init() = 0;
virtual void print_board() const = 0;
virtual Board* clone() const = 0;
virtual bool less_than(const Board& b2) const = 0;
inline friend bool operator< (const Board& b1, const Board& b2);
};
inline bool operator< (const Board& b1, const Board& b2){
std::cout<<"TEST1"<<std::endl;
return b1.less_than(b2);
}
Run Code Online (Sandbox Code Playgroud)
当我使用mymap [board] = evaluate插入时,Test1根本没有被打印; 地图是map<Board*, int>.
我有结构存储有关ARP数据包的信息,我需要保存ARP请求并一起回复数据包.我想使用std :: map为此,键和映射值是ARP结构,我将使用find运算符来计算带有请求的回复.
我的问题是如何说map :: find只比较struct中的一些成员.
我想要描述的例子
struct arp_packet : public packet_info
{
u_short type; // 0x0001 request
// 0x0002 reply
struct ipv4_address ip_sender;
struct ipv4_address ip_target;
};
Run Code Online (Sandbox Code Playgroud)
我会像这样在地图中保存所有请求
std::map<arp_packet*, arp_packet*>
Run Code Online (Sandbox Code Playgroud)
首先映射的值为NULL,但是当回复数据包到来时,我将使用find方法将其与请求匹配.
那么我应该如何完成地图将arp_packet*作为关键字,并在发现它将采用另一个arp_packet*并使用ip_sender和ip_target匹配它?