я начал писать свою игру на 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 сейчас не важны, покажите просто на примере чанков и тайлов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Sourcecpp
У меня есть главное окно приложения BankSystem
Разбираюсь с template-ми на c++Написал небольшую функцию которая принимает, какой-то объект MyJSON* _value и в реализации сделал разбор в зависимости...