Autor Wątek: [Java] Symulacja układów logicznych z edytorem  (Przeczytany 1702 razy)

Offline exigo

  • Użytkownik

# Listopad 06, 2013, 16:45:31
Witajcie,

Przyszedł mi do głowy pewien design który jest na tyle skomplikowany od strony programistycznej (z mojego punktu widzenia) że jestem skłonny poprosić was o pomoc/nakierowanie w tejże sprawie.

Najpierw przedstawię zrzuty z paru wybranych aplikacji przed pisaniem czegokolwiek:
http://www.yurdigital.com/system/files/userimages/Filter%20Forge%20Tutorial%20%20editor.jpg
http://1-media-cdn.foolz.us/ffuuka/board/gd/image/1367/77/1367778280291.png
http://mortennobel.files.wordpress.com/2010/06/tree_cube_material.png
https://dl.dropboxusercontent.com/u/99714/Unity%20Projects/Shader%20Forge/Screenshots/progress_day10_smallfixes_append.jpg
Edytory powinny być większości znane. :)

Przedstawię design:
Zabawa polegała by na konstruowaniu pojazdów (z ograniczeniem budżetu) z udostępnionych urządzeń. Jednocześnie na ekranie zawarty byłby edytor (podobny jak na zawartych screenach) w którym konstruowalibyśmy logikę. Konstruowanie tejże logiki (bo to właśnie ta część jest najtrudniejsza) opierałoby się na łączeniu node-ów (tak przeważnie są one nazywane) kablami po przez sockety/gniazda. Sygnały były by w stylu "prąd płynie, prąd nie płynie", true/false.
Node-y były by predefiniowane. Elementarne logiczne, takie jak AND, OR, INVERT, mniej-bardziej wymyślne, specjalne-wejściowe - które były by najzwyklejszym inputem z klawiatury oraz specjalne-wyjściowe - właściwe urządzenia typu broń (sygnał jest to strzela) czy bardziej przekombinowane po kilka wejść.
Gracz by tworzył swój pojazd, oraz "programował" logikę do tych urządzeń. Potem by grał tym pojazdem tłukąc się z jakimiś np. botami. To jest ten design w skrócie.

Jak predefiniować logikę wewnętrzną node-a - to, w jaki sposób przerabia informację i decyduje kiedy wysłać sygnał? Myślałem o jakimś interpreterze (lua?) w którym wpisywalibyśmy sobie nasze mini-programiki. Dobre bo generyczne, ale wydaje mi się trochę przekombinowane (np. operacja "AND" w lua, dafuq?).

Jak obliczać wszystko w jednym przebiegu (tzn. w jednej klatce)? Myślałem o obliczania symulacji tyle razy, ile jest komórek (node), tylko to byłaby lekka chamówa.

I tak ogólnie: jakieś wskazówki w związku z tym?
Będę wdzięczy za wszelką pomoc jak się za to zabrać.

P.S.: Albo w ogóle z innej beczki: może są jakieś gotowe biblioteki do tego typu rzeczy? Przejrzałem gita w tej sprawie.






« Ostatnia zmiana: Listopad 06, 2013, 16:48:39 wysłana przez exigo »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Listopad 06, 2013, 17:19:26
O, Exigo - tez robisz walki robotow? :D Najs.
Co do node'ow: kazdy node ma swoj filtr, bramke, jak kolwiek nazwac cos, co sprawdza, czy sygnal inputu przejdzie, czy nie. jak ja cos takiego robilem, to puszczalem sygnal jako int, ktory zawieral maski bitowe z danymi sygnalu i filtrowane XORem w nodzie i jesli przeszlo, to dispatchowal dalej sygnal do dzieci. voila.

Offline ShadowDancer

  • Redaktor

# Listopad 06, 2013, 17:45:27
Polecam core wars.

Offline Xender

  • Użytkownik

  • +1
# Listopad 06, 2013, 18:09:57
Wygląda jak symulator logiczny. Z implementacją zacznie się robić śmiesznie dopiero, jak pozwolisz na sprzężenie zwrotne (tzn. żeby wejście node'a było zależne (podłączone bezpośrednio lub przez inne node'y) do jego wejścia). Bez niego nie zrobisz niczego, co ma stan (przerzutniki itp.).

Na samych elementarnych operacjach logicznych tego nie widzę - byłoby mnóstwo roboty, żeby cokolwiek zrobić. Potrzebne jest coś bardziej wysokopoziomowe...

Jeśli martwisz się o wydajność, może po prostu zrób implementację backendu bloków nie w języku skryptowym, a jako wejścia do LLVM i przepuść przez JIT.