-module(modwinda). -export([pasazer/4,winda/2,start/0]). pasazer(NR,Winda,Pietro_start,Pietro_cel) -> io:format("Pasazer ~w chce jechac z ~w na ~w ~n",[NR,Pietro_start,Pietro_cel]), Winda ! {chce_winde, Pietro_start, Pietro_cel, self()}, receive {mozesz_jechac} -> io:format("Pasazer ~w wsiadl na ~w pietrze i jedzie na ~w ~n",[NR,Pietro_start,Pietro_cel]) end, receive {wysiadaj} -> io:format("Pasazer ~w wysiadl ~n",[NR]) end, timer:sleep(2000), pasazer(NR, Winda, Pietro_cel, Pietro_start) . winda(Pietro,Kierunek) -> receive {chce_winde,Pietro_start,Pietro_cel,Pasazer} when Pietro == Pietro_start -> Pasazer ! {mozesz_jechac}, self() ! {chce_wysiasc,Pietro_cel,Pasazer}, winda(Pietro,Kierunek) ; {chce_wysiasc,Pietro_cel,Pasazer} when Pietro == Pietro_cel -> Pasazer ! {wysiadaj}, winda(Pietro,Kierunek) after 1000 -> io:format("Winda odjezdza z pietra ~w ~n",[Pietro]), if Kierunek == 0 -> if Pietro == 10 -> winda(9,1); true -> winda(Pietro + 1,Kierunek) end; true -> if Pietro == 0 -> winda(1,0); true -> winda(Pietro - 1,Kierunek) end end end . start() -> Win = spawn(modwinda,winda,[0,0]), spawn(modwinda,pasazer,[0,Win,0,6]), spawn(modwinda,pasazer,[1,Win,1,4]), spawn(modwinda,pasazer,[2,Win,1,7]), spawn(modwinda,pasazer,[3,Win,8,1]), spawn(modwinda,pasazer,[4,Win,2,5]), spawn(modwinda,pasazer,[5,Win,1,9]) .