• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

nietypowy podział projektu na pliki

VPS Starter Arubacloud
0 głosów
348 wizyt
pytanie zadane 16 stycznia 2017 w C i C++ przez BeSSeSSt Obywatel (1,190 p.)
Właśnie tworzę kolejną grę (SFML) , w której trzeba będzie zebrać klucz na jednej mapie, by otworzyło się kolejne okno z inną minigierką. Pomysł według mnie fajny, ale przejdzmy do problemu. Otóż plik "main.cpp" ma 400 linii kodu, więc kolejne kilkaset bardzo utrudniło by sprawę. Więc zastanawiam się, czy da się podzielić projekt, żeby w każdym pliku była inna gierka. Z tego co wiem to tak nie można, bo instrukcje wykonywane z góry w dół są tylko w main.cpp, a nie można mieć ich kilku w projekcie. A użycie #ifndef, #define i #endif nie działa w ten sposób. Więc proszę o wyjaśnienie jak to uporządkować. Z góry dzięki za odpowiedzi.
komentarz 16 stycznia 2017 przez niezalogowany
Radzę ci czytać swoje wypowiedzi przed ich wrzuceniem, bo czyta się je strasznie ciężko.

Jeżeli dobrze rozumiem to chcesz napisać grę składającą się z serią minigierek tzn jakiś ludzik chodzi po mapie i uruchamia kolejne minigry. Nie widzę powodu dla którego miałbyś otwierać każdą minigrę w osobnym oknie, skoro ma to być jedna integralna gra? Nie lepiej jest ci narysować minigrę w tym samym oknie?
komentarz 16 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)
Tak, chodzi mi o to (nieważne czy w jednym oknie czy kilku, mniejsza z tym). Jak podzielić ten kod?

2 odpowiedzi

+1 głos
odpowiedź 16 stycznia 2017 przez niezalogowany
wybrane 16 stycznia 2017 przez BeSSeSSt
 
Najlepsza

Żeby było zgodnie z konwencją CPP należałoby całość podzielić na klasy, każda klasa to osoby plik (zgodnie z konwecją): .hpp i .cpp

Możesz to zrobić np tak:

  1. GameMaster - klasa rysująca okno, handle'ująca eventy, ...
  2. Klasy pośrednie, mogące np dziedziczyć po wspólnym interfejsie IMinigame, MinigameTocToc, MinGameXXX (XXX - nazwa minigry), ...

Całość by wyglądała jakoś tak:

/* main.cpp */
#include "GameMaster.hpp"

int main()
{
  GameMaster gm;
  gm.run();
}
/* GameMaster.hpp */
#pragma once

#include "IMinigame.hpp"
#include "MinigameTicTacToe.hpp"

class GameMaster {
  IMinigame* _selected_minigame;
};

/* GameMaster.cpp */
#include "GameMaster.hpp"

...

void GameMaster::run()
{
  sf::RenderWindow window(...);
  is_end = false;
  while(!is_end)
  {
    handle_events();
    update(delta_time);
    draw();
  }
}
/* IMinigame.hpp */
class IMinigame {
public:
  int Play();

  ...
};

Bazując na IMinigame możesz też stworzyć menu, które też będzie minigrą ;) Każda minigra ma swoje zasady do wygrania, ...

To tak w skrócie, bez pisania właściwego kodu

komentarz 16 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)
Ten kod jest dla mnie średnio zrozumiały, jutro na świeży umysł spróbuje zrozumieć. Dzięki za odpowiedz.
komentarz 16 stycznia 2017 przez niezalogowany
Po prostu pytaj jakby co tutaj lub na PW, przydałoby się jeszcze opisać ideę
0 głosów
odpowiedź 16 stycznia 2017 przez Pajdas Mądrala (5,930 p.)

kolejną grę

Podeślesz kod do poprzednich

Do rzeczy.
Możesz stworzyć klasę w której będzie metoda startGame();

Taką funkcję możesz traktować jak nowy main();
Jeżeli Gra 'wewnętrzna' nie będzie musiała odbierać informacji w czasie rzeczywistym od gry 'zewnętrznej' to wykonanie tego będzie jeszcze łatwiejsze.

Otóż plik "main.cpp" ma 400 linii kodu, więc kolejne kilkaset bardzo utrudniło by sprawę. Więc zastanawiam się, czy da się podzielić projekt, żeby w każdym pliku była inna gierka.

Plik main.cpp z taką ilością linii kodu to chyba trochę przesada jak na taki projekt, nawet w dużych projektach stara się utrzymać niewielką liczbę linii w każdym z plików, bo chodzi o to aby różne klasy "wymieniały" się informacjami i wynikami obliczeń.
Zamiast zastanawiać czy tak się da to możesz stworzyć nowy, uproszczony program konsolowy i sprawdzić, a nie pytać się na forum.

Jak sobie wyobrażasz działanie olbrzymich gier bez dzielenia programu na małe gry.
Tak naprawdę ty tylko zamieniłeś słowo podprogramy na gry, bo czym różni się 'gra' w której porusza się postacią i sprawdza kolizje od podprogramu obsługi menu w którym powiększa się obiekt kiedy najedziemy na niego myszką. Jeszcze lepszym przykładem jest możliwość przeglądania 'internetu' w GTA V.

P.S.Czy ja wiem czy ten podział na pliki jest taki "nietypowy" jak to jest napisane w temacie :)

komentarz 16 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)
To znaczy; poprzednich gier nie ma, no chyba że się wezmie pod uwagę mapę, po której chodzi nasz bohater i zbiera klucze, jeśli to by ci pomogło to:

jest zmienna typu bool "have_ key" (= false), która jeśli zwraca prawdę, rysujemy klucz.
komentarz 16 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)
poprawka: jeśli zwraca fałsz, rysujemy klucz, jeśli zwraca prawde, nie rysujemy. Mój błąd.
komentarz 16 stycznia 2017 przez Pajdas Mądrala (5,930 p.)
Nie musisz pisać "poprawka" bo swoje komentarze można edytować, a poza tym jak mówisz o czymś to dawaj komentarz do czego się odnosisz, bo teraz nie mam pojęcia o co ci chodzi
komentarz 16 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)

Podeślesz kod do poprzednich

  pisząc: kolejną grę (zacytowałeś to) miałem na myśli, że gra "następna po poprzedniej" (prostymi słowy) na razie nie mam żadnej gotowej mini gry.

komentarz 16 stycznia 2017 przez Pajdas Mądrala (5,930 p.)

zacytowałem "kolejną grę",bo oznacza to, że pisałeś jakieś gry przed tą nad którą aktualnie pracujesz.

  • Gra 1.
  • Gra 2.
  • Gra n.
  • Gra nad którą pracujesz (kolejna)

Podobne pytania

0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 21 kwietnia 2017 w C i C++ przez ReapeRPL Nowicjusz (150 p.)
+1 głos
1 odpowiedź 353 wizyt
pytanie zadane 23 stycznia 2017 w C i C++ przez BeSSeSSt Obywatel (1,190 p.)
0 głosów
0 odpowiedzi 164 wizyt
pytanie zadane 11 stycznia 2023 w C i C++ przez narusia Nowicjusz (120 p.)

92,416 zapytań

141,222 odpowiedzi

318,985 komentarzy

61,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...