c++ ООП двумерные массивы

83
29 ноября 2021, 04:20

я начал писать свою игру на c++ sfml, но в самом начале столкнулся с одной ОЧЕНЬ не понятной проблемой(

суть проблемы, что мне надо в одном классе создать двумерный массив, а в остальных получать их, да да да знаю это очень глупый вопрос, но я вообще ничего не понимаю!

вот какая структура проекта:

   Program.cpp
   Settings.hpp
   lib/
      Tile.hpp
      Chunk.hpp
      World.hpp
      Game.hpp
      Content.hpp
    image/
      Lerraria_Tile.png

Компилирую вот так:

g++ Program.cpp -o Lerraria -pthread -lsfml-window -lsfml-system -lsfml-audio -lsfml-graphics

ОС Lunux Ubuntu

Program.cpp:

#include <SFML/Graphics.hpp>
#include <iostream>
#include "Settings.hpp"
#include "lib/Tile.hpp"
#include "lib/Chunk.hpp"
#include "lib/World.hpp"
#include "lib/Content.hpp"
using namespace sf;
int main()
{
    RenderWindow window(VideoMode(Window_Width,Window_Height),Window_Title);
    Event ev;
    Content::load();
    Chunk chunk;
    while(window.isOpen())
    {
        while(window.pollEvent(ev)) if(ev.type==Event::Closed) window.close(); //close window
        window.clear(Color::Cyan);
        window.draw(chunk);
        window.display();
    }
}

lib/Content.hpp:

/*
*   load texture in this file
*/
#ifndef Content_T
#define Content_T
#include <SFML/Graphics.hpp>
#include "../Settings.hpp"

Texture texture_blocks;
Sprite sprite_block_GROUND;
class Content
{
public:
    static void load()
    {
        texture_blocks.setSmooth(true);
        texture_blocks.loadFromFile("image/Lerraria_Tile.png");
        sprite_block_GROUND.setTexture(texture_blocks);
        sprite_block_GROUND.setTextureRect(IntRect(1,1,24,24));
    }
};

#endif //Content_T

Settings.hpp:

/*
*   Settings file
*/
#ifndef Settings_T
#define Settings_T
#include <SFML/Graphics.hpp>
using namespace sf;
int Window_Width = 800;
int Window_Height = 400;
String Window_Title = "Lerraria";
int GroundLVL = 10;
#endif

lib/Tile.hpp:

/*
*   this file is class tile's
*/
#ifndef Tile_T
#define Tile_T
#include <SFML/Graphics.hpp>
#include "../Settings.hpp"
#include "Content.hpp"
using namespace sf;

class Tile : public Drawable, public Transformable
{
public:
    enum texture_state   //all states tile
    {
        NONE,
        GROUND,
        GRASS
    };
    Tile(float X, float Y)
    {
        typeTile = GROUND; //default
    }
    virtual void draw(RenderTarget& target, RenderStates states) const
    {
        states.transform*=getTransform();
        target.draw(sprite_block_GROUND, states);
    }
protected:
    float Tile_CoordX;
    float Tile_CoordY;
    int typeTile;
};
#endif

lib/Chunk.hpp:

/*
*   this file is class chunk's
*/
#ifndef Chunk_T
#define Chunk_T
#include <SFML/Graphics.hpp>
#include <deque>
#include <iostream>
#include "../Settings.hpp"
#include "Tile.hpp"
using namespace sf;

const short int CHUNK_SIZE = 16;
class Chunk : public Drawable, public Transformable
{
public:
    Chunk()
    {
        IT_tile[0][0] = Tile(0,0);
    }
    virtual void draw(RenderTarget& target, RenderStates states) const
    {
        states.transform*=getTransform();
        target.draw(IT_tile[0][0], states);
    }
protected:
    std::deque<std::deque<Tile>> tiles;             //в данном коде я использовал ДЭК, но можно показать как это делается и в двумерными массивами
    std::deque<std::deque<Tile>>::iterator IT_tile;
};
#endif

World и Game сейчас не важны, покажите просто на примере чанков и тайлов.

READ ALSO
Как получить доступ из вложенного объекта к главному

Как получить доступ из вложенного объекта к главному

У меня есть главное окно приложения BankSystem

98
cpp:template - Как решить проблему &quot; cannot convert from &#39;char* const&#39; to int &quot;?

cpp:template - Как решить проблему " cannot convert from 'char* const' to int "?

Разбираюсь с template-ми на c++Написал небольшую функцию которая принимает, какой-то объект MyJSON* _value и в реализации сделал разбор в зависимости...

140
Compile time C++ checksum

Compile time C++ checksum

Есть структура:

222