Axator Temat założony przez niniejszego użytkownika |
Programowalny serwer/ tworzenie własnego języka » 2016-11-05 14:10:09 Witam, pracuję od dawna nad własnym projektem prostej gry online. Moim celem jest stworzenie gry jak najbardziej elastycznej, możliwej do zaprogramowania od strony użytkownika pod każdym kątem i w niemalże dowolny sposób. Do tego celu tworzę edytor serwera. I teraz chciałbym, aby w tym edytorze było pole tekstowe, które będzie wypełniała osoba która zdecyduje się uruchomić taki serwer. W tym polu będzie programowała we własnym języku, który mam nadzieję stworzyć. I tu pojawia się pytanie w jaki sposób to napisać, aby to co pojawi się w tym polu tekstowym było interpretowane przez serwer w różny sposób w zależności od tego co tam się znajdzie. Moim pomysłem jest sprawdzanie łańcuchów znaków w poszukiwaniu wzorców składniowych i słów-klucz. Na przykład, gdy użytkownik wpisze "set", to serwer powinien się spodziewać że dalej będzie tworzył nową zmienną lub zmieniał wartość poprzednio utworzonej. Gdy pojawi się słowo-klucz "call" to dalej ma spodziewać się wywołania funkcji.
I pojawia się kolejne, z pozoru banalne pytanie: Jak stworzyć zmienną?
Tutaj też mam pomysł, gdy pojawi się na przykład "set int zmienna;", to zaalokuje blok pamięci o rozmiarze sizeof(int), wskaźnik na ten blok pamięci będzie przechowywał w <int*>vectorze i dodatkowo nazwę zmiennej będzie przechowywał w <string>vectorze pod tym samym indeksem co int. Nie wiem czy takie rozwiązanie jest najlepsze, proszę o rady.
I jeszcze jedno proste pytanie: Jak stworzyć funkcję? Gdy na przykład użytkownik wpisze taki tekst:
function Funkcja ( int a, int b) returns int { return a+b; }
i w innym miejscu napisze
set int c = Funkcja(a, b);
to żeby program wiedział, że w tym miejscu musi przenieść swoje wykonywanie to tego kawałka, zrobić co tam trzeba i potem wrócić z powrotem. Na to też niby mam pomysł, ale wolę najpierw przeczytać jakąś radę.
I to wszystko w cpp :D
Offtopic: Przy nauce Unreal Engine spotkałem się z taką oto linijką kodu: "GetWorldTimeManager().SetTime(parametry);" Powoduje ona ustawienie timera który co wyznaczony czas uruchamia jakąś funkcję, te informacje podaje się w argumentach funkcji/metody SetTime(). Nie rozumiem jednak tego zapisu, tak jakby GetWorldTimeManager() był obiektem na rzecz którego jest wywoływana metoda SetTime. Mógłby mi ktoś wytłumaczyć ten zapis, w jaki sposób go przeczytać i co on oznacza?
Pozdrawiam. |
|
Gibas11 |
» 2016-11-05 14:35:01 Po co własny język? Użyj JS. A jak koniecznie chcesz to używaj dynamicznego typowania. |
|
pekfos |
» 2016-11-05 15:18:13 Zanim się zabierzesz za tworzenie własnego języka, lepiej poznaj język, w którym zamierzasz to wszystko zrealizować. Tych pytań by nie było, gdybyś tylko miał wiedzę, potrzebną do realizacji takiego zadania. banalne pytanie: Jak stworzyć zmienną? |
jeszcze jedno proste pytanie: Jak stworzyć funkcję? |
"I na koniec takie trywialne pytanie: jak zrobić wszystko o czym właśnie napisałem?". Wydajesz się być znacznie bardziej obeznany z językami skryptowymi, niż z C++.. |
|
Axator Temat założony przez niniejszego użytkownika |
» 2016-11-05 16:23:12 W C++ programuję od dwóch lat, wydaje mi się, że znam go całkiem nieźle. Uczę się nowych rzeczy poprzez realizowanie konkretnych zagadnień. To jedno z nich. Brakuje mi weny/pomysłu w jaki sposób to najlepiej wykonać. Miałem nadzieję na pomoc, a nie informację że tego nie umiem... |
|
pekfos |
» 2016-11-05 18:48:28 wydaje mi się, że znam go całkiem nieźle. |
To nic nie znaczy. Możesz sobie programować od N lat i całkiem nieźle znać język - czemu po prostu nie wykorzystasz tej wiedzy? Doświadczenie powinno ci sugerować, jak to wszystko wykonać. Ale oczywiście łatwiej pytać niż myśleć samemu. Jak tu: Na to też niby mam pomysł, ale wolę najpierw przeczytać jakąś radę. |
Najpierw przeczytać radę, a potem co, tak dokładniej..? Jak bardzo byś nie kręcił, w twoim temacie (poza jednym fragmentem) są tylko pomysły i pytania, jak to zrobić. Moim celem jest stworzenie gry jak najbardziej elastycznej, możliwej do zaprogramowania od strony użytkownika pod każdym kątem i w niemalże dowolny sposób. |
Brzmi jak silnik gry, doskonale się składa, chyba jeszcze wczoraj był bardzo podobny temat. Również same pytania 'jak zrobić to i to'. "silnik" kalkulatora ;)Polecam przejrzeć, zanim odpowiesz w przewidywalny sposób. gdy pojawi się na przykład "set int zmienna;", to zaalokuje blok pamięci o rozmiarze sizeof(int), wskaźnik na ten blok pamięci będzie przechowywał w <int*>vectorze i dodatkowo nazwę zmiennej będzie przechowywał w <string>vectorze pod tym samym indeksem co int. Nie wiem czy takie rozwiązanie jest najlepsze |
To jest ten jeden, wyjątkowy fragment, w którym dajesz coś od siebie, więc dostaniesz na to normalną odpowiedź: Przede wszystkim: jaki jest kontekst tego? Chcesz mieć wiele różnych typów zmiennych, jak mniemam? Na N typów zmiennych chcesz użyć N+1 wektorów? To jest jeden z tych momentów, przez które można mocno wątpić w twoją znajomość C++, bo to typowe rozwiązanie stosowane przez początkujących, którzy nie słyszeli jeszcze o strukturach. Nazwa i dane powinny być w jednym kontenerze, a skoro chcesz wyszukiwać po nazwie, tym kontenerem powinna być mapa, a nie wektor. Dostajesz wtedy std::map<Nazwa, Dane>, gdzie dane to struktura/klasa obsługująca różne typy zmiennych. Typowo coś takiego zawiera informację o typie zmiennej oraz jakiś sposób na przechowywanie danych w tych typach. |
|
1aam2am1 |
» 2016-11-05 19:40:02 Na twoim miejscu zaimplementowal bym język lua jest dużo poradników i dozo skryptów też się w nim pisze. Kiedyś robiłem coś podobnego i nawet dobrze wyszło. |
|
« 1 » |