PROJEKT gry KUP PAN BILET



Podobne dokumenty
WIRTUALNA FIRMA. Instrukcja do gry.

Wyższa Szkoła Bankowa w Poznaniu Wydział Ekonomiczny w Szczecinie Rachunkowość finansowa mgr Bartosz Pilecki

10. Płatności Płatności Definicje

Opis programu Profbi Delegacje 2013 Delegacje Krajowe i Zagraniczne.

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS

Zadanie 1. Bilans spółki GALA SA w Warszawie na dzień 31 grudnia 20XX r. wykazywał następujące składniki aktywów i pasywów:

System automatycznego wysyłania SMSów SaldoSMS

Instrukcja dla użytkowników serwisu internetowego

INSTRUKCJA OBSŁUGI PROGRAMU ROZKŁAD JAZDY

Miesięcznie. Każdorazowo. Każdorazowo. Każdorazowo. Każdorazowo

KS-ZSA. Mechanizm centralnego zarządzania rolami

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

Skrócona instrukcja korzystania z Platformy Zdalnej Edukacji w Gliwickiej Wyższej Szkole Przedsiębiorczości

Instrukcja poruszania się po katalogu on-line

Limit debetowy. Kanał dostępu (sposób wykonania operacji) Opłaty. Konto Inteligo prywatne. Konto Inteligo firmowe. Lp. Operacja Częstotliwość

Jak naprawić swoją historię kredytową

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Instrukcja użytkownika esowk Realizacja wniosku kredytowego Kredyt gotówkowy

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

Opis programu Profbi Delegacje 2011 Delegacje Krajowe.

KS-ZSA. Centralne zarządzanie znacznikami zamawiania towaru (BlackList)

Wystawianie dokumentów Ewa - Fakturowanie i magazyn

Uwaga Niespłacenie zadłużenia przez Klienta powoduje czasowe zablokowanie środków do daty spłaty całości zadłużenia.

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Krok 2: Pierwsze uruchomienie

Instrukcja użytkownika programu TAXI.NET 1.0

Opis modułu windykacyjnego w KOLFK

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Akademia Młodego Ekonomisty Matematyka finansowa dla liderów Albert Tomaszewski Grupy 1-2 Zadanie 1.

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Instrukcja IT Service & Help Desk Ticket System.

Zasady programowania Dokumentacja

Instrukcja użytkownika aplikacji modernizowanego Systemu Informacji Oświatowej

Co nowego w systemie Kancelaris 4.11 STD/4.21 PLUS. Co nowego w systemie Kancelaris 4.12 STD/4.22 PLUS

Instrukcja użytkownika esowk Realizacja wniosku kredytowego przez POS Kredyt gotówkowy

INSTRUKCJA. SIMPLE.HCM Proces obsługi Kartoteki Pracownika, Kartoteki Przełożonego oraz Raportów kadrowo-płacowych

Narysować diagram sekwencji pokazujący rejestrację wypożyczenia przez Jana Kowalskiego książki Potop

Wykład 8: klasy cz. 4

Podstawowa konfiguracja modułu Szkolenia

Instrukcja obsługi aplikacji mobilnej. BiletKom

Zamówienia internetowe instrukcja obsługi

Dobre zmiany w komunikacji miejskiej Published on Kalisz (

Dodawanie operacji dodatkowych w WAPRO Mag.

Kalipso wywiady środowiskowe

Instrukcja użytkownika

System obsługi ubezpieczeń FORT

Dariusz Wardowski Katedra Analizy Nieliniowej. Bankowość i metody statystyczne w biznesie - zadania i przykłady część II

Dziedziczenie. Zadanie 1

Instrukcja obsługi oraz opis funkcji aplikacji Ginger w systemie android

KANCELARYJNY SYSTEM PODATKOWY

SUPLEMENT DO DYPLOMU

Ustalanie dostępu do plików - Windows XP Home/Professional

Opublikowane na stronie: Dokumentacja systemu Prolib M21 (

Skrócony przewodnik GBOX Assist 2.0

w kalendarzu pracownika po wybraniu z menu podręcznego polecenia Dziennik zdarzeń pracownika

Artykuły. Spis treści Artykuły sprzedaży... 2 Artykuły zakupu... 3 Pozycja magazynowa... 5 Grupy artykułów (w pakiecie PRO)... 6

Mechanizm dziedziczenia

Zamówienia elektroniczne w Medicare (przez e@ptekę) Instrukcja obsługi

NOL3. Zarządzanie zleceniami. 1. Transakcyjne funkcjonalności aplikacji NOL3. Biuro Maklerskie Zlecenia

Zamówienia algorytmiczne

Wyliczenie składek ZUS Przedsiębiorcy

Zapisanie się. Roczna opłata. To koszt $12 USD

Instrukcja użytkownika aplikacji modernizowanego Systemu Informacji Oświatowej

Elektroniczny Urząd Podawczy

Opis programu:

Sprawozdanie o stanie firmy

Sterownik SRG-6000P. Instrukcja dla kierowcy

Program. Pielęgniarki ambulatoryjnej. Pielęgniarki rodzinnej. Położnej. Copyright Ericpol Telecom sp. z o.o.

Nowe funkcje w module Środki Trwałe w wersji 2010

KS-ZSA. Mechanizm aktualizacji kartotek lokalnych w aptece na podstawie zmian w kartotece CKT. Data aktualizacji:

ZYSK BRUTTO, KOSZTY I ZYSK NETTO

STP357: Ustawienie profilu alertów (dostawca)

TWORZENIE WŁASNEJ BAZY POKOI

ELEKTRONICZNA KSIĄŻKA ZDARZEŃ

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Instrukcja instalacji programu STATISTICA

Obsługa systemu OGNIVO w aplikacji Kancelaria Komornika

WPROWADZANIE ZLECEŃ POPRZEZ STRONĘ INSTRUKCJA UŻYTKOWNIKA

Operacje. instrukcja obsługi wersja 2.9.2

Zadania semestralne. Programowanie obiektowe sem. II, lato 2014/2015

Instrukcja zgłaszania błędu

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy

Instrukcja obsługi Panelu Sklep

Jest to program stworzony z myślą o nauczycielach, wykładowcach, trenerach i prezenterach.

Instrukcja importu dokumentów z programu Fakt do programu Płatnik

VinCent Administrator

Projekt z przedmiotu Projektowanie systemów teleinformatycznych

Instrukcja obsługi. Helpdesk. Styczeń 2018

Przewodnik użytkownika systemu AgentWorks podwójna kontrola wydanie 11 wersja polska

Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView

SQL (ang. Structured Query Language)

Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro.

Podręcznik użytkownika

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 3

Lista 5 Typy dynamiczne kolejka

Podręcznik GB24 Kredyty, karty płatnicze, zlecenia stałe

Lekcja 5. Funkcje handlemessage() i initialize(), konstruktor i destruktor

Program dla praktyki lekarskiej

Transkrypt:

PROJEKT gry KUP PAN BILET producent: Wytwarzanie Interaktywnego, Niebanalnego Oprogramowania czyli: Grzegorz Guździoł, Tomasz Powałka, Tomasz Pudelewicz, Sławomir Sadziak 12 listopada 2003 1

Spis treści 1 Overview 4 1.1 Świat gry...................................... 4 1.2 Gracze........................................ 4 1.3 Moduły....................................... 4 1.4 Kompilator..................................... 4 1.5 Biblioteki...................................... 4 1.6 Podział obowiązków................................ 4 1.7 Etapy oddawania oprogramowania......................... 5 2 Usecases i ich implementacja 6 3 Hierarchia klas 8 4 AdvertisementAgency 10 5 Bank 10 6 Base 11 7 BuildingCompany 11 8 BuildingCompanyWork 11 9 BuildingGarage 12 10 Building 12 11 BuildingWithWorkers 13 12 BusStop 13 13 Bus 13 14 Charwoman 14 15 City 14 16 Course 15 17 Driver 16 18 Fuel 16 19 GameWorldManager 16 2

20 Garage 18 21 Good 18 22 HQ 18 23 IrregularTimeTable 21 24 Mission 22 25 MobileWorker 22 26 Money 22 27 NonMobileWorker 23 28 Notepad 23 29 Offer 23 30 Rafinery 24 31 RegularTimeTable 24 32 Rapairshop 25 33 Station 25 34 StatisticsAgency 26 35 TicketOffice 26 36 TimeTable 26 37 TravelAgency 26 38 VehicleExchange 27 39 Vehicle 27 40 View 28 41 WorkersExchange 28 42 Worker 29 3

1 Overview 1.1 Świat gry Świat gry jest to wirutualna rzeczywisctość opisana w zasadach gry. Gracz wykorzystuje interfejs wystawiony przez świat gry do wpływania na kształt świata gry. Każdy gracz jest zobowiązany do wystawienia własnego interfejsu, za pomocą którego świat gry może go informować o zdarzeniach w nim zachodzących. 1.2 Gracze Każdy gracz może się komunikować ze światem gry jedynie za pomocą interfejsu. Konsekwencją takiego założenia jest fakt, że wszyscy gracze grają na równych zasadach. Istnieją 2 rodzaje graczy: sterowani przez komputer i sterowani przez człowieka. 1.3 Moduły Projekt przewiduje podział na 3 moduły: GameWorld tworzony przez komputer świat gry. Wszelkie modyfikacje świata gry i zmiany stanów będą się odbywały w tym module. UserInterface dostaje sterowanie od systemu operacyjnego. Wywołuje metody sterujące na klasie GameWorld (opennewgame, closegame,... ). Implementacja interfejsu użytkownika. Moduł komunikuje się ze światem gry tym samym interfejsem co pozostali gracze. ComputerPlayer symulacja graczy komputerowych. 1.4 Kompilator Będziemy używać kompilatora gcc. 1.5 Biblioteki Zamierzamy używanie do grafiki bibliotki ClanLib. Szczególowe informacje na temat tej biblioteki są dostępne na stronie http://www.clanlib.org/. Do odtwarzania dźwięku zostanie najprawdopodobniej użyta biblioteka fmod (http://www.fmod.org/). 1.6 Podział obowiazków Zamierzamy stosować sprawiedliwy podział obowiązków, tzn. na każdy etapie gry (projekt, wytwarzanie, testowanie, rozbudowa) caly zespół będzie się wykazywał równą aktywnością. 4

Tomasz Pudelewicz będzie dodatkowo odpowiedzialny za kontrolę jakości i komunikację z prowadzącym ZPP. Przydział osób do poszczególnych zadań projektu będzie dynamiczny. 1.7 Etapy oddawania oprogramowania Pierwsza wersja testowa pojawi się pod koniec semestru zimowego 2003/04. 5

2 Usecases i ich implementacja budowanie garaży wywołujemy metodę build_garages(quantity,who,where) na klasie BuildingCompany, która wywoluje metode remove(quantity) na klasie Money, a następnie, jeżeli ta metoda zwróciła wartość true, dodaje do listy, work_list, znajdującej się w klasie BuildingCompany, nowoutworzony obiekt klasy BuildingGarage. Następnie wywoływane są metody tick na obiekcie BuildingGarage aż zmienna time, należąca do tego obiektu nie osiągnie wartości 0. Gdy ten warunek zostanie spełniony to zostaje wywołana procedura add_places na odpowiednim obiekcie typu Garage. budowanie kas wywołujemy metodę build_ticket_offices(quantity,who,where) na klasie BuildingCompany, która wywoluje metode remove(quantity) na klasie Money, a następnie, jeżeli ta metoda zwróciła wartość true, dodaje do listy, work_list, znajdującej się w klasie BuildingCompany, nowoutworzony obiekt klasy BuildingTicketOffice. Następnie wywoływane są metody tick na obiekcie BuildingGarage aż zmienna time, należąca do tego obiektu nie osiągnie wartości 0. Gdy ten warunek zostanie spełniony to zostaje wywołana procedura add_places na odpowiednim obiekcie typu TicketOffice. przenoszenie przejazdu z notatnika do niereglarnego rozkładu jazdy polega na wywołaniu metody add_course(course,date,time) na odpowiedniej klasie IrregularTimeTable.Następnie jeżeli ta metoda zwróci wartość true wywołujemy metodę remove_commission(course) na odpowiednim obiekcie klasy Notepad. usuwanie przejazdu z nieregularnego rozkładu jazdy polega na wywołaniu metody remove_course(course) na odpowiednim obiekcie klasy IrregularTimeTable. Jeżeli zwżoci ona wartość true to dodajemy ten kurs do notatnika za pomocą metody add_commission(course) na odpowiednim obiekcie klasy Notepad opóźnienie autobusu, który ma rozkład nieregularny polega na wywołaniu metody disaster() na odpowiednim obiekcie klasy Bus, ta metoda z ściśle określonym prawdopodobieństwem wywoła metodę delayed(time) na obiekcie klasy IrrgularTimeTable należącym do odpowiedniego autobusu. Szczegółowy opis działania tej metody jest umieszczony w klasie IrregularTimeTable. wypłata pensji raz na miesiąc wywoływana jest metoda month_time_tick() w HQ, która rozsyła komunikaty month_time_tick() do wszystkich obiektów klasy Worker. Każdy z tych obiektów wysyła do HQ komunikat remove_money_absolutely(salary). W przypadku niemożliwości wypłacenia pensji, automatycznie wyołuje się metoda take_credit(difference), gdzie difference to ilość pieniędzy jakiej zabrakło na koncie. W przypadku niemożności wzięcia kredytu GAME OVER. starzenie się i zawalanie budynków wysłanie komunkatu month_time_tick() do budynku. Jeżeli stan budynku zejdzie poniżej ustalonego limitu to budynek się zawala, a jego pracownicy przenoszeni są na free_workeres_list 6

brudzenie się i sprzątanie dworca wywołanie metody time_tick() na obiekcie typu Station. zatrudnienie pracownika WorkersExchange dostaje komunikat wypisania pracownika - remove_worker, a HQ - employ_worker. zwolnienie pracownika WorkersExchange dostaje komunikat dodania pracownika - add_worker, a HQ - fire_worker. misje klasy misji dziedziczą z klasy Mission. Wykonuje się w nich sprawdzanie czy któryś z graczy dokończył misję. starzenie się pojazdu czasowo na pojeździe (Vehicle) będa wywoływanie metody get_older_from* postarzające pojazd. Jesli wynik metody check_vehicle() okaźe się negatywny, to pojazd staje się niesprawy. wykupienie reklamy do game_world komunikat buy_advertise, stamtąd do HQ kupującego i do agencji reklamowej, z HQ do konta [money]. oddanie pojazdu do naprawy w zakładzie nie należącym do firmy do game_world komunikat repair_vehicle, stamtąd do pojazdu i do warsztatu. zakup paliwa w rafinerii zakup pojazdu na giełdzie sprzedaż pojazdu na giełdzie pobranie zlecenia jednorazowego z agancji turystycznej ukaranie gracza za niewywiązanie się z umowy jednorazowej wykonanie umowy jednorazowej zaciągnięcie kredytu w banku spłata raty kredytu koniec czasu spłaty kredytu zamawianie statystyk wynajmowanie przystanku tankowanie pojazdow jazda / postuj pojazdów jazda / odpoczynek kierowcy 7

zdarzenie losowe - wypadek, awaria pojazdu, opóźnienie autobusu oferowanie graczowi reklamy na jego autobusach upgrade pojazdu. nowy dzien w miescie - nowi pasazerowie, rozdzial na przystanki mandat dla kierowcy 3 Hierarchia klas Worker > MobileWorker > Driver > NonMobileWorker > Cashier > Charwoman Vehicle > Bus Offer TimeTable > RegularTimeTable > IrregularTimeTable Course Notepad Good > Fuel > Money City Base Building > Garage 8

> BuildingWithWorkers > TicketOffice > BusStop > Station BuildingCompanyWork > BuildingGarage Statistics Agency HQ TravelAgency FreeWorkers AdvertisementAgency BuildingCompany RepairShop Bank Rafinery VehicleExchange GameWorld Manager View WorkersExchange 9

Poniżej opisane są wszystkie klasy wraz z atrybutami i metodami. Sposób dziedziczenia jest widoczny na poprzednich stronach w punkcie Hierarchia klas. Klasy są posortowane alfabetycznie w celu ułatwienia nawigacji po dokumencie. UWAGA!!!Klasy, w opisie których nie napisaliśmy inaczej należą do modułu GameWorld. 4 AdvertisementAgency advert_list lista reklam [list of *advert_t]. buy_advertise(id, who) reklama o identyfikatorze id zostaje sprzedana graczowi who. generate_advertisement_offer() tworzona jest nowa oferta reklamy ktora jest proponowana losowemu graczowi (umieszczenie na autobusie) [offer_advertisement(adv, who) z klasy gameworld]. 5 Bank active_credit_list lista dłużników [list of *credit_t]. take_credit(credit, who) firma who zaciągnęła kredyt credit. Trzeba dorzucić do listy dłużników. pay_instalment(credit, who) firma who spłaciła ratę kredytu credit. Należy odliczyć ją od łącznej kwoty kredytu. Jeżeli suma kredytu równa się zeru, należy usunąć tą pozycję z listy dłużników. time_tick() skończył się kwant czasu. Trzeba: sprawdzić, czy jest koniec terminu spłaty któregoś kredytu. Jeżeli tak, to należy o tym poinformować świat gry [metoda credit_deadline(credit, who)]. 10

6 Base garage wskaźnik do odpowiedniego obiektu typu Garage. motel wskaźnik do odpowiedniego obiektu typu Motel. ticket_office wskaźnik do odpowiedniego obiektu typu TicketOffice. station wskźnik do odpowiedniego obiektu typu Station year_time_tick() wysłanie komunikatu year_time_tick() do następujących obiektów: garage, motel, ticket_office, station. 7 BuildingCompany work_list lista obiektów typu BuildingCompanyWork build_garages(quantity,who,where) metoda tworzy obiekt klasy BuildingGaragei dodaje go do listy work_list pod warunkeim, że metoda remove(garage_cost*quantity) na odpowiedniej klasie Money zwróciła true, tzn. mamy odpowiednią ilość pieniędzy, wpp. informujemuy interfejs o barku funduszy. tick() przeglądanie wszystkich elementów listy work_list, usuwanie z listy i wywołanie destruktorów na obiektach, których zmienna time jest równa 0 i wysyłanie komunikatu tick() do pozostałych obiektów z listy. 8 BuildingCompanyWork what wska"xnik do obiektu, który jest budowany lub remontowany. where wskaźnik do bazy, w której ten obiekt jest budowany lub romentowany. progress postęp budowy lub remontu. 11

time_tick() zwiększ progress. finsh_work() wstawia odpowiedni obiekt w odpowiednie miejsce, niweluje zużycie tego obiektu i uruchamia na sobie destruktor. BuildingCompanyWork(what,where) konstruktor BuildingCompanyWork() destruktor. 9 BuildingGarage time who where quantity BuildingGarage(quantity,who,where) tworzy obiekt klasy BuildingGarage, inicjując zmienna time na wartość GARAGE_BUILDING_TIME*quantity oraz zapisując odpowiednie wskaźniki na zmiennych who, where oraz odpowiednią wartość na zmiennej quantity. tick() zmniejsza time o 1. Jeśli time jest równe 0 wtedy wywołujemy na obiekcie typu Garage znajdującym się w bazie położonej w mieście where należącej do firmy who metodę add_places(quantity). BuildingGarage destruktor. 10 Building places ilość miejsc w budynku used_places ilość miejsc zajętych w budynku condition stan techniczny budynku. 12

take_place jeśli textitplaces<used_places to wykonujemy used_places += 1 i zwracamy true w przeciwnym przypadku zwracamy false. free_place wykonujemy used_places -= 1. month_time_tick() ujemnie wpływa na condition budynków, jeżeli condition spada poniżej CONDITION_LIMIT wtedy budynek jest niezdatny do uźytku. 11 BuildingWithWorkers workers_list lista pracowników zatrudnionych w tym budynku. hire_worker(worker) dodaje pracownika worker do workers_list fire_worker(worker) usuwa pracownika worker z workers_list month_time_tick() ujemnie wpływa na condition budynków, jeżeli condition spada poniżej CONDITION_LIMIT wtedy budynek jest niezdatny do uźytku, a jego pracownicy są przenoszeni na listę free_workers_list w HQ. 12 BusStop rent_busstop(who) who wynajął ten przystanek. Trzeba go dopisać do listy firm mogących korzystać z tego przystanku. 13 Bus Dziedziczy z: Vehicle Klasa dla podstawowego (narazie jedynego) pojazdu w grze. Wszystkie atrybuty dziedziczone z Vehicle 13

set_repairing(time) ustawia status autobusu na naprawiany na time czasu. moving() pojazd się porusza, pobranie dawki paliwa z baku, jezeli jest rezerwa to wywolanie metody refuel(), wyslanie do kierowcy driving(), wywolanie metody get_older_from_fuel() waiting(city) pojazd stoi, wywolanie metody resting(city) dla kierowcy, wywolanie metody get_older_form_standing(city). refuel() nalezy zatankowac autobus, [meotda give_fuel(petrol,need) z klasy hq]. disaster() wysąpienie zdarzenia losowego. jesli jest to mandat to metoda fine(value) dla kierowcy. Jeśli jest to opóźnienie to do rozkładu jazdy wysyłany jest komunikat delayed(time). show_equipment() zwraca wyposazenie jakie posiada pojazd. upgrade(what, level) zmiana wyposażenia what na poziom level. wywolanie metody where_am_i z wlasnego rozkładu jazdy [klasy time_table]. Jeśli jesteśmy poza hq to zwrócenie komunikatu, że trzeba być w hq. get_older_from_standing(city) postarzanie pojazdu w zależności od miejsca postoju. 14 Charwoman 15 City popularity[max_players+1] popularność przewożników w danym mieście passanagers[max_players+1] ilość czekających pasażerów na danego przewoźnika. served[max_players+1][statistic_history_length] tablica, w której trzymamy ilość obsłużonych klientów w ostatnich latach. unserved[max_players+1][statistic_history_length] analogiczna tablica dla klientów nieobsłużonych. 14

bases[max_players+1] wskaźniki do baz poszczególnych graczy. bus_stop[max_players+1] wskaźniki do przystanków autobusowych poszczególnych graczy. population ilośłudności w mieście. new_passengers(company, heading, count) pojawia się count pasażerów chcących jechać do heading kożystając z usług przewoźnika company distribute_passengers() wywolywana na początek dnia, trzeba roździelić wszytkich nowych pasażerów przystanki. generate_passengers() tworzy losową (częściowo) liczbę pasażerów update_ratios update współczynników wg. których wyliczana jest ilość pasażerów. bus_departure(max_passengers, company) odjazd autobusu firmy company. Zwraca liczbę pasażerów jaka wsiadła do tego autobusu, nie większą niż max_passengers. new_day_time_tick() czynnosci na początek dnia: update_ratios() generate_passengers() distribute_passengers() 16 Course from skad to dokad date czas odjazdu passengers ilosc pasazerow value zaplata za przewiezienie pasazerow done() kurs został wykonany. Wywołujemy metode add_money(value) z hq 15

17 Driver fines[3] tablica strat jakie przyniosł kierowca w okresie trzech lat. tiredness zmęczenie kierowcy. resting(where) kierowca odpoczywa, spada zmęczenie, szybkość zależy od miejsca odpoczynku. driving() kierowca prowadzi, wzrasta zmeczenie. fine(value) kierowca dostal mandat. year_time_tick() minął rok, należy przesunąć wartości w tabeli fines[3], następnie wywoływana jest ta sama metoda z nadklasy. 18 Fuel Dziedziczy z: good obiekt tej klasy reprezentuje globalny zbiornik z paliwem. add(petrol, quantity) trzeba dopisać do zapasów quantity paliwa petrol. remove(petrol, quantity) trzeba odjac od zapasow (quantity) paliwa (petrol). metoda zwraca ile paliwa jest wydane z magazynu. 19 GameWorldManager Moduł: GameWorld Jest to główna klasa zarządzająca światem gry. Metoda tej klasy opennewgame uruchamiana będzie jako proces działający w tle o priorytecie niewyższym niż klasa, z której ta meteda będzie wywoływana. 16

opennewgame() tworzy nową gre. Inicjuje świat gry oraz tworzy graczy sterowanych przez komputer. buy_advertise(id, who) gracz who zdecydował się wykupić reklamę o identyfikatorze id. Trzeba poinformować agencję reklamową i dodać do HQ gracza who. repair_vehicle(vehicle, who) gracz who chce wyremontować pojazd vehicle w firmie naprawczej. Trzeba poinformować warsztat i ustawić stan pojazdu. buy_petrol(rafinery, petrol, quantity, who) gracz who podpisał kontrakt na zakup quantity paliwa petrol. Trzeba poinformować rafinerię rafinery i HQ gracza who. buy_statistics(statistics, who) gracz who zamówił statystyki. agencji statystycznej. buy_vehicle(vehicle, who) gracz who kupił pojazd vehicle. giełdę i HQ firmy who. Trzeba przekazać do Trzeba poinformować sell_vehicle(vehicle, who) gracz who sprzedał pojazd vehicle. Trzeba poinformować giełdę i HQ firmy who. take_commission(commission, who) gracz who podpisał kontrakt z agencją turystyczną na zlecenie commission. Trzeba powiadomić agencję turystyczną i HQ gracza who. punish_player(commission, who) gracz who nie wywiązał się z umowy wykonania jednorazowego zlecenia. Należy poinformować o tym jego HQ. commission_completed(commission, who) zostało ukończone zlecenie commission przez firmę who. Trzeba poinformować firmę turystyczną. take_credit(credit, who) gracz who zdecydował się na zaciągnięcie kredytu credit. Trzeba poinformować bank i HQ [musi ono dodać pożyczoną kwotę do swojego konta]. pay_instalment(credit, who) spłata raty kredytu. Trzeba poinformować bank. credit_deadline(credit, who) dobiegł końca czas spłaty kredytu credit. Trzeba poinformować HQ who. rent_busstop(owner, busstop, who) who wynajmuje przystanek busstop od owner. Trzeba poinformować przystanek busstop [rent_busstop(who)] i HQ owner [rent_busstop(busstop, who)]. employ_worker(worker, who) powoduje zatrudnienie pracownika. Pracownik jest usuwany z giełdy pracowników i przepisywany do pracowników z danego HQ. 17

fire_worker(worker, who) powoduje zwolnienie pracownika. Pracownik jest dodawany do giełdy pracowników i usuwany z listy pracowników danego HQ. offer_advertisement(adv, who) zaoferowanie graczowi who reklamy adv. Metoda wywolwana przez AdvertisementAgency. Wywołanie metody new_advertisement_offer(adv) z hq należącego do who. add_money(money, who) dodanie money do konta gracza whom wywolanie metody add_money(money) z hq gracza who. take_passengers(city, max_passengers, who) wysyla do miasta city komunikat bus_departure(max_pa who) i zwraca jego wynik. 20 Garage places ilość pojazdów, które mieszczą się w garaźu. add_places(quantity) metoda zwiększa ilość miejsc (places) w garażu o quantity. 21 Good klasa abstrakycjna zbierająca dobra takie jak pieniądze czy paliwo. stock aktualnie na stanie. 22 HQ Moduł: GameWorld Kwatera główna. Zgromadzone są w niej dane przypisane do konkretnego gracza. workers_list lista zatrudnionych pracowników w danej firmie. free_workers_list lista bezczynnych pracowników zatrudnionych w danej firmie. 18

money wskaźnik do odpowiedniego obiektu klasy Money. fuel wskaźnik do odpowiedniego obiektu klasy Fuel. bases_list lista wskaźników do baz gracza. add_base(base) dodanie bazy base do listy bases_list. buy_advertise(advert) gracz będący właścicielem tego HQ kupił reklamę advert. Należy dopisać ją do listy reklam wykupionych i odliczyć odpowiednią kwotę z konta [advert- >price]. buy_petrol(petrol, quantity) nabyto paliwo petrol. Trzeba do dóbr firmy dodać quantity paliwa petrol i zaznaczyć, że firma ma już podpisaną umowę z rafinerią oraz odjać odpowiednią kwotę z konta [petrol->price * quantity]. buy_statistics(statistics) zamówiono statystyki miast wymienionych na liście statistics- >cities. Trzeba poinformować świat gry oraz potrącić odpowiednią kwotę z konta [statistics- >price]. buy_vehicle(vehicle) trzeba dopisać vehicle do listy posiadanych pojazdów i odjąć jego cenę vehicle->price z konta. sell_vehicle(vehicle) trzeba usunąć vehicle z listy posiadanych pojazdów i dodać jego wartość do konta. take_commission(commission) trzeba dodać do notesu zlecenie commission. punish_player(commission) firma nie wywiązała się z umowy. O ile to możliwe, należy zabrać z konta kwotę określoną w polu penalty struktury commission, w przeciwnym przypadku (niewypłacalność) zablokować na okres commission->penalty_days dni możliwość korzystania z usług agencji turystycznej. commission_completed(commission) zostało wykonane zlecenie agencji turystycznej. Trzeba powiadomić świat gry. take_credit(credit) została wzięta pożyczka credit z banku. Należy dodać do konta odpowiednią kwotę [do Money wysłać add(credit->quantity)]. credit_deadline(credit) skończył się czas na spłatę kredytu. Jeżeli na koncie jest wystarczająco pieniędzy, to z nich jest spłacany kredyt [do money wysyłany jest komunkat remove(credit->quantity)]. W przeciwnym przypadku, najpierw próbuje sprzedać autobusy [sell_vehicle], później budynki [sell_building]. Jeżeli te operacje nie dadzą wystarczającej kwoty na spłatę kredytu, to bank zajmuje HQ tego gracza. Jest to równoznaczne zakończeniu gry przez tą firmę [do świata gry died(who)]. 19

rent_busstop(owner, busstop) gracz wynajmuje przystanek busstop w mieście busstop- >city za cenę busstop->rent_price od owner. Trzeba poinformować świat gry [rent_busstop(owner, busstop, this->id)], a także dopisać przystanek do listy przystanków wynajmowanych od kogoś. rent_busstop(busstop, who) gracz who postanowił od nas wynająć przystanek busstop. Trzeba to dopisać do listy przystanków wynajmowanych komuś. give_fuel(petrol, need) pojazd potrzebuje paliwa, wywolanie meotdy remove(petrol, quantity) z klasy fuel. Jesli ta metoda zwroci wartosc < od need to wywloanie metody buy_fuel(petrol, need, player) z klasy rafinery. employ_worker(worker) nowy pracownik zostanie dodany do listy pracowników. fire_worker(worker) pracownik zostanie usunięty z listy pracowników new_advertisemet_offer(adv) graczowi jest proponowane umieszczenie reklamy adv na jego autobusach. upgrade(vehicle, what, level) zmiana standardu wyposażenia pojazdu vehicle [metoda upgrade(what, level) wywolana dla pojazdu]. show_equipement(vehicle) zwraca wyposażenie jakie posiada pojazd vehicle. take_passengers(city, max_passengers) wywolanie metody take_passengers(city, max_passengers, who) z gameworld. month_time_tick() wyslanie month_time_tick() do pracowników z listy workers_list oraz free_workers_list. year_time_tick() wyslanie year_time_tick() do pracowników z listy workers_list oraz free_workers_list oraz do obiektów z listy bases_list. add_money(quantity) dodaje pieniądze, wysyla do money komunikat add(quantity) remove_money(quantity) wysyła komunikat to money remove(quantity). i zwraca otrzymaną wartość (ile rzeczywiście odjęto pieniędzy). remove_money_absolutely(quantity) wysyła komunikat do money remove(quantity). Jeżeli wartość zwrócona jest mniejsza niż quantity to wywolywana jest metoda take_credit(difference). Jeźeli nie można już zaciągnąć kredytu to sorry Winetou - gameover 20

23 IrregularTimeTable W klasie tej trzymany jest rozkład jazdy autobu. Kolejne kursy trzymane są na liście /textitcourses_list. Funkcje modyfikujące rozkład jazdy będą napisane w ten sposób aby niemożliwe było pokrywanie się 2 kursów, oraz żeby modyfikacja przejazdów, które się rozpoczęły była niemożliwa. courses_list lista, na której w sposób uporządkowany trzymane są kolejne przejazdy. pojazd grafik pamięta pojazd, do którego należy. add_course(course,date,time) metoda dodaje do listy courses_list kurs course. Dodawanie odbywa się według następującego schematu: Wyszukujemy na liście ostatni, niepusty kurs, którego data i czas zakończenia jest mniejsza od date,time. Jeżeli kolejny kurs na liście jest kursem pustym to go usuwamy z listy. Za wyszukanym przejazdem dodajemy(jeżeli zachodzi taka potrzeba), kurs, w którym jest 0 pasażerów, i który prowadzi od mista, w którym autobus będzie po wykonaniu oferty znalezionej na liście do miasta, z którego ma się zaczynać dodawany kurs. Następnie dodajemy do listy kurs course, z czasem i datą starszymi spośród następujących dwóch par: date, time data i czas zapisana w ostatnio dodawanym kursie pustym. Jeżeli dodany kurs nie był ostatnim na liście dodajemy jeszcze dodatkowo do listy pusty przejazd między odpowiednimi miastami. Następnie sprawdzamy czy: na liście couses_list data i czas zakończenia jednego kursu jest mniejsza, równa od daty i czasu rozpoczęcia kolejnego kursu. czy data i czas dodawanego kursu jest mniejsza od daty zapisanej w deadline tego kursu. Jeżeli choć jeden z tych warunków nie zostanie spełniony lista wraca do swojej początkowej postaci i metoda zwraca false, wpp. metoda zwraca true. remove_course(course) metoda usuwa z listy coruses_list kurs course. Odbywa się to według następującego schematu: Wyszukujemy na liście courses_list kusr course. Sprawdzamy, czy nie jest on już wykonywany. Jeżeli tak funkcja zwraca false. W przeciwnym przypadku naleziony kurs dodajemy do notatnika, za pomocą metody take_commission(course) wywołanej na odpowiedniej klasie HQ. Usuwamy go z listy courses_list wraz z sąsiednimi kursami pustymi. Następnie jeżeli usuwany kurs nie był ostatnim kursem na liście dodajemy pusty kurs pomiędzy: miastem docelowym kursu, który znajdował się przed usuwanym kursem miastem, z którego zaczyna się kurs, który znajduje się po usuwanym kursie. 21

W przypadku gdy jest to jedno i to samo miasto, wtedy nie dodajemy dodatkowych połączeń. dalayed(time) metoda przegląda kolejno wszystkie niezakończone kursy na liście courses_list według następującego schematu: Jeżeli trafimy, na aktualnie wykonywany kurs to do jego czasu zakończenia dodajemy time. Dla pozostałych kursów, z wyjątkiem ostatniego odejmujemy od time różnice czasu zakończenia badanego kursu(stan przed dodaniem do niego time) oraz czasu rozpoczęcia następnego kursu. Następnie zwiększamy czas rozpoczęcia i zakończenia następnego kursu o time jeśli time jest większy od 0. Po tej zmianie sprawdzamy czy nowy czas rozpoczęcia nie przekroczył deadline. Jeżeli tak się stało to wywołujemy metodę remove_course(course), gdize course jest aktualnie badanym kursem i kontynuujemy sprawdzanie listy. Trzeba pamiętać o przypadku, gdy badamy ostatni kurs na liście. 24 Mission Moduł: GameWorld Klasa abstrakcji - z niej będą dziedziczyć poszczególne misje. check(who) sprawdza, czy gracz who dokończyl misję. Jesli tak to zwraca true, w przeciwnym przypadku false. Wywoływana przez klasę GameWorldManager. 25 MobileWorker vehicle pojazd przydzielony pracownikowi change_vehicle(vechicle) zmiana pojazdu na vehicle. rest() ustawia vehicle na nil. 26 Money Obiekty tej klasy reprezentują pieniądze gracza. 22

stock stan konta add(quantity) quantity pieniędzy trzeba dodać do konta. remove(quantity) quantity pieniędzy trzeba odjąć z konta, zwraca ile pieniędzy zabrano z konta (zwraca quantity gdy quantity < stock). 27 NonMobileWorker status mówi nam o tym czy pracownik pracuje czy jest na urlopie. change_status(status) zmiana statusu pracownika. 28 Notepad commission_list - lista zleceń. take_commission(commission) trzeba dopisać do listy zleceń (comission_list) zlecenie commission. remove_commission(commission) wyrzuca z listy zleceń (commission_list) zlecenie commission. 29 Offer from skąd to dokąd deadline ostateczny czas zrealizowania passengers ilość pasażerów do przewiezienia 23

standard minimalny standard autobusu value ile można dostać za wykonanie oferty start_time czas wyjazdu end_time czas zakończenia Wszystkie atrybuty oprócz dwóch ostatnich są stałymi. calculate_end_time(start_time, bus) metoda obliczająca czas zakończenia i zapisująca wynik na end_time change_start_time(value) zmiana czasu start_time o value. change_end_time(value) zmiana czasu end_time o value. 30 Rafinery Obiekt reprezentuje rafinerię w której można zakupić paliwo price aktualna cena time_tick() zmienia cene paliwa. buy_petrol(petrol, quantity, who) firma who podpisała kontrakt z rafinerią na dostarczenie quantity benzyny petrol. 31 RegularTimeTable Obiekty tej klasy to regularne tygodniowe rozkłady jazdy. add_course(course) metoda dodaje course do courses_list. 24

remove_course(course) metoda usuwa course z courses_list. check_courses() sprawdzany jest czas nastepnego wydażenia (przyjazd, odjazd). Jeżeli właśnie jest czas przyjazdu do miejsca docelowego to danego kursu wysylamy komunikat done(). Następnie wyjmujemy kurs z kolejki, zmieniamy w nim datę na następny tydzień i wkładamy ją znowu do kolejki. Jeżeli natomiast jest czas odjazdu to wywołujemy metode take_passengers(city, max_passengers) z hq, gdzie passengers to maksymalna ilość pasażerów jaką może zabrać nasz autobus. Metoda ta zwróci liczbę pasażerów jaka wsiadła do autobusu, dzięki temu ustawimy atrybut value dla kursu. time_tick() wywołanie metody check_courses() 32 Rapairshop vehicle_list lista naprawianych pojazdów. repair_vehicle(vehicle, who) trzeba wyremontować pojazd vehicle należący do gracza who. time_tick() częściowa naprawa wszystkich naprawianych pojazdów. 33 Station cleanness czystość na dworcu. time_tick() każda zatrudniona sprzątaczka z workers_list wpływa dodatnio, wprost proporcjonalnie do swoich zdolności (abilities) na cleannes, następnie wywoływana jest metoda get_dirty(). get_dirty() zmniejsza wartość cleannes wprost proporcjonalnie do wartości popularity gracza w danym mieście. 25

34 StatisticsAgency Agencja statystyczna - obiekt przechowuje wszelkie dane statystyczne potrzebne do analizy rynku oraz wydajności firmy. statistics_list lista dostępnych statystyk. buy_statistics(statistic, who) zamówione zostały statystyki przez gracza who. Należy wypełnić strukturę statistics dla każdego miasta na liście statistics->cities. 35 TicketOffice Dziedziczy z: BuildingWithWorkers Budynek - kasa biletowa add_places(quantity) metoda zwiększa ilość okienek (places) w kasie biletowej o quantity. 36 TimeTable courses_list lista kursów. where_am_i() metoda zwraca aktualne miejsce przebywania pojazdu lub gdzie pojazd jedzie. delayed(time) nastąpiło opóźnienie. 37 TravelAgency Agencja turystyczna - tutaj moźna dostać zlecenie na przejazd jednorazowy. commission_list lista zleceń 26

take_commission(commission, who) trzeba ustawić zlecenie commission jako zarezerwowane dla firmy who. check_reserved_commissions() sprawdza, czy są jakieś przeterminowane zlecenia. Jeżeli tak się stało, trzeba poinformować o tym świat gry [metodą punish_player(commission, who)]. commission_completed(commission, who) firma who ukończyła zlecenie commission. Trzeba je usunąć z listy zleceń. 38 VehicleExchange Obiekt tej klasy reprezetuje giełdę pojazdów. bus_list lista busów do kupienia generate_random_bus() generuje nowego busa i dodaje go do listy. buy_vehicle(vehicle, who) firma who zdecydowała się kupić pojazd vehicle. Należy skreślić go z listy dostępnych pojazdów. sell_vehicle(vehicle, who) firma who zdecydowała się sprzedać pojazd vehicle. Należy dodać go do listy dostępnych pojazdów. 39 Vehicle Moduł: GameWorld Klasa abstrakcji pojazdów występujących w grze. name nazwa pojazdu - możliwa edycja przez gracza type model pojazdu maturity stan pojazdu w punktach fuel_consumption zużycie paliwa speed prędkość driver kierowca 27

time_table rozkład jazdy dla pojazdu max_passengers tyle moźna zabrać maksymalnie standard standard pojazdu set_repairing(time) usawiany jest czas naprawy pojazdu. W tym czasie pojazd nie może sie poruszać. check_vehicle() sprawdzany jest stan techniczny pojazdu. Jeśli maturity zejdzie poniżej zera, wówczas wywolywana jest metoda set_repairing oraz repair_vehicle na warsztacie. get_older_from_time() metoda wywoływana raz do roku w celu postarzenia pojazdu. get_older_from_fuel(fuel_quality) pomniejszany jest wiek pojazdu w zależności od używanego paliwa. get_older_from_driver(driver_ablities) starzenie się pojazdu w zależności od zdolności kierowcy. time_tick() wywolanie metody where_am_i: jeżeli pojazd się porusza to wywołanie metody moving(), jeśli stoi to wywołanie metody waiting(city) (city zwróciło where_am_i). Przesłanie time_tick() do time_table. 40 View Moduł: UserInterface Klasa abstrakcji, z której będą dziedziczyć ekrany (okna?) interfejsu. show_on_screen() wyświetla interfejs na ekranie. 41 WorkersExchange Moduł: GameWorld Klasa zajmuje się obrotem pracownikami. add_worker(worker) dodaje pracownika do listy na giełdzie remove_worker(worker) usuwa pracownika z listy na giełdzie 28

42 Worker Moduł: GameWorld Klasa wirtualna, z niej dziedziczą klasy reprezentujące pracowników. salary miesięczna pensja pracownika. name nazwisko i imię pracownika age wiek pracownika salary_min minimalna płaca za jaką będzie pracował ten pracownik. hire_date data zatrudnienia pracownika. abilities uzdolnienie pracownika. Worker(int abilities) tworzenie nowego pracownika, który posiada umiejętności o współczynniku abilities. month_time_tick() metoda wysyła do HQ komunikat remove_money_absolutely(salary). year_time_tick() metoda zwiększająca wiek pracownika. 29