所以我的Box类中有一个对象向量,我想将每个框映射到屏幕上的一组坐标,这样当你点击某个区域时,就会从向量中访问一个特定的框。我使用sfml 2.1来创建将用作可点击区域的矩形。以下是我到目前为止的情况:
Board.h(一个装有盒子的游戏板):
#pragma once
#include "stdafx.h"
#include <vector>
#include <map>
#include "Box.h"
#include "SFML/Graphics.hpp"
#include "ImageManager.h"
class Board{
public:
Board(ImageManager &im);
~Board();
void FillVectors();
void FillMap();
std::vector<Box> &GetBoxes();
sf::Sprite GetGameBoard();
private:
sf::Sprite gameBoard;
ImageManager &imgr;
std::vector<sf::RectangleShape> rectangles;
std::vector<Box> boxes;
std::map<sf::Vector2f, std::vector<Box>> boxMap;
};
在Board.cpp中:
void Board::FillVectors(){
for(int i = 0; i < 9; i++){
sf::RectangleShape rectangle(sf::Vector2f(80,80));
Box box;
rectangles.push_back(rectangle);
boxes.push_back(box);
}
for(int i = 1; i < boxes.size() + 1; i++){
std::cout << boxes[i].GetName();
rectangles[i].setPosition((i * 20) + 10, (i * 20) + 10);
}
}
void Board::FillMap(){
for(std::map<sf::Vector2f, std::vector<Box>>::const_iterator it = boxMap.begin(); it != boxMap.end(); ++it){
for(int i = 0; i < boxes.size(); i++){
boxMap[rectangles[i].getOrigin()];
}
}
}
没有任何错误,但我真的迷失了从这里做什么。 std :: map甚至是将屏幕上的区域链接到对象的正确方法吗?
答案 0 :(得分:0)
您正在寻找关联数组或地图。由于地图将包含指向框的链接,因此无法将其放置在框类中。
执行此操作的一种方法是为坐标创建结构并使用指向框的指针:
struct Coordinate; // Forward declaration, you provide the details.
typedef std::map<Coordinate, Box *> Box_Container;
这是制作指向记录的索引表的常用技术。
注意:更简单的设计使用方框编号作为std::vector
的索引。
编辑1:结构示例
struct Coordinate
{
int x; // or horizontal
int y; // or vertical
};
答案 1 :(得分:0)
对于tic tac toe,只需声明一个矩阵3x3(2d数组),它将对应于您的游戏区域。所有细胞大小相等。每个单元格可以包含某种类型的对象。要查找与坐标(x,y)对应的单元格编号:i = x/cell_size; j = y/cell_size
;其中/是整数除法,i - 行数,j - 列