рд▓реЗрдЦрди рд╕реА ++ рдЧреЗрдореНрд╕, рднрд╛рдЧ 2/3 - рд░рд╛рдЬреНрдп-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рд▓реЗрдЦрди рд╕реА ++ рдЧреЗрдореНрд╕, рднрд╛рдЧ 1/3 - рдПрдХ рдорд┐рдиреА-рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд┐рдЦрдирд╛
рд╣рдо рд╕реА ++, рднрд╛рдЧ 3/3 - рд╢реИрд▓реА рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХреНрд╕ рдореЗрдВ рдЧреЗрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдирдорд╕реНрдХрд╛рд░, рд╣рдмрд╣рд╛рд░!

рдкрд╣рд▓рд╛ рдкрд╛рда рдкрдврд╝рдиреЗ рдкрд░ рдмрдзрд╛рдИ! рд╡рд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИред рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдБ рдХрд┐ рдХрдо рдХреЛрдб рд╣реЛрдЧрд╛, рдФрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо :)

рдЗрд╕ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?




рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЦреЗрд▓ рд╣реЛрдВрдЧреЗ :)




2.1ред рд░рд╛рдЬреНрдпреЛрдВ


рдЕрдм рдпрд╣ рд╕рдордЭрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЦреЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЦреЗрд▓ рд╣реИ рдЬрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЗрдиреВ, рд╕реНрддрд░ рдФрд░ рдЕрдиреНрдп "рд░рд╛рдЬреНрдп" рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рдХреЛрдб:
void Update() { switch(state) { case State::MENU: // 100  case State::SETTINGS: // 200  case State::LEVEL1: //   } } 

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднрдпрдВрдХрд░ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдХреИрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд░реНрдЧ рд╕реЗ рдЕрдкрдирд╛ рд╡рдВрд╢рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди, рдФрд░ рдЦреЗрд▓ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

рд╕реНрдХреНрд░реАрди рдмрдирд╛рдПрдБ
 #ifndef SCREEN_H #define SCREEN_H #include "Project.h" #include "Game.h" class Game; class Screen { protected: Game* game; public: void SetController(Game* game); virtual void Start(); virtual void Update(); virtual void Destroy(); }; #endif 

рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЧреЗрдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд╣рд╛рдБ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдорд┐рд▓рддреЗ рд╣реИрдВред
рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдп:


Screen.cpp
 #include "Screen.h" void Screen::SetController(Game* game) { this->game = game; } void Screen::Start() { } void Screen::Update() { } void Screen::Destroy() { } 


Game.h рдФрд░ Game.cpp рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛
 #ifndef _GAME_H_ #define _GAME_H_ #include "Project.h" #include "Graphics.h" class Graphics; #include "Input.h" class Input; #include "Screen.h" class Screen; class Game { private: bool run; Graphics* graphics; Input* input; Screen* screen; public: Game(); int Execute(Screen* startscreen, int width, int height); Graphics* GetGraphics(); Input* GetInput(); Screen* GetScreen(); void SetScreen(Screen* screen); void Exit(); }; #endif 

рд╕реНрдХреНрд░реАрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЧреЗрдо рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХреНрд╕рдХреНрдпреВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ main.cpp рд╕реЗ рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░реАрди рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

Game.cpp
 #include "Game.h" Game::Game() { run = true; } int Game::Execute(Screen* startscreen, int width, int height) { graphics = new Graphics(width,height); input = new Input(); screen = startscreen; screen->SetController(this); this->screen->Start(); while(run) { input->Update(); screen->Update(); } screen->Destroy(); delete graphics; delete input; delete screen; SDL_Quit(); return 0; } Graphics* Game::GetGraphics() { return graphics; } Input* Game::GetInput() { return input; } Screen* Game::GetScreen() { return screen; } void Game::SetScreen(Screen* screen) { this->screen->Destroy(); delete this->screen; this->screen = screen; this->screen->SetController(this); this->screen->Start(); } void Game::Exit() { run = false; } 

Execute рдкрджреНрдзрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ - рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИ
рд╕реЗрдЯрд╕реНрдХреНрд░реАрди рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдкреБрд░рд╛рдиреЗ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЧреЗрдЯрд╕реНрдХреНрд░реАрди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрддрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рд▓рдЧрднрдЧ рдмреЗрдХрд╛рд░ рд╣реИ
 SetScreen(GetScreen()); 

рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдмреЗрд╡рдХреВрдлреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдкрдиреЗ рд▓рд┐рдП рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВ :)

2.2ред рд╕рдВрдХрд▓рди! рд╕рдВрдХрд▓рди!


рдереЛрдбрд╝рд╛ рдЦреЗрд▓рддреЗ рд╣реИрдВ?
Main.cpp рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓реЗрдВ:
 #include "Project.h" class MyScreen : public Screen { public: void Start() { MessageBox(0,"Hello, HabraHabr!","Message",MB_OK); } }; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Game game; return game.Execute(new MyScreen(),500,350); } 

рд╡рд╣ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдорд╛рдирдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЪреМрдХрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдЧрд╛ рдХрд┐ рдЦрд┐рдбрд╝рдХреА рд▓рд╛рд▓ X рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХрд╛ рд╢реАрд░реНрд╖рдХ рднреА рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ - рдХрд╛рдо рд▓реЛ:
 #include "Project.h" class MyScreen : public Screen { private: Input* input; public: void Start() { input = game->GetInput(); SDL_WM_SetCaption("Hello, HabraHabr!",0); MessageBox(0,"Hello, HabraHabr!","Message",MB_OK); } void Update() { if(input->IsKeyDown('w') || input->IsExit()) game->Exit(); } }; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Game game; return game.Execute(new MyScreen(),500,350); } 

рд╣рдо рдХрд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдЗрдП рдХреБрдЫ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ?

 #include "Project.h" class MyScreen : public Screen { private: Input* input; Graphics* graphics; Image* test; public: void Start() { input = game->GetInput(); graphics = game->GetGraphics(); SDL_WM_SetCaption("Hello, HabraHabr!",0); test = graphics->NewImage("habr.bmp"); } void Update() { if(input->IsExit()) game->Exit(); graphics->DrawImage(test,0,0); graphics->Flip(); } }; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Game game; return game.Execute(new MyScreen(),300,225); } 


рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░ рд╣реИ, рддреБрд░рдВрдд рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рд░ рдЪрдХреНрд░ рдХреЛ рдЪрд┐рддреНрд░ рдмрдирд╛рдирд╛ рд╡реНрдпрд░реНрде рд╣реИ рдпрджрд┐ рд╡реЗ рдЕрдкрдирд╛ рд╕реНрдерд╛рди рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рд▓рд╛рдЗрдиреЗрдВ
  graphics->DrawImage(test,0,0); graphics->Flip(); 

рдЕрджреНрдпрддрди () рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдЕрдВрдд рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ ()

2.3ред рдкрд░рд┐рдгрд╛рдо


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдП рдереЗ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рдерд╛ :)
рдлрд┐рд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рддреАрд╕рд░реЗ рдкрд╛рда рдХреА рдУрд░ рдмрдврд╝реЗрдВ

рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреАрдПрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рд╣рдм рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╢реБрдн рд╣реИрдВ, рддреЛ рдИрдореЗрд▓ рдкрд░ рд▓рд┐рдЦреЗрдВ

Source: https://habr.com/ru/post/In197280/


All Articles