Commit 67b26851 authored by Сулимов Игорь Андреевич's avatar Сулимов Игорь Андреевич
Browse files

Initial commit

parents
No related merge requests found
Showing with 200 additions and 0 deletions
+200 -0
.gitignore 0 → 100644
.vs/
out/
.idea/
cmake-build-debug/
cmake-build-release/
.DS_Store
build/
\ No newline at end of file
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 17)
project(pac-man)
include(FetchContent)
set(BUILD_SHARED_LIBS FALSE)
FetchContent_Declare(sfml GIT_REPOSITORY https://github.com/SFML/SFML.git GIT_TAG 2.6.1)
FetchContent_MakeAvailable(sfml)
add_executable(pac-man source/main.cpp)
target_link_libraries(pac-man PUBLIC sfml-window sfml-graphics sfml-system)
\ No newline at end of file
#include Application.h
int Application::run() {
try {
while (m_ptr_state_current->do_step())
apply_deffer_state_change();
}
catch (std::exception& ex) {
std::cout << ex.what() << '\n';
return 1;
}
catch (...) {
std::cout << "Unknown exception\n";
return 2;
}
return 0;
}
#pragma once
class Application: public IStateManager{
public:
int run();
private:
void set_next_stage(State* ptr_state);
void apply_differ_state_change();
private:
IState m_ptr_state_next;
IState m_ptr_state_current;
};
\ No newline at end of file
//
// Created by Игорь on 07.03.2025.
//
#pragma once
class IState {
public:
IState(IStateManger& state manager) {}
bool do_step();
protected:
IStateManager m_state_manager;
};
#pragma once
class IStateManager {
public:
void set_next_state(IState* state);
};
\ No newline at end of file
#include "SFML/Graphics.hpp"
//int main() {
// sf::RenderWindow window(sf::VideoMode(500, 500), "SFML works!"); // создаем окно 500 на 500 пикселей
// window.setKeyRepeatEnabled(false); // оключил дублирование событий, чтобы цвет менялся лишь при нажании (2-ой пункт)
// window.setFramerateLimit(25); // ограничиваем количество кадров в секунду 25-ью
// sf::CircleShape circle{ 250 }; // создал кружок радиусом 250
// // 4-ый пункт
// //задаем точку origin в правом верхнем углу круга
// sf::Vector2f pos_circle = circle.getOrigin();
// pos_circle.x += 2 * circle.getRadius();
// circle.setOrigin(pos_circle);
// // задаем изначальную позицию круга в правом верхнем углу экрана
// circle.setPosition(window.getSize().x, 0);
// //#include <iostream>
// //#include "SFML/Graphics.hpp"
// //
// //int main() {
// // sf::RenderWindow window(sf::VideoMode(500, 500), "SFML works!"); // создаем окно 500 на 500 пикселей
// // window.setKeyRepeatEnabled(false); // оключил дублирование событий, чтобы цвет менялся лишь при нажании (2-ой пункт)
// // window.setFramerateLimit(25); // ограничиваем количество кадров в секунду 25-ью
// // sf::CircleShape circle{ 250 }; // создал кружок радиусом 250
// // // 4-ый пункт
// // //задаем точку origin в правом верхнем углу круга
// // sf::Vector2f pos_circle = circle.getOrigin();
// // pos_circle.x += 2 * circle.getRadius();
// // circle.setOrigin(pos_circle);
// // // задаем изначальную позицию круга в правом верхнем углу экрана
// // circle.setPosition(window.getSize().x, 0);
// // //
// // sf::Event event;
// // while (window.isOpen()) { // запускаем цикл, который каждый кадр будет обрабатывать наше окно
// // while (window.pollEvent(event)) { // обрабатываю все накопившиеся за кадр события
// // if (event.type == sf::Event::Closed) // обрабатываю закрытие окна
// // window.close();
// // if (event.type == sf::Event::KeyPressed) { // обрабатываю нажатие клавиши (2-ой пукнт)
// // switch (event.key.code) {
// // case sf::Keyboard::Space: // если нажат пробел - меняю цвет
// // circle.setFillColor(sf::Color{sf::Uint8(rand() % 256u), sf::Uint8(rand() % 256u), sf::Uint8(rand() % 256u)}); // закрашиваем круг случайным цветом из всей палитры
// // break;
// // }
// // }
// // // 5-ый пункт
// // if (event.type == sf::Event::Resized) { // если изменился размер окна
// // sf::View view = window.getView(); // возьмём текущий View
// // view.setSize(event.size.width, event.size.height); // изменим его
// // window.setView(view); // зададим изменённый View окну
// // }
// // //
// // }
// //
// // if (sf::Keyboard::isKeyPressed(sf::Keyboard::Enter)) // real time input (отслеживаем длительное нажатие) (3-ий пункт)
// // circle.scale({ 0.99, 0.99 }); // уменьшаем круг на 1%
// //
// // // 6-ой пункт
// // // Рисуем в основном виде
// // sf::View view = window.getView();
// // view.setViewport({ 0.0, 0.0, 1.0, 1.0 }); // отобразить на всём окне
// // window.setView(view);
// // window.draw(circle);
// //
// // // Рисуем в левой нижней четверти
// // view.setViewport({ 0., 0.8, 0.2, 0.2 }); // отобразить снизу слева мини
// // window.setView(view);
// // window.draw(circle);
// //
// // window.display();
// // view.setViewport({ 0.0, 0.0, 1.0, 1.0 }); // отобразить на всём окне
// // window.setView(view);
// // window.draw(circle);
// //
// // // Рисуем в левой нижней четверти
// // view.setViewport({ 0., 0.8, 0.2, 0.2 }); // отобразить снизу слева мини
// // window.setView(view);
// // window.draw(circle);
// // }
// //}
// sf::Event event;
// while (window.isOpen()) { // запускаем цикл, который каждый кадр будет обрабатывать наше окно
// while (window.pollEvent(event)) { // обрабатываю все накопившиеся за кадр события
// if (event.type == sf::Event::Closed) // обрабатываю закрытие окна
// window.close();
// if (event.type == sf::Event::KeyPressed) { // обрабатываю нажатие клавиши (2-ой пукнт)
// switch (event.key.code) {
// case sf::Keyboard::Space: // если нажат пробел - меняю цвет
// circle.setFillColor(sf::Color{sf::Uint8(rand() % 256u), sf::Uint8(rand() % 256u), sf::Uint8(rand() % 256u)}); // закрашиваем круг случайным цветом из всей палитры
// break;
// }
// }
// // 5-ый пункт
// if (event.type == sf::Event::Resized) { // если изменился размер окна
// sf::View view = window.getView(); // возьмём текущий View
// view.setSize(event.size.width, event.size.height); // изменим его
// window.setView(view); // зададим изменённый View окну
// }
// //
// }
//
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::Enter)) // real time input (отслеживаем длительное нажатие) (3-ий пункт)
// circle.scale({ 0.99, 0.99 }); // уменьшаем круг на 1%
//
// // 6-ой пункт
// // Рисуем в основном виде
// sf::View view = window.getView();
// view.setViewport({ 0.0, 0.0, 1.0, 1.0 }); // отобразить на всём окне
// window.setView(view);
// window.draw(circle);
//
// // Рисуем в левой нижней четверти
// view.setViewport({ 0., 0.8, 0.2, 0.2 }); // отобразить снизу слева мини
// window.setView(view);
// window.draw(circle);
//
// window.display();
// view.setViewport({ 0.0, 0.0, 1.0, 1.0 }); // отобразить на всём окне
// window.setView(view);
// window.draw(circle);
//
// // Рисуем в левой нижней четверти
// view.setViewport({ 0., 0.8, 0.2, 0.2 }); // отобразить снизу слева мини
// window.setView(view);
// window.draw(circle);
// }
//}
int main() {
Application app;
return app.run();
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment