"Tryby" pracy programu

0

Witam, od pewnego czasu uczę się programować w C++, dotychczas wszystkie programy jakie pisałem były "sztywne" (Nie do końca wiem jak określić mój problem...), mianowicie pisałem pętle główną programu odpowiadającą za jedyny główny tryb programu, i tyle wystarczało. Jednak gdy przyszła pora napisać program posiadający kilka takich "trybów" pracy (Np: Gra posiadająca 3 tryby: Menu, tryb jednoosobowy i tryb wieloosobowy. Albo komunikator sieciowy mogący pracować jako klient lub serwer) nie wiem za bardzo jak się za to zabrać ani czego szukać w internecie. Jedyne co mi przychodzi do głowy to dla każdego "trybu" napisać odpowiednią pętle umieszczoną w odpowiedniej funkcji, z chwilą wywołania danej funkcji program zostanie "zamknięty" w pętli i będzie wykonywać tylko operacje odpowiedzialne za dany tryb np. Renderowanie i obsługiwanie menu, nie wiem ile naprawdę jest wart ten pomysł lecz wydaje mi się, że niezbyt wiele gdyż w przypadku większej ilości trybów będziemy oddalać się od funkcji głównej programu. Czy są jakieś inne metody organizacji pracy programu? Czego polecacie mi szukać/przeczytać aby lepiej zrozumieć ten problem i znaleźć rozwiązanie?

1

http://fasadin.4programmers.net/2016/02/1-programowanie-obiektowe.html?view=sidebar
https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

zacznij od tego

#include <iostream> // dolaczamy bibloteke która definiuje różne klasy i obiekty. Np obiekt cout.
using namespace std;

class Application 
{
public:
    Application()
    {
        cout << "Hello World!"; // używanie obiektu cout (od console out) i wypisanie tekstu "Hello world"
    }
};

int main()
{
    Application App; // utworzenie obiektu App.
}

i niech aplikacja ma jakiegos manadzera ktory bedzie zmienial bedzie zarzadzal stanami (ale zadnej logiki nie dawaj do niego oprocz tego. Co ma sie stac na podstawie zmiany statusu niech bedzie w App czy w innej klasie)

0

Programowanie obiektowe znam już od pewnego czasu, więc z dwóch pierwszych linków nie dowiedziałem się niczego nowego. Jeżeli chodzi natomiast o MVC to trochę poczytałem na kilku stronach i niezbyt wiele z tego rozumiem. Kontroler przyjmuje informacje np: z klawiatury i myszki, a nastepnie je przekazuje do modelu? (W jaki dokładnie sposób? np: Dodając nowy element do listy w modelu, a następnie przy wywołaniu funkcji "odświeżającej" model lista zostanie odpowiednio obsłużona?) Model mam rozumieć, zajmuje się tylko i wyłącznie logiką? np: Zmiana pozycji pionka, odjęcie hp gracza itp itd. Natomiast Widok zajmuje się tylko rysowaniem w oknie. Nie rozumiem zbytnio stosunków pomiędzy tymi 3 elementami, Jeśli np: Jest gdzieś button, to kontroler pobiera informacje o kliknięciu myszką, którą przekazuje do modelu, który sprawdza czy koordynaty kursora podczas kliknięcia odpowiadały koordynatom kursora, i jeśli tak było to zmienia status guzika na wciśnięty, lub wysyła informacje o wciśnięciu do widoku, który rysuje nacisnięty przycisk? Czy może do kontrolera jest wysyłania informacja o tym, że gdzieś znajduje się guzik i podczas kliknięcia kontroler sam sprawdza, czy guzik został naciśnięty, i jeśli tak się stało to wysyła informacje do widoku a potem do modelu? Szukałem jakiejś implementacji tego w c++ aby lepiej zrozumieć ten problem jednak z mizernym skutkiem...

A jeśli chodzi o powyższy przykład to klasa Application ma posiadać odpowiednie metody np: Menu, Rozgrywka, a następnie według wspomnianego menadżera umieszczonego w konstruktorze wywoływać odpowiednie metody, czyż nie?

0
GrhuGhu napisał(a):

Kontroler przyjmuje informacje np: z klawiatury i myszki, a nastepnie je przekazuje do modelu? (W jaki dokładnie sposób? np: Dodając nowy element do listy w modelu, a następnie przy wywołaniu funkcji "odświeżającej" model lista zostanie odpowiednio obsłużona?)

Kontroler nie wie, że w modelu jest jakaś lista. On jedynie przesyła do modelu informacje, że użytkownik chce np. dodać nowy obiekt o jakiejś nazwie, a model już interpretuje to polecenie z kontrolera.

Model mam rozumieć, zajmuje się tylko i wyłącznie logiką? np: Zmiana pozycji pionka, odjęcie hp gracza itp itd.

Tak.

Jeśli np: Jest gdzieś button, to kontroler pobiera informacje o kliknięciu myszką, którą przekazuje do modelu, który sprawdza czy koordynaty kursora podczas kliknięcia odpowiadały koordynatom kursora, i jeśli tak było to zmienia status guzika na wciśnięty, lub wysyła informacje o wciśnięciu do widoku, który rysuje nacisnięty przycisk?

Model nie wie nic o żadnych myszkach, przyciskach ani klawiaturach. Informacje o akcjach użytkownika dostaje od kontrolera.

Czy może do kontrolera jest wysyłania informacja o tym, że gdzieś znajduje się guzik i podczas kliknięcia kontroler sam sprawdza, czy guzik został naciśnięty, i jeśli tak się stało to wysyła informacje do widoku a potem do modelu?

Biblioteki GUI chyba same potrafią narysować wciśnięty guzik. :) Zadaniem programisty jest po prostu w kontrolerze zamienić wciśnięcie przycisku na informacje zrozumiałe dla modelu.

Szukałem jakiejś implementacji tego w c++ aby lepiej zrozumieć ten problem jednak z mizernym skutkiem...

Możliwe, że w C++ jeszcze nie wynaleziono MVC.

1 użytkowników online, w tym zalogowanych: 0, gości: 1