Projekty

Hurtex

Opis programu

W pliku wejściowym znajdują się dane dotyczące gatunków, klientów i ich zamówień. W ramach programu użytkownik może operować na listach gatunków i klientów. W szczególności może on:

‐ wczytać dane z pliku

‐ zapisać dane do pliku

‐ wyświetlić dane na ekranie

‐ eksportować dane do pliku tekstowego w celu późniejszego wydruku

‐ posortować dane

‐ dodawać, edytować lub usuwać poszczególne elementy


Plik

Po odczytaniu danych z pliku są one wyświetlane na ekranie. Jeżeli plik z danymi ma niepoprawną formę to wystąpi błąd i program przerwie działanie. Aby stworzyć nową bazę danych należy użyć polecenia Plik > Nowa baza lub kombinację klawiszy CTRL+B. Aby wczytać dane z pliku wejściowego należy wybrać polecenie wczytaj z Plik >

Wczytaj lub kombinację klawiszy CTRL+O. Aby zapisać dane do pliku należy wybrać polecenie zapisz z Plik > Zapisz lub kombinację klawiszy CTRL+S. Aby zapisać wynik operacji do pliku tekstowego, w którym są one prezentowane w przejrzystej formie, należy wybrać polecenie eksportuj z Plik > Eksportuj lub kombinację klawiszy CTRL+E.


Gatunki

Gatunki można:

‐ dodawać: należy kliknąć dwa razy na pole w tabeli gatunki

‐ modyfikować: tylko z menu

‐ usuwać: tylko z menu

WAŻNE! MAX 20 GATUNKÓW!


Klienci

Klientów można:

‐ dodawać: należy kliknąć dwa razy na puste pole w tabeli klienci

‐ modyfikować: należy kliknąć dwa razy na klienta w tabeli klienci

‐ usuwać: tylko z menu

WAŻNE! MAX 50 KLIENTÓW!


Zamówienia

Zamówienia można:

‐ dodawać: należy kliknąć dwa razy na pole w tabeli zamówienia

‐ modyfikować: tylko z menu

‐ usuwać: tylko z menu

WAŻNE! MAX 20 ZAMÓWIEŃ DLA KLIENTA!


Pomoc

Po zainicjowaniu polecenie Pomoc > Pomoc ukaże się okno pomocy dla programu Hurtex. W trakcie korzystania z programu pomoc można uruchomić przyciskiem F1.

Aplikacja stworzona w środowisku programistycznym Delphi, umożliwia obsługę transakcji w hurtowni owoców. 

kod źródłowy + pliki instalacyjne

Jacobi

Opis metody:

1) Macierz współczynników A rozłożymy na sumę trzech macierzy A = L + D + U, gdzie L jest macierzą w której znajdują się elementy, których numer wiersza jest większy od numeru kolumny, D to macierz diagonalna z elementami tylko na głównej przekątnej, a U to macierz, w której znajdują się elementy których numery wiersza są mniejsze od numerów kolumny. Można to zapisać następująco:

2) Obliczamy teraz macierz N

N = D-1

3) Następnie obliczamy macierz M

M = -N(L+U)

4) Kolejne przybliżenia obliczamy teraz według następującego wzoru:

xn+1 = Mxn + Nb

gdzie indeksy n oznaczają numer iteracji


Metoda ta jest zbieżna dla dowolnego przybliżenia początkowego rozwiązania x0, jeśli promil spektralny -D-1(L+U) jest mniejszy od jeden (promil spektralny to największa wartośd bezwzględna z wartości własnej macierzy). W przeciwnym wypadku nie dla każdego przybliżenia początkowego otrzymamy rozwiązanie układu.

Program rozwiązuje metodą Jacobiego układ równań liniowych postaci: Ax = b, gdzie A oznacza macierz kwadratową stopnia n, a x i b € R

 kod źródłowy + pliki instalacyjne

Yin Yang

Autorami tej ciekawej gry są członkowie North Berkshire Game Group z Massachusetts, sama zaś gra jest finalistką About.com 2004 game design competition. Przygotowanie próbnej rozgrywki nie powinno przysporzyć żadnych problemów, planszę można uzyskać maskujćc fragment zwykłej szachownicy.

Rozgrywka toczy się na szachownicy 6x6 z kolorystycznym rozróżnieniem pól. Początkowe ustawienie pionów przypomina otwarcie z Othello. Gracze na zmianę przesuwają i dostawiają na planszę piony tak długo, jak jest to możliwe i zgodne z zasadami gry, dążąc do określonych celów: gracz pierwszy stara się umieścid jasne piony na jasnych polach, zaś ciemne - na ciemnych. Gracz drugi - czego łatwo się domyślid - dąży do odwrotnego układu, czyli umieszczenia ciemnych pionów na jasnych polach i jasnych pionów na polach ciemnych. Za każdy pion na planszy spełniający te warunki gracze uzyskują punkt - można śledzid stan rozgrywki na podczas jej trwania, jednak nie ma on żadnego znaczenia dla przebiegu partii. Dla zobrazowania - w ustawieniu początkowym gracz pierwszy nie ma na planszy żadnego piona przynoszącego mu punkty, zaś gracz drugi - wszystkie cztery.

Gracze na zmianę przesuwają piony na planszy według prostej zasady: pion dowolnego koloru można przesunąd po linii prostej w rzędzie lub kolumnie dokładnie o tyle pól, ile pionów tego samego koloru sąsiaduje z nim bezpośrednio w rzędzie, kolumnie lub po skosie. W trakcie ruchu pion nie może przeskakiwad nad żadnymi innymi pionami, ruch musi kooczyd się na wolnym polu. Tak więc teoretycznie pion mógłby poruszyd się maksymalnie o siedem pól (ósme musi byd wolne, aby ruch w tym kierunku mógł byd możliwy), jednak... plansza ma tylko sześd pól szerokości i wysokości. Pion stojący w rogu planszy może się poruszyd maksymalnie o dwa pola - oczywiście jeśli na dwóch z trzech pól sąsiednich stoją piony tego samego koloru. Na rysunku z przykładowym rozmieszczeniem pionów oznaczono cyfrą zasięg każdego z nich. Z kolei na rysunku poniżej - ruchy możliwe (oznaczone żółtymi strzałkami) do wykonania w tym samym układzie pionów.

            Po wykonaniu ruchu pionem gracz umieszcza na opuszczonym właśnie polu pion przeciwnego koloru, niż pion którym wykonał ruch, po czym kolejka ruchu przypada na jego przeciwnika. Jeśli w przypadającej na niego kolejce ruchu gracz może go wykonad, to musi to zrobid - niezależnie od tego, czy jest to dla niego korzystne. Gra kooczy się w momencie, w którym nie ma możliwości wykonania ruchu. Po zakooczeniu rozgrywki gracze przystępują do liczenia punktów - gracz pierwszy zdejmuje z planszy i liczy piony, które stoją na polach tego samego koloru jak kolor piona. Gracz drugi liczy pozostałe piony - stojące na polach przeciwnego koloru. Wygrywa oczywiście ten z graczy, który zdobył więcej punktów. Jeśli obaj zdobyli tyle samo punktów - wygrywa gracz drugi.



Aplikacja została stworzona w języku C# przy zastosowaniu zintegrowanego środowiska programistycznego Microsoft Visual Studio 2008, na platformę .Net 3.5

kod źródłowy gry + pliki instalacyjne

Paint

Celem projektu było napisanie w języku C# (technologia WinForms) aplikacji umożliwiającej tworzenie prostej grafiki w oparciu o dostępne narzędzia. Ponadto, aplikacja cechuje się otwartą architekturą, pozwalającą na dynamiczne ładowanie wtyczek (plugin-ów) zwiększających funkcjonalność programu.


Uwagi dotyczące projektu i implementacji programu:

- interfejs użytkownika czytelny i intuicyjny

- lista dostępnych narzędzi umożliwia rysowanie podstawowych figur  (linii prostych, prostokątów, elips) z uwzględnieniem ich atrybutów: kolor linii, grubość linii, styl linii, styl oraz kolor wypełnienia)

- program umożliwia odczyt/zapis tworzonego rysunku w dowolnie  wybranym lub stworzonym formacie

- dynamicznie ładowane wtyczki (mechanizm Refleksji) integruję  się z GUI aplikacji (menu, toolbary, okno opcji) i wykonują operacje   na całym obrazie (np. transformacje, konwersje kolorów)

- aplikacja obsługuje mechanizm undo/redo oraz umożliwia dynamiczną zmianę wersji językowej (opcjonalnie)

- operacje długotrwałe (np. na całym obrazie) są realizowane  w osobnych wątkach, aby nie powodowały zakłóceń w funkcjonowaniu interfejsu użytkownika

Sephia. Efekty działania wtyczki dodanej do programu.

Aplikacja do rysowania stworzona w całości w języku C# (technologia WinForms)

kod źródłowy programu + pliki instalacyjne

JTotalCommander

Celem projektu było napisanie w Javie aplikacji wzorowanej na programie Total Commander Christiana Ghislera. Projekt i implementacja interfejsu użytkownika aplikacji został wykonany w technologii Swing. Minimalny zakres funkcji realizowanych przez program sprowadza się do

operacji kopiowania, przesuwania i usuwania wykonywanych na zaznaczonych plikach i folderach.


Uwagi dotyczące projektu i implementacji programu:

- wygląd i funkcjonalność interfejsu użytkownika jest w maksymalnym  stopniu wzorowany na programie Total Commander (układ okien, menu,   listwa narzędziowa, panele z zakładkami wyświetlającymi listy pliki   i folderów, sposób sortowania plików i folderów na listach, sposób   "poruszania się" po strukturze systemu plików itp.)

- interfejs  użytkownika jest niezależny od kodu realizującego wybrane operacje na plikach i folderach

- komponent przedstawiający listę plików i folderów wyświetla w poszczególnych kolumnach: nazwę, rozmiar (tylko dla plików) i datę   utworzenia (dodatkowe kolumny są opcjonalne)

- komponent pokazujący listy plików i folderów działa prawidłowo   zarówno pod systemem Windows jak i Linux (m.in. usuń napęd A: pod   Windowsami, użyj metod File.listFiles() i File.listRoots() do pobierania   list plików i korzeni systemów plików)

- prezentowane w panelach listy plików i folderów są niezależnie sortowane wg wskazanych kolumn

- aplikacja umożliwia zaznaczanie plików i folderów za pomocą myszki (opcjonalnie także klawiatury)

- przesyłanie informacji między komponentami aplikacji realizowane są  z użyciem zdarzeń i listenerów

- operacje wykonywane na plikach mogą być  długotrwałe, lecz nie powinny one powodować "zakłóceń" w funkcjonowaniu interfejsu użytkownika

- przed usunięciem plików (folderów) lub jeśli zajdzie taka konieczność  podczas kopiowania lub przesuwania plików należy zażądać od użytkownika  potwierdzenia wykonania operacji

- podczas wykonywania operacji na plikach wyświetlane jest okno z paskiem postępu i przyciskiem pozwalającym na anulowanie bieżącej operacji

- po wykonaniu operacji na plikach lista wyświetlanych plików i folderów jest aktualizowana

- aplikacja umożliwia dynamiczną zmianę wersji językowej interfejsu


Wymagania opcjonalne:

- dodanie opcji pozwalającej na wykonywanie operacji na plikach w tle   ("move to background")

- implementacja asynchronicznego mechanizmu powiadamiającego o zmianach   w systemie plików i odświeżającego listy wyświetlanych plików

- implementacja podglądu zawartości plików (np. na bazie komponentu   z programu JEdit), itp.

Eksplorator plików wzorowany na programie Total Commander.  

Projekt i implementacja interfejsu użytkownika aplikacji został wykonany w technologii Swing.

kod źródłowy programu + pliki instalacyjne

Statki

Celem projektu było zaimplementowanie planszowej gry Statki w języku java. Zadanie zostało zrealizowane w postaci apletu z trzema wątkami. W programie użyto kilku rodzajów komponentów: 


• Button, do umieszczaania statków, zaznaczania oddanego strzału, oraz sterowania trybem rozgrywki na przyciskach pod planszą 

• Panel, do umieszczania a siatki przycisków 

• Checkbox, do włączania/wyłączania dźwięków w grze 

• Scrollbar, do definiowaania typu i ilości statków użytych w rozgrywce 


Na planszy o regulowanym rozmiarze, domyślne wymiary to 110x10, początkowo rozmieszczane są statki: 1 czteromasztowiec, 2 trójmasztowce, 3 dwumasztowce, 4 jednomasztowce (dla gracza o oznaczone jest to niebieskim kolorem pola). Gracze na przemian oddają strzały, odkrywając jedno pole. Wynikiem strzału może być pudło (x), trafiony (pulsujący czerwony), lub trafiony zatopiony (czarny). Wygrywa gracz, któóry pierwszy zatopi wszystkie statki przeciwnika. Pod planszą na bieżąco przedstawiane są statki gracza i rywala. Wyświetlana jest również aktualna data i godzina, oraz czas rozgrywki. Dostępne są trzy tryby rozgrywki: 


Nowa gra

Zmierzenie się z komputerem 


Dla dwóch graczy

Przeznaczona jest do gry na jednym komputerze 


Znajdź i zatop

Polega na zatopieniu statków w jak najmniejsze ej ilości ruchów 


W celu zrealizowania wielowątkowości dokonano implementacji przez główną klasę Statki interfejsu Runnable, a następnie umieszczenie, wewnątrz niej, implementacji metody run(). Zawarto w niej działanie przewijania statków pod planszą, przy użyciu podwójnego buforowania. Wątek uruchamiamy, tworząc w konstruktorze klasy obiekt klasy Thread, przekazując do niego parametr wskazujący na naszą główną klasę i wywołując metodę start(). 


Kolejne 2 wątki dodano do programu w specjalnie utworzonych klasach wewnętrznych programu rozszerzających klasę Thread i zaimplementowaniu w nich metod 

run(), wewnątrz których umieszczono działanie wątków. Ich zadaniem jest zmienianie kolorów palących się statków z pulsującego czerwonego na żółty i na odwrót. Następnie w głównej klasie uruchamiamy wątki przez utworzenie ich egzemplarzy i wywołanie dla nich metod start(). 


Funkcje wykorzystywane w programie: 

actionPerformed funkcja służąca do obsługi zdarzeń myszki na planszy 

adjustmentValueChanged funkcja służąca do obsługi regulacji scrollbara 

gridLayoutPanel funkcja służąca do utworzenia panelu złożonego z przycisków, który posłuży jako plansza 

gridLayoutPanel2 funkcja służąca do utworzenia panelu przycisków do sterowania trybem rozgrywki 

init funkcja główna apletu oprawa funkcja służąca do numerowania wierszy i kolumn oraz ustawienia odpowiednich kolorów planszy 

paint funkcja służąca do rysowania grafiki, odświeżania obrazu, wywoływana przy repaint() 

resetuj funkcja służąca do ustawienia wartości zmiennych użytych w programie na początkowe oraz do wyczyszczenia planszy 

rozkladLosowy funkcja odpowiedzialna za losowe rozmieszczenie statków na planszy wywoływana z parametrami, gdy widoczność == true rysuje na planszy rozmieszczenie statków 

run funkcja w której zawarto działanie wątku przewijania statków 

sprawdzCzyZatopiony funkcja sprawdzająca czy trafiony statek jest zatopiony 

sprawdzStrzal funkcja zwracająca wynik oddanego strzału: pudło, trafiony,  trafiony zatopiony 

zaznaczStrzal funkcja służąca do zaznaczania na planszy oddanego strzału x pudlo, pulsujący czerwony -trafiony, czarny -zatopiony 

zaznaczZatopiony funkcja wykorzystywana do zaznaczania zatopionego statku na planszy statek oznaczany jest na czarno a pola z nim sąsiadujące są wypełniane x 

zerowanieTablicy funkcja odpowiedzialna za wyczyszczenie tablic graczy, wywoływana z parametrem

Projekt został zrealizowany w języku java w postaci apletu z trzema wątkami w środowisku programistycznym NetBeans.  kod źródłowy gry + instrukcja

Klasy ABC

Celem projektu było zaimplementowanie struktury klas o zdefiniowanych polach i metodach na której mogą być wykonywane następujące operacje:


• dodawanie obiektu (tylko do liści)

• usuwanie obiektu (tylko z liści)

• modyfikacje obiektu (tylko z liści)

• zapis zbioru do pliku za pomocą strumieni

• odczyt zbioru z pliku za pomocą strumieni

• przeglądanie podzbioru obiektów


Z dowolnego węzła drzewa, wyświetlane mogą być tylko obiekty należące do liści, które z danego węzła dziedziczą, lub w przypadku liścia, jedynie obiekty do niego należące. Przechowywanie obiektów w pamięci, jak i wszystkie operacje na nich przeprowadzane są z wykorzystaniem listy kierunkowej. W tym celu zaimplementowano poniższe klasy:


Klasa ListaABC jest abstrakcyjną klasą, z której dziedziczą inne klasy implementujące listy kierunkowe. Zawiera deklaracje podstawowych metod (wyświetl, dodaj, usun,

modyfikuj, pokaz, zapisz, wczytaj) do obsługi elementów na liście.


Klasa Lista<Typ> dziedziczy metody z klasy ListaABC i posiada następujące pola protected: int Ilosc jest to ilość elementów na liście; ListMember<Typ> *Pierwszy, wskazuje na pierwszy element listy; string NazwaKlasy, nazwa klasy oraz kolejno pola public:

· Lista(string nazwa) czyli konstruktor listy

· Lista(string nazwa) czyli konstruktor listy

· ~Lista() czyli destruktor listy

· Typ* znajdz(string nazwa) odpowiada za wyszukiwanie elementów na liście

· int odczytajIlosc() zwraca ilość elementów na liście

· void usunWszystko() usuwa wszystkie elementy z listy

· string wyswietl() wyświetla nazwy wszystkich elementów listy w postaci łańcuchu znaków, w którym kolejne klasy i obiekty oddzielone są znakami nowej linii i tabulacją

· bool dodaj(string nazwa) dodaje nowy element do listy

· bool usun(string nazwa) usuwa element z listy

· bool modyfikuj(string nazwa, string pole) modyfikuje pole obiektu

· void pokaz(string nazwa) wyswietla szczegółowe dane o elemencie

· bool zapisz(fstream &plik) zapisuje elementy z listy do pliku

· bool wczytaj(fstream &plik) wczytuje elementy ze strumienia na listę


Klasa ListMember<Typ> zawiera pola: Typ *Dane będące wskaźnikiem do bloku danych obiektu typu Typ; ListMember *Nastepny będące wskaźnikiem do następnego

elementu, jeżeli wskazuje na NULL, oznacza to że dany element jest ostatni; ~ListMember będące destruktorem elementu listy oraz ListMember(Typ *obiekt, ListMember<Typ> *nastepny) będące konstruktorem elementu listy, gdzie obiekt to wskaźnik na dane obiektu, a nastepny to wskaźnik na następny element na liście. 


Wszystkie operacje na klasach mogą być wykonywane za pomocą poniższych komend:

· CD [nazwa węzła(klasy)] - zmiana węzła w strukturze

· MO [obiekt] - tworzy obiekt o nazwie "obiekt" dla bieżącego liścia

· DO [obiekt] - usuwa obiekt o nazwie "obiekt" dla bieżącego liścia

· MDO [obiekt] - modyfikacja obiektu o nazwie "obiekt" dla bieżącego liścia

· DIR - wyświetla informacje o nazwach obiektów widocznych z danego poziomu

· SHOW [obiekt] - wyświetla szczegółowe informacje o obiekcie

· SAVE - zapis do pliku

· READ - odczyt z pliku

· TREE - wyświetla strukturę klas

· HELP - pomoc programu

· EXIT - zakończenie programu

Na powyższym rys. struktura relacji klas, projekt został stworzony w całości w języku c++.  kod źródłowy + pliki instalacyjne

Pizzarito

Celem projektu było stworzenie prostego i intuicyjnego w obsłudze programu do składania zamówień w pizzerii. Możliwy miał być wybór gotowej pizzy z MENU lub

stworzenie własnej kompozycji. W skład zestawu miał wchodzić rodzaj ciasta pizzy, maksymalnie 10 dodatków do niej, oraz napój. Gotowe kompozycje i lista składników są

przechowywane w plikach. Po złożeniu zamówienia, skład wybranej pizzy zapisywany jest do pliku pod podaną nazwą. Możliwe jest dodawanie nowych i usuwanie już istniejących elementów w bazie danych.


Dodawanie nowego zamówienia

W pierwszej części użytkownik ma możliwość złożenia nowego zamówienia – i jest to główny cel całego zadania. Dodanie nowego zamówienia odbywa się etapowo. Po

pierwsze użytkownik decyduje, czy zamawiana jest gotowa konfiguracja pizzy (czyli określona pozycja w MENU pizzerii), czy może własna kompozycję. Jeżeli pizza ma być

wybrana z menu, to użytkownik dokonuje wyboru konkretnej pozycji z MENU i na koniec podaje nazwę do pliku, pod którym ma zostać zapisany skład wybranej pizzy.

Jeżeli natomiast ma zostać utworzona własna kompozycja, to wyświetlane są kolejno listy z rodzajami ciast, ze składnikami oraz napojami. Użytkownik ma wówczas możliwość wyboru poszczególnych składników. Należy pamiętać, że można wybrać jedynie jeden rodzaj ciasta i jeden napój, podczas gdy ilość składników może wynosić maksymalnie 10. Poza tym, użytkownik ma możliwość powrotu od jednego etapu do drugiego – to znaczy np. po zaznaczeniu ciasta i składników, powrót do wyboru ciasta. Po zatwierdzeniu decyzji, użytkownik podaje nazwę pliku, pod którym ma zostać zapisany skład pizzy i plik ten zostaje zapisany. Zamówienia zapisywane są w folderze programu: /data/orders.


Zarządzanie bazą danych

Celem drugiej części programu jest ułatwianie użytkownikowi zarządzania całą bazą danych – czyli listą ciast, dodatków, napoi oraz pozycjami w MENU pizzerii. W tym przypadku użytkownik wybiera najpierw z menu poziomego jedną z kategorii to zarządzania: MENU pizzerii lub składniki (przez składniki rozumie się rodzaje ciast,

dodatki, napoje). Dla każdej kategorii dostępne są opcje przeglądania, dodawania nowego elementu i usuwania wybranego elementu. Przy czym dla składników

wyróżniono podział na ciasta, napoje i dodatki – i dla nich wyświetlane są odpowiednie listy. Operacje przeglądania są podobne dla wszystkich przypadków, gdyż wymagają jedynie wyświetlenia zawartości bazy danych w formie listy. Podobnie operacje usuwania – polegają na wyświetleniu listy, zaznaczeniu konkretnego elementu i

potwierdzeniu operacji usunięcia. Natomiast procedura dodawania nowej pizzy do MENU różni się od procedury dodawania nowego składnika (ciasta, dodatku lub napoju). W przypadku pizzy, należy bowiem wyświetlić kolejno listy ciast, dodatków i napoi i umożliwić użytkownikowi wybór elementów z tych list, oraz poprosić o podanie nazwy dla tej pizzy. Gdy dodaje się nowy składnik schemat operacji jest prostszy – wystarczy jedynie wybrać kategorię (ciasta, dodatki, napoje), podać nazwę oraz cenę i zatwierdzić swój wybór.


Przyjęto 4 możliwe parametry wejściowe dla programu:

· nowe_zamowienie – program przechodzi od razu w tryb dodawania zamówienia, nie

wyświetlając menu, po dodaniu zamówienia wyłącza się

· nowe_zamowienie+ - program przechodzi od razu w tryb dodawania zamówienia,

nie wyświetlając menu, ale po dodaniu zamówienia powraca do menu programu

· zarzadzanie - program przechodzi od razu w tryb zarządzania , nie wyświetlając

menu, po zakończeniu pracy w tym module, program kończy działanie

· zarzadzanie+ - przechodzi od razu w tryb zarządzania , nie wyświetlając menu, ale po

dodaniu zamówienia powraca do menu programu


Opis interfejsu

Nawigacja w programie jest dość intuicyjna i opiera się o następujące klawisze:

· Strzałki góra – dół: wybór pozycji w wyświetlonym menu lub liście,

· strzałki lewo – prawo: przechodzenie między etapami w trakcie dodawania nowego zamówienia,

· Enter – zatwierdzenie wyboru,

· Spacja - podczas wybierania składników, użycie Spacji oznacza zaznaczenie (podświetlenie) pojedynczego składnika.


Menu

Dodaj nowe zamówienie – możliwość wyboru pozycji z menu lub stworzenie własnej kompozycji.

Zarządzaj menu – przeglądanie, dodawanie i usuwanie pozycji w menu, wyświetlenie i modyfikacja listy aktualnych składników.

O programie – wyświetlenie informacji o autorach.

Wyjście - wyjście z programu.

Przy tworzeniu programu wykorzystano biblioteki pdcurses w wersji 3.2.

kod źródłowy + pliki instalacyjne

Space shooter

Opis projektu

Celem projektu było napisanie trójwymiarowej gry komputerowej, wykorzystującej urządzenie mobilne do sterowania oraz wyświetlania elementów interfejsu użytkownika. Gra polega na sterowaniu statkiem kosmicznym i unikaniu oraz niszczeniu przeszkód w formie asteroid. Ponadto, gra posiada tryb dla dwóch graczy. W takim trybie do obszaru gry jest dodany dodatkowy obiekt: większy, stacjonarny, statek. Zadaniem pierwszego gracza jest obrona dodanego statku. Drugi gracz stara się zniszczyć dodany statek. Sterowanie ruchem statku polega na wykorzystaniu sensorów w urządzeniu mobilnym (głównie akcelerometru). Statek nieustannie porusza się do przodu, dane uzyskane z sensorów służą do zmiany kierunku poruszania się w przestrzeni. Strzelanie oraz zmiana prędkości są zrealizowane przez dotknięcie ekranu w określonych miejscach. Elementy interfejsu użytkownika prezentowane na ekranie urządzenia mobilnego: wartość punktów trafień statku gracza, prędkość statku oraz reprezentacja graficzna przycisku umożliwiającego oddawanie strzałów. 

Komunikacja

Komunikacja między urządzeniem mobilnym a komputerem wykorzystuje standard Bluetooth lub połączenie sieciowe. Komunikacja podczas gry dwuosobowej wykorzystuje połączenie sieciowe. Dane są przesyłane w pakietach o podanej strukturze: Pole Rozmiar pola Opis pola Nagłówek 1 bajt Określa typ wiadomości wysyłanej w pakiecie i sposób interpretacji danych Rozmiar 1 bajt Określa rozmiar przesyłanych danych Dane 0-255 bajtów Dodatkowe dane wiadomości.  Pakiety wysyłane z urządzenia mobilnego zawierają m.in. dane odczytane z sensorów i informację, czy „przycisk” odpowiedzialny za strzelanie jest „wciśnięty”. Aplikacja komputerowa wysyła dane, które powinny być wyświetlane w interfejsie użytkownika, np. aktualną wartość punktów trafień. Dane wymieniane między instancjami aplikacji podczas gry

wieloosobowej zawierają głównie informacje o aktualnych pozycjach graczy. 


Wykorzystane technologie

Urządzenie mobilne działała pod kontrolą systemu Android, część mobilna aplikacji jest napisana w języku Java. 

Aplikacja desktopowa została napisana w języku C#, wyświetlanie trójwymiarowej grafiki zostało zrealizowane w XNA. 

Do komunikacji sieciowej  wykorzystano bibliotekę Enet.

kod źródłowy gry + pliki instalacyjne

Doradca finansowy

1. Cel projektu.

Celem projektu było stworzenie systemu eksperckiego, ułatwiającego podejmowanie decyzji finansowych.


2. Środowisko pracy.

Projekt został wykonany i przetestowany w systemie Windows Vista/Windows 7. Bazę wiedzy stworzono w języku CLIPS, przy użyciu systemowego edytora tekstu. Interfejs graficzny systemu ekspertowego zaimplementowano w języku Java, w środowisku NetBeans IDE 6.7. Integrację między bazą reguł a GUI zapewnia interfejs CLIPSJNI. Projekt został przetestowany dla wersji Java 1.6.0_14.


3. Opis działania systemu.

Celem działania systemu eksperckiego Doradca finansowy jest pomoc użytkownikowi w wyborze sposobu oszczędzania lub zadłużenia. Ogólny schemat działania został opisany poniżej.


Na początku system uzyskuje informacje o wieku użytkownika. Jeżeli osoba jest niepełnoletnia, system wypisuje komunikat i kooczy działanie. W przeciwnym wypadku następują pytania odnośnie dochodów i wydatków użytkownika. Gdy w bazie wiedzy zgromadzone zostaną fakty odnośnie bilansu finansowego użytkownika, następuje wybór ścieżki postępowania:

w przypadku gdy bilans jest zerowy, system kooczy działanie,

jeśli łączne wydatki są większe niż dochody, system przejdzie do pytao związanych z kredytem,

jeżeli dochody są większe od wydatków, system przejdzie do pytao związanych z inwestycjami.


Sugerując kredyt, Doradca będzie zadawał pytania odnośnie oprocentowania i typu kredytu. W przypadku inwestycji, system najpierw zweryfikuje czy użytkownik jest typem ryzykanta. Następnie, zależnie od odpowiedzi, mogą nastąpid pytania o to, czy użytkownik potrafi grad na giełdzie lub pytania związane z doborem lokaty. Ostatecznie system zaproponuje użytkownikowi konkretne rozwiązania, lub wyświetli komunikat o niemożności pomocy.


4. Podręcznik użytkownika.

Aby uruchomić system ekspercki należy dwukrotnie kliknąć myszką na ikonę pliku doradca.jar. W górnej części okna programu, wyświetlany jest komunikat lub pytanie, w zależności od stanu w jakim znajduje się system. W dolnej części okna znajduje się przycisk do nawigacji, z napisem Nastepne. Aby przejść do następnego pytania należy wcisnąć ten przycisk. Po udzieleniu odpowiedzi przez system, na przycisku pojawi się napis Restart. Wówczas jego wciśnięcie spowoduje ponowne uruchomienie Doradcy i przejście do pierwszego pytania. Użytkownik może odpowiadać na zapytania systemu w dwojaki sposób. Jeśli w środkowej części okna programu pojawi się pole tekstowe (biały prostokąt z wpisanym „0”), należy wówczas wpisać wartość liczbową, większą od 0. System nie przejdzie do następnego pytania dopóki, dopóty wartość będzie mniejsza lub równa 0. W niektórych pytaniach nie zostanie wyświetlone pole tekstowe ale lista wyboru. Lista wyboru to co najmniej dwie opcje (linijki tekstu). Przed każda opcją widnieje okrąg. Aby zaznaczyć opcję z listy, należy na nią kliknąć (na napis lub okrąg). Na liście opcji można zaznaczyć tylko jedną pozycję. System nie przejdzie do następnego pytania dopóki, dopóty nie zostanie wybrana jakaś opcja. 


Jeżeli wystąpiłby błędy podczas uruchamiania programu należy upewnić się, czy w zmiennej środowiskowej PATH znajduje się wpis do folderu bin Javy (np. C:\Program Files (x86)\Java\jre6\bin), oraz ścieżka dostępu do biblioteki CLIPSJNI.dll (np. C:\Program Files (x86)\CLIPSJNI\).


5. Źródła danych.

Baza danych kredytów została utworzona na podstawie danych ze strony http://www.bankier.pl/fo/kredyty/narzedzia/zestawienie. Pominięto jednak minimalną i maksymalną kwotę na jaką możliwe jest zaciągnięcie kredytu.

Baza danych lokat powstała w oparciu o http://www.bankier.pl/fo/lokaty/narzedzia/lokaty

W przypadku funduszy inwestycyjnych, wybrano kilka z plasujących się na najwyższych pozycjach w notowaniach serwisu http://www.fundusze24.pl


How to cope with stress

how_to_cope_with_stress.pdf

Muzeum

Projekt stworzony w środowisku programistycznym .NET Visual Studio wykorzystującym biblioteki OpenGL  

 kod źródłowy + pliki instalacyjne

Sala sztuki współczesnej, strzałki (chodzenie)

Panorama, klawisze pg up/pg up (spojrzenie w górę/dół)

Sala sztuki antycznej, klawisze q/a (obrót faraona)

Sala sztuki współczesnej, spacja (zapalenie/zgaszenie światła)