标签: map

Java - 使用Graphics2D矩形在面板中创建2D平铺贴图?

我试图在一个非常基本的程序中模拟一场战斗,但由于这是我第一次使用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)

java map tile graphics2d

0
推荐指数
1
解决办法
2万
查看次数

如何将地图输出放入单个集合中

鉴于以下内容:

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)

我使用列表来说明,但任何收集都没问题.

clojure map

0
推荐指数
1
解决办法
90
查看次数

如何从Haskell Map中删除所有符合其值而不是键的条件?

我想删除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)

谢谢你的回复!

haskell map

0
推荐指数
2
解决办法
685
查看次数

加速std :: map和boost:unordered_map []操作

我有一个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?

c++ stl map

0
推荐指数
1
解决办法
408
查看次数

map/set erase iterator超出范围

当我在特定状态下关闭我的应用程序时,此代码运行:

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)

提前致谢

c++ map sfml

0
推荐指数
1
解决办法
1839
查看次数

根据数字值对Map的String键进行排序

我需要编写一个处理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?显然,我无法控制给定地图的格式.

java sorting key map

0
推荐指数
1
解决办法
3822
查看次数

在(哈希)映射中搜索上一个最接近的日期/字符串

我遇到了一个问题,我需要重新设计我的数据结构.

现在我按时间顺序有很多信息,并将其保存在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代价很高,需要更多的内存.

java map data-structures

0
推荐指数
1
解决办法
460
查看次数

迭代C++映射的差异

第一

我有一个包含绘图功能的类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类中的所有节点而不必命名它们的替代方法?只是一个简单的清单?

c++ iterator map

0
推荐指数
1
解决办法
200
查看次数

当我插入地图c ++时,为什么不会调用少于运算符?

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>.

c++ overloading map operators

0
推荐指数
1
解决办法
170
查看次数

C++ stl :: map find with structs

我有结构存储有关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匹配它?

c++ map

0
推荐指数
1
解决办法
598
查看次数

标签 统计

map ×10

c++ ×5

java ×3

clojure ×1

data-structures ×1

graphics2d ×1

haskell ×1

iterator ×1

key ×1

operators ×1

overloading ×1

sfml ×1

sorting ×1

stl ×1

tile ×1