Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MVP #4

Open
wants to merge 122 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
af8c761
Добавил gitignore
kek-flip May 1, 2023
07d3a4d
Добавил библиотеки eventpp и SFML
kek-flip May 1, 2023
d7e6231
Добавил игровой объект GameObject, интерфейс действия IAction и его р…
kek-flip May 1, 2023
34fd06a
Добавил интерфейс IObjectRepository репозитория объектов
kek-flip May 1, 2023
4c8ba39
Добавил интерфейс IObjectFactory фабрики объектов
kek-flip May 1, 2023
6356d5a
Добавил класс игрока Player
kek-flip May 1, 2023
95b5eb1
Добавил интефейс IGameModel игровой модели и его реализацию
kek-flip May 1, 2023
34fac73
First build
tomsuliana May 3, 2023
7372d95
Добавил главное окно
kek-flip May 4, 2023
04815ef
Pictures and timer added
tomsuliana May 4, 2023
e94bf17
Refactored
tomsuliana May 4, 2023
e5fabfb
Добавил интерфейс ICommandManager менеджера команд и его реализацию
kek-flip May 1, 2023
f6f1c49
Добавлены связи между графикой и логикой
wizardOfOz21 May 4, 2023
5e3a2df
Переименовал класс Event в GameEvent, добавил имя параметра в методе …
kek-flip May 4, 2023
c3f60fc
Добавил значения в EventType
kek-flip May 4, 2023
c03d8c4
Добавил значения в ModelType
kek-flip May 4, 2023
c9cc8a0
Привел каркас в актуальное состояние
kek-flip May 4, 2023
7083e77
Merge branch 'dev' into view
tomsuliana May 4, 2023
70d6f79
Merge pull request #6 from cpp-park-vk-education/view
kek-flip May 4, 2023
a52776e
Добавил сервер
HallowAz May 4, 2023
76153f1
Удалил ненужный файл
kek-flip May 4, 2023
35ae6a1
Поправил cmake
kek-flip May 4, 2023
9617ea5
Добавлено игровое поле и расстановка юнитов
wizardOfOz21 May 12, 2023
f0024b4
Добавил действия объекта
kek-flip May 13, 2023
746e558
Добавил репозиторий объектов
kek-flip May 13, 2023
17a7658
Добавил игровое поле
kek-flip May 13, 2023
eadd97f
Добавил фабрики объектов
kek-flip May 13, 2023
5dd484f
Реализовал игровое поле
kek-flip May 13, 2023
7dac75a
Добавил новый метод в репозиторий объектов
kek-flip May 13, 2023
cc0ed2c
Изменил передвижение объектов
kek-flip May 13, 2023
d12423e
Пофиксил передвижение объектов
kek-flip May 13, 2023
651ce99
Восстановлены связи между модулями
wizardOfOz21 May 13, 2023
e23e38c
Merge remote-tracking branch 'origin/implementation' into implementation
wizardOfOz21 May 13, 2023
efc5c33
Merge pull request #7 from cpp-park-vk-education/implementation
wizardOfOz21 May 14, 2023
4627f18
Добавлена возможность перемещения юнитов
wizardOfOz21 May 14, 2023
8caf687
Merge pull request #8 from cpp-park-vk-education/move
wizardOfOz21 May 14, 2023
54e4940
Добавлено взаимодействие с сетью
wizardOfOz21 May 15, 2023
651a1bd
Merge pull request #9 from cpp-park-vk-education/network
wizardOfOz21 May 15, 2023
3f4e91a
Классы разделены на отдельные файлы
HallowAz May 15, 2023
3e304e6
Рефакторинг создания и передвижения юнитов
kek-flip May 15, 2023
b451bfd
Merge pull request #10 from cpp-park-vk-education/create_and_move_ref…
kek-flip May 15, 2023
1067e64
Доработаны состояния и система команд
wizardOfOz21 May 15, 2023
cb9af8d
Merge remote-tracking branch 'origin/dev' into network
wizardOfOz21 May 15, 2023
88a66be
Merge pull request #11 from cpp-park-vk-education/network
wizardOfOz21 May 15, 2023
7a10cb5
Реализван класс Connection
HallowAz May 15, 2023
9be46bf
Реализован класс Match
HallowAz May 15, 2023
19d310b
Добавлен сервер
HallowAz May 16, 2023
471af9c
Добавлен клиент
HallowAz May 16, 2023
0d4c1cb
Заменил команды на автомат событий
kek-flip May 16, 2023
973d2bf
Merge pull request #12 from cpp-park-vk-education/serv
kek-flip May 16, 2023
572d7af
Merge pull request #13 from cpp-park-vk-education/gamestate
kek-flip May 16, 2023
d9cef8e
Qt and sfml done first
tomsuliana May 16, 2023
fd3c104
Добавил создание и распознавание команд сервера
kek-flip May 16, 2023
84aa2a8
Merge pull request #15 from cpp-park-vk-education/commands_to_server
kek-flip May 16, 2023
785d505
Соединение работает, но проблема с приёмом сервером ответа остаётся
HallowAz May 16, 2023
227ec6d
Добавил сервер
kek-flip May 16, 2023
fa55525
Merge branch 'qtandsfml' of github.com:cpp-park-vk-education/2023_1_T…
kek-flip May 16, 2023
509a705
Поправил названия hpp файлов
kek-flip May 16, 2023
d787066
Sfml into qt now
tomsuliana May 16, 2023
188581a
Resize event upgaraded
tomsuliana May 22, 2023
8468202
New try to connect qt and sfml
tomsuliana May 23, 2023
1242272
Some modifications
tomsuliana May 23, 2023
35da38e
Merge branch 'qtandsfml' of github.com:cpp-park-vk-education/2023_1_T…
tomsuliana May 23, 2023
7df09b0
Удалил ненужное
kek-flip May 23, 2023
ac91ec0
Подсветка выбранной клетки, отзеркаливание юнитов врага
wizardOfOz21 May 23, 2023
6917825
Merge pull request #17 from cpp-park-vk-education/choose&mirror
kek-flip May 23, 2023
d151dfe
Поправил форматирование
kek-flip May 23, 2023
fb0dc38
Добавил возможность юнитам атаковать друг друга
kek-flip May 23, 2023
6cf8247
Добавил УБИЙСТВО юнитов
kek-flip May 23, 2023
4a9da11
Добавил ограничение на создание юнитов и кол-во действий за ход
kek-flip May 23, 2023
a0cc0d9
Добавил парсер команды атаки и пофиксил команду передвижения
kek-flip May 24, 2023
497c6be
Изменил сигнатуру HandleInput
kek-flip May 24, 2023
628f3b0
Добавил получение у поля всех объектов
kek-flip May 24, 2023
7399756
Добавил завершение игры по убийству всех юнитов одной из сторон
kek-flip May 24, 2023
e20bcea
Поправил форматирование
kek-flip May 24, 2023
86b4ff0
Перенес техтуры в static
kek-flip May 24, 2023
6b83cd1
Merge pull request #18 from cpp-park-vk-education/gamelogic
kek-flip May 24, 2023
ab071b6
no while
tomsuliana May 24, 2023
00af885
Merge branch 'dev' into qtandsfml
tomsuliana May 24, 2023
363a35e
Изменил текстуры юнита
kek-flip May 24, 2023
bc3afba
Merge branch 'dev' of github.com:cpp-park-vk-education/2023_1_Team96 …
kek-flip May 24, 2023
05a663e
Переименовал вызов метода
kek-flip May 24, 2023
46d6391
Qt events work now
tomsuliana May 24, 2023
c48291e
Сделал анимацию атаки
kek-flip May 24, 2023
c938b8e
All qt signals done
tomsuliana May 24, 2023
cef7514
Merge pull request #19 from cpp-park-vk-education/graphic_refactoring
kek-flip May 24, 2023
80bd1f8
Merge branch 'dev' into qtandsfml
kek-flip May 24, 2023
8f4573c
ура я это запустил и почистил
kek-flip May 25, 2023
3752055
--amend
kek-flip May 25, 2023
3852efb
Рефакторинг:
kek-flip May 25, 2023
489c217
Добавлена модель короля.
wizardOfOz21 May 25, 2023
72c2ba0
Some changes
tomsuliana May 25, 2023
93f0055
Merge branch 'qtandsfml' of github.com:cpp-park-vk-education/2023_1_T…
tomsuliana May 25, 2023
30585ae
Bug with transparent window fixed
tomsuliana May 25, 2023
3661d94
Сервер получает сообщения, асинхронно и от двух клиентов. Осталось на…
HallowAz May 25, 2023
d6df63a
Merge pull request #20 from cpp-park-vk-education/models_update
kek-flip May 25, 2023
ab0f649
Merge branch 'dev' into qtandsfml
kek-flip May 25, 2023
0104cdc
Поправил слияние
kek-flip May 25, 2023
f02055b
Merge branch 'qtandsfml' of github.com:cpp-park-vk-education/2023_1_T…
kek-flip May 25, 2023
e6c630d
Удалил ненужное
kek-flip May 25, 2023
d96d986
Resizing is available
tomsuliana May 25, 2023
54998b0
Полностью рабочая сетевая часть
HallowAz May 25, 2023
ab2584a
Merge branch 'dev' of https://github.com/cpp-park-vk-education/2023_1…
HallowAz May 25, 2023
98c2302
Убрали таймер
kek-flip May 25, 2023
2a02622
Merge branch 'dev' into qtandsfml
kek-flip May 25, 2023
fe1df32
Merge pull request #14 from cpp-park-vk-education/qtandsfml
kek-flip May 25, 2023
7cdbcfd
Добавил скобки к if
kek-flip May 31, 2023
060b815
Пофиксил анимацию атаки и убрал возможность бить себя по голове
kek-flip May 31, 2023
bc47bf5
Game window resized
tomsuliana May 31, 2023
66e5860
Merge pull request #21 from cpp-park-vk-education/qtandsfml
kek-flip May 31, 2023
e9a8eee
Добавил возможность создания короля
kek-flip May 31, 2023
2d1d74d
Добавил завершение игры по смерти короля
kek-flip May 31, 2023
83886d2
Переработана карта, добавлены анимации
wizardOfOz21 Jun 1, 2023
b4e44de
Merge pull request #22 from cpp-park-vk-education/king
wizardOfOz21 Jun 2, 2023
ba99946
Merge remote-tracking branch 'origin/dev' into animation
wizardOfOz21 Jun 2, 2023
ad63505
Исправлена ошибка слияния
wizardOfOz21 Jun 2, 2023
b46cdb8
Merge pull request #24 from cpp-park-vk-education/animation
wizardOfOz21 Jun 2, 2023
b0d4726
Рефакторинг классов, исправление нейминга
wizardOfOz21 Jun 2, 2023
a230464
Merge pull request #25 from cpp-park-vk-education/graphics_refactoring
wizardOfOz21 Jun 2, 2023
15d5dd9
Добавлен файл конфигурации
wizardOfOz21 Jun 2, 2023
863a223
Добавлен парсинг конфигурации из файла
wizardOfOz21 Jun 2, 2023
6f52afc
Merge pull request #27 from cpp-park-vk-education/json_config
wizardOfOz21 Jun 2, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.vscode
build
44 changes: 44 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
cmake_minimum_required(VERSION 3.0.0)
project(Tactics VERSION 1.0.1)

find_package(SFML 2.5 COMPONENTS window graphics REQUIRED)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(nlohmann_json 3.2.0 REQUIRED)

set(QT_HEADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/qt)
qt5_wrap_cpp(Tactics_H ${QT_HEADER_DIR}/chooseopponentform.h ${QT_HEADER_DIR}/entranceform.h ${QT_HEADER_DIR}/gameform.h ${QT_HEADER_DIR}/mainwindow.h)

set(QT_UI_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ui)
set(QT_UI_COMPILED ${CMAKE_CURRENT_BINARY_DIR}/ui)
execute_process(COMMAND mkdir ${QT_UI_COMPILED})

list(APPEND QT_WINDOWS "entranceform" "chooseopponentform" "gameform" "mainwindow")

foreach(QT_UI IN LISTS QT_WINDOWS)
set(QT_UI_OUT_FILE "${QT_UI_COMPILED}/ui_${QT_UI}.h")
set(QT_UIS_FULL_NAME_WITH_EXT "${QT_UI_DIR}/${QT_UI}.ui")
execute_process(COMMAND uic -o ${QT_UI_OUT_FILE} ${QT_UIS_FULL_NAME_WITH_EXT})
endforeach()

file(GLOB GRAPHICS_SRC "src/graphics/*.cpp")
file(GLOB GRAPHICS_H "include/graphics/*.hpp")
add_library(graphics ${GRAPHICS_SRC} ${GRAPHICS_H})
target_link_libraries(graphics nlohmann_json::nlohmann_json)
target_link_libraries(graphics sfml-window sfml-graphics)
target_include_directories(graphics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

file(GLOB MODEL "src/model/*.cpp")
file(GLOB INPUT "src/input/*.cpp")
file(GLOB SERVER "src/server/*.cpp")
file(GLOB QT "src/qt/*.cpp")
set(Tactics_SRC main.cpp ${QT} ${MODEL} ${INPUT} #${SERVER}
)

add_executable(tactics ${Tactics_SRC} ${Tactics_H})

target_include_directories(tactics PUBLIC include/qt)
target_include_directories(tactics PUBLIC ${QT_UI_COMPILED})
target_link_libraries(tactics Qt5::Widgets)
target_link_libraries(tactics graphics)

include_directories(include)
15 changes: 15 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"static_dir" : "../static/",
"units": "unit.png",
"map": "map.png",
"font": "arkhip.ttf",
"animation_time": 0.1,
"info_bar": [ 24, 47, 74, 90],
"basic_cell": [ 26, 219],
"border_cell": [ 26, 298],
"broken_cell": [ 106, 219],
"my_warrior": [ 1, 1],
"enemy_warrior": [ 1, 65],
"my_king": [ 193, 1],
"enemy_king": [ 193, 65]
}
55 changes: 55 additions & 0 deletions include/graphics/graphics.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#pragma once

#include <SFML/Graphics.hpp>
#include <memory>
#include <vector>

using std::vector;

class IModel;
class IFieldModel;

enum class ModelType { Warrior, King, Trees, Camp };

class IObjectModel;
class Stats;

class IMonitor {
public:
virtual ~IMonitor() {}

virtual void Prepare() = 0;
virtual void Draw() = 0;
virtual bool IsEnd() = 0;
virtual std::unique_ptr<IObjectModel> GetModel(ModelType type, bool is_mine) = 0;
virtual std::unique_ptr<IFieldModel> GetFieldModel(
const std::vector<std::string> &map) = 0;
};

class IModel {
public:
virtual ~IModel() {}

virtual void Draw() = 0;
};

class IFieldModel : public IModel {
public:
virtual ~IFieldModel() {}

virtual void SetCurrent(sf::Vector2u pos) = 0;
virtual void ResetCurrent() = 0;
virtual void SetStat(Stats stat) = 0;
virtual void ShowStat() = 0;
virtual void HideStat() = 0;
};

class IObjectModel : public IModel {
public:
virtual ~IObjectModel() {}

virtual void Move(sf::Vector2u pos) = 0;
virtual void Attack(sf::Vector2u pos) = 0;
virtual void GetDamage(int damage, sf::Vector2u pos_) = 0;
virtual void Blow() = 0;
};
185 changes: 185 additions & 0 deletions include/graphics/sfml_monitor.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
#pragma once

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <sstream>
#include <string>

#include "graphics/graphics.hpp"
#include "utility/common.h"

using sf::Vector2u;
using std::string;

enum class Animation {
Hit,
Hurt,
Run,
None,
Blow,
Open,
};

struct Stats {
int hp, armor, attack;
};

class SFMLModel : public IModel {
protected:
sf::Sprite sprite;
Animation anim;
double anim_frame_;

sf::RenderWindow &target_;

public:
virtual ~SFMLModel() {}

SFMLModel(sf::RenderWindow &target) : target_(target) {}
void SetOrigin(float x, float y) { sprite.setOrigin(x, y); }
void SetTextRect(const sf::IntRect& rect) { sprite.setTextureRect(rect); }
void Scale(float x, float y) { sprite.scale(x,y); }
};

class InfoBar : SFMLModel {
private:
sf::Text text;

public:
InfoBar(sf::RenderWindow &window, const sf::Font &font,
const sf::Texture &texture, sf::IntRect tRect);

void Draw() override;
void UpdateInfo(Stats stats);
void setPos(sf::Vector2f pos) {
sprite.setPosition(pos);
text.setPosition(pos.x + 20, pos.y + 50);
}
void open() {
anim_frame_ = 0;
anim = Animation::Open;
}
void close() { anim_frame_ = 0; }
};

class SFMLFieldModel : public IFieldModel, public SFMLModel {
private:
std::vector<string> tile_map_;
sf::Vector2u size_;
sf::Vector2u current_;
InfoBar ibar;
int is_info;

public:
SFMLFieldModel(sf::RenderWindow &window, const sf::Texture &texture,
const sf::Font &font, const std::vector<std::string> &map);

void Draw() override;

void SetCurrent(sf::Vector2u pos) override { current_ = pos; };
void ResetCurrent() override {
current_.x = -1;
current_.y = -1;
}
void SetStat(Stats stat);
void ShowStat() {
if (is_info) ibar.Draw();
};
void HideStat() {
is_info = false;
ibar.close();
};
};


class SFMLUnitModel : public SFMLModel, public IObjectModel {
protected:
sf::Vector2i mov_vec;
sf::Vector2u pos;
double mov_anim_speed;
bool is_mine_;
bool right;

void setRight() {
if (right) return;
sprite.scale(-1, 1);
sprite.setOrigin(0, 0);
right = true;
}
void setLeft() {
if (!right) return;
sprite.scale(-1, 1);
sprite.setOrigin(CELL_TEXTURE_SIZE, 0);
right = false;
}

public:
SFMLUnitModel(sf::RenderWindow &window, const sf::Texture &texture,
bool is_mine);

virtual void Draw() = 0;
void Move(sf::Vector2u to) override;
void Attack(sf::Vector2u pos_) override;
void GetDamage(int damage, sf::Vector2u pos_) override;
void Blow() { anim = Animation::Blow; };
};

class SFMLWarriorModel : public SFMLUnitModel {
public:
SFMLWarriorModel(sf::RenderWindow &window, const sf::Texture &texture,
bool is_mine);

void Draw() override;
};

class SFMLKingModel : public SFMLUnitModel {
public:
SFMLKingModel(sf::RenderWindow &window, const sf::Texture &texture,
bool is_mine);

void Draw() override;
};


class SFMLEnvModel : public SFMLModel, public IObjectModel {
public:
SFMLEnvModel(sf::RenderWindow &window, const sf::Texture &texture);

void Move(sf::Vector2u pos) override {
sprite.setPosition(pos.x * CELL_SIZE, pos.y * CELL_SIZE);
}
void Draw() override { target_.draw(sprite); };
void Attack(sf::Vector2u pos_) override {};
void GetDamage(int damage, sf::Vector2u pos) override{};
void Blow() override {};
};

class SFMLWindow : public IMonitor {
private:
sf::RenderWindow m_window_;
sf::Vector2u m_windowSize_;
std::string m_windowTitle_;
sf::Texture tile_set_;
sf::Texture units_set_;
sf::Font font_;

void Destroy() { m_window_.close(); }

public:
SFMLWindow(const string &l_title, const sf::Vector2u &l_size,
sf::WindowHandle win_descriptor, const std::string& config_path);
bool loadResources(const std::string& config_path);

void Prepare() { m_window_.clear(); }
void Draw() { m_window_.display(); }
bool IsEnd() { return !m_window_.isOpen(); }

sf::Vector2u GetWindowSize() { return m_windowSize_; }
std::unique_ptr<IObjectModel> GetModel(ModelType type, bool is_mine);
std::unique_ptr<IFieldModel> GetFieldModel(
const std::vector<std::string> &map);
sf::RenderWindow &GetWindow() { return m_window_; }

~SFMLWindow() { Destroy(); }
};
23 changes: 23 additions & 0 deletions include/input/input_handler.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once

#include <unordered_map>
#include <SFML/Graphics.hpp>
#include "utility/common.h"

enum EventType { CHOSE, UNCHOSE, CREATE_OBJECT, MOVE_CMD, ATTACK_CMD, FINISH, INFO };

struct GameEvent
{
EventType type;

union
{
sf::Vector2u cords;
UnitType unit_type;
char* cmds;
};
};

struct InputHandler {
virtual GameEvent Handle() = 0;
};
17 changes: 17 additions & 0 deletions include/input/sfml_input.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <SFML/Window.hpp>

#include "input/input_handler.hpp"

class SFMLWindowHandler : public InputHandler {
private:
sf::Window &window;

public:
SFMLWindowHandler(sf::Window &window) : window(window) {}

GameEvent Handle();

~SFMLWindowHandler() {}
};
Loading