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

Traffic Simulator SFML

Object Storage Arubacloud
+3 głosów
533 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez jeżozwierz Początkujący (490 p.)
Siema, jestem w trakcie pisania takiej namiastki symulacji ruchu ulicznego w C++, korzystam przy tym z SFML'a.

Program ma po prostu przedstawiać losowy ruch paru samochodzików po mapie, ale z zachowaniem podstawowych zasad (reguła prawej ręki, znak stopu), mapa ma mieć minimum 3 skrzyżowania.

Widok z góry, proste 2D.

O ile sama implementacja w  SFMLu jest dosyć łatwa do ogarnięcia na tym poziomie, to już z pomysłem na program mam spore problemy, nie wiem jak to ugryźć. Dotychczas planowałem to robić wg takiego schematu:

-klasa Auto i dziedziczace po niej konkretne autka (wystarcza 2-3), o atrybutach takich jak textura(i sprite) predkosc, aktualny status(jazda albo postoj), aktualny kierunek jazdy (dla uproszczenia tylko UP/DOWN/LEFT/RIGHT), funkcje to respawn(losowy, byle w dozwolonym miejscu), jazda, stop..

-klasa Kafelek, pojedynczy kafelek mapy, dziedziczaca po niej Ulica i Trawa (max uproszczenie, to na zaliczenie)

-klasa Mapa zawierajaca tablice Kafelków, rysujaca je na ekranie

-klasa symulacja odpalajaca odpowiednie funkcje w okienku w zaleznosci od statusu symulacji (menu,symulacja,exit)..

 

dotychczas stworzylem funkcje ktora rysuje mape z pliku txt (0 to trawa, 1 to ulica), ale to dosyć prymitywne..

problem w tym, że nadal nie potrafię napisać niczego konkretnego..mam taki pomysl:

 

-każdemu obiektowi nadać ID (osobno trawa, osobno ulica, osobno Audi, Viper, znak stopu itp itd)

-zrobić tablicę 3 wymiarową [x][y][2], gdzie [x][y] to wymiary mapy (w kafelkach tak dopasowanych, żeby wypełniały idealnie całe okno) i płaszczyznę [x][y][0] wypełniać ID obiektow nieruchomych (sama mapa + ew. znaki) a płaszczyzne [x][y][1] wypełniać ID elementów ruchomych (w sumie tylko aut)   (3 wymiary dlatego, że samochód jest rysowany na ulicy, a nie zamiast niej)

- cały mechanizm symulacji odgrywałby się w tej 3-wymiarowej tablicy w ktorej zamiast jazdy samochodów przeskakiwały by inty (ID) po komórkach wg. określonych zasad, następnie postarałbym się napisać funkcję, która przy pomocy SFML przenosi to, co dzieje się w tablicy, na okienko symulacji

Co o tym wszystkim myślicie? Poradzicie coś?

Weźcie pod uwagę, że na razie nie zależy mi na żadnej optymalizacji - chodzi mi tylko o działający program.

Z góry dzięki

3 odpowiedzi

0 głosów
odpowiedź 19 czerwca 2015 przez Pinio Gaduła (3,520 p.)
fajny pomysł na zmarnowaie weekendu, sam posłucham kogos doświadczonego jak to ugryźc ponieważ sam obecnie pisze troszke inny symulator:)
0 głosów
odpowiedź 19 czerwca 2015 przez Pan Kulomb Pasjonat (18,630 p.)

Określenie dokładnych zależności w programie to dość duży problem. Radzę ci nie robić wszystkiego od razu tylko przechodzić do kolejnych drobnych zagadnień dopiero po stestowaniu kodu. Powinno to zapobiec modyfikowaniu kodu, który jest już wykorzystywany, więc również wielu błędom. Powinieneś najpierw pisać testy, a dopiero potem implementować to w ciałach funkcji/metod. Pozdrawiam ;)

0 głosów
odpowiedź 19 czerwca 2015 przez jeżozwierz Początkujący (490 p.)

No dobra, z tym pomysłem to nieważne, już mam ogarnięte +- jak to ma wyglądać. Teraz mam taki konkretny problem:

Stworzylem klase Road reprezentujaca pojedyncze kafelki mapy i klase Map reprezentujaca cala mape, a w niej tablice Mapa[25][20] obiektów typu Road (trawa/ulica) i nie działa mi ta oto część metody rysującej mapę na ekranie:

 

     [...]   

okienko.clear();
        
       for (int y = 0; y < 20; y++)
        {
            for (int x = 0; x < 25; x++)
            {
                okienko.draw(Mapa[x][y].sprite);
            }
        }
        okienko.display();
    

    },  wiem to dlatego, że wpisywane ręcznie wszystko działa, jak należy, np

okienko.draw(Mapa[0][0].sprite;  ......   okienko.draw(Mapa[24][19].sprite;   , ale przecież nie będę pisał 25x20=500 razy prawie tej samej linijki. 

Wiecie może dlaczego ta pętla nie działa? Okienko jest całe białe, nic się nie dzieje

 

Podobne pytania

+5 głosów
2 odpowiedzi 539 wizyt
pytanie zadane 29 kwietnia 2017 w Nasze projekty przez criss Mędrzec (172,590 p.)
+5 głosów
0 odpowiedzi 313 wizyt
pytanie zadane 19 sierpnia 2022 w Nasze projekty przez wojtek_suchy Mądrala (6,880 p.)
+1 głos
1 odpowiedź 332 wizyt
pytanie zadane 6 czerwca 2022 w Python przez NEFOS Początkujący (320 p.)

92,661 zapytań

141,557 odpowiedzi

320,000 komentarzy

62,028 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

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!

...