WY SZA SZKO A INFORMATYKI I ZARZ DZANIA Z SIEDZIB W RZESZOWIE Inteligentne Systemy Autonomiczne Projekt: Gotowa aplikacja: AITamagotchi do dalszej rozbudowy Prowadz cy: mgr Daniel Jachyra Wykonawca: Mariusz Chru cielewski nr alb. 39233 6IIZ, GL03 Rzeszów, 2011 r.
SPIS TRE CI 1. Za enia projektowe... 3 1.1 Cele projektu... 3 1.2 Pierwotne za enia projektowe... 3 1.3 Zmienione za enia projektowe... 3 2. Wykonane prace:... 4 2.1 Problemy przy realizacji pierwotnego celu... 4 2.2 Realizacja zmian zgodnych z uaktualnionymi za eniami... 4 2.2.1 Poprawki w programie... 4 2.2.2 Rozwini cia programu... 5 3. U yte technologie... 8 4. Dalszy rozwój aplikacji... 8 5. Wnioski... 8
1. ZA ENIA PROJEKTOWE 1.1 CELE PROJEKTU ównymi celami projektu by o poznanie technologii C# z XNA Game Studio oraz prymitywnej sztucznej inteligencji zaimplementowanej w grze któr wybra em do rozwoju. Realizacja tych celów odbywa- a si poprzez rozbudow i popraw istniej cej gry Tamagotchi. Podczas pracy nad poprawkami i dodatkami trzeba zapozna si z ca ci kodu i wywnioskowa z niego zale no ci i interakcje. Krok ten pozwala w dobrym stopniu pozna technologi w jakiej pracujemy. 1.2 PIERWOTNE ZA ENIA PROJEKTOWE Pocz tkowo za enia mia y obejmowa dodanie dodatkowego zwierz tka do gry, zaprojektowanie interakcji pomi dzy zwierz tkami i dodanie dodatkowych funkcjonalno ci dla u ytkownika, które umo liwia yby opiek nad dwoma pieskami. Za enia te ze wzgl dów wymienionych w rozdziale 2.1 oraz po konsultacji z prowadz cym zosta y zmienione na nast puj ce w kolejnym rozdziale. 1.3 ZMIENIONE ZA ENIA PROJEKTOWE W efekcie nieudanych prób wykonania dodatkowego zwierz tka, po konsultacji z prowadz cym stworzone zosta y nowe za enia projektowe. W pracy swojej zaj mia em si popraw funkcjonowania aplikacji. Podczas prób wykonania pierwszych za zauwa em, e aplikacji pomimo swego pozornego dzia ania generuje wiele b dów i nieprawid owo ci. Mianowicie nie zmienia y si pory roku, dnia, godziny, e by o wy wietlanie logów itp. Dodatkowo postanowi em oprócz cz ci naprawczej wykona cz rozwojow, czyli doda do gry elementy poprawiaj ce jej wizualne i interakcyjne aspekty. Dodana zosta a mo liwo zabawy z pupilem oraz funkcjonalno wy wietlaj ca na niebie cia o niebieskie adekwatne do danej pory dnia w dzie s ce, w nocy ksi yc.
2. WYKONANE PRACE: 2.1 PROBLEMY PRZY REALIZACJI PIERWOTNEGO CELU Podczas prac nad projektem, zmianie uleg y za enia projektowe. Pocz tkowo zaj mia em si dodaniem dodatkowego zwierz tka do gry i zaprojektowaniem interakcji pomi dzy nimi. Niestety po wielu próbach i konsultacji z prowadz cym, okaza o si, e sposób napisania aplikacji uniemo liwia skuteczne dodanie dodatkowego zwierz tka. Jest to w ko cu Tamagotchi, które z za enia ma jedno zwierz tko. Problemy jakie napotka em na tym etapie, to system dzia ania aplikacji, mianowicie: - mózgiem zwierz tka steruje klasa Tamagotchi, przy czym konkretne zwierz tko nie ma swojego mózgu, klasa steruje samodzielnie a zwierz tko jest tylko wy wietlaczem - aplikacja steruje ruchem poprzez komunikacj z klas XNAChannel, w którym to ruchy zale ne s od komend otrzymywanych za po rednictwem klasy XnaChannelCommands od Tamagotchi. - ca jest bardzo ci le ze sob powi zana, i dodanie zwierz tka zako czy o si niestety niepowodzeniem. Podczas ostatniej próby, doda em zwierz tko, przerobi em kod programu do momentu, kiedy to klasa tamagotchi sterowa a zwierz tami naprzemiennie, efekt: pies nr 1 idzie do miski, pies nr 2 pije z miski, pies nr 1 idzie nad jezioro, pies nr 2 pije z jeziora. 2.2 REALIZACJA ZMIAN ZGODNYCH Z UAKTUALNIONYMI ZA ENIAMI 2.2.1 POPRAWKI W PROGRAMIE Podczas pracy z projektem wykonano wymienione poni ej poprawki w dostarczonej aplikacji: Poprawiono algorytm odczytu aktualnej daty i czasu. Aplikacja podczas uruchomienia pobiera dat systemow, wy wietla j w oknie Core i oknie gry. Nast pnie aplikacjia porusza zegarem z przyspieszeniem (1 sekunda to ok. 3 minuty w grze). Gra b dnie pobiera a dat (nie pobiera a jej wcale). Aplikacja aktualizowa a godzin, dat oraz por roku tylko w formularzu Core. Okno gry nie regowa- o na zmian czasu Kolejna poprawka wi e si ci le z powy sz, skoro gra nie pobiera a prawid owo daty i godziny, to równie jej nie aktualizowa a. Zaimplementowany zosta mechanizm, który na bie co aktualizuje czas i dat na której pracuje okno gry Ai_Dog. Gra nie zmienia a pór dnia oraz pór roku. Zawsze by dzie oraz wiosna. By o to zaimplementowane w kodzie na sta e co mo e wiadczy o pomy ce programistów. Do czony zosta mechanizm odczytuj cy aktualn dat i wg niej ustawiaj cy por roku. Analogicznie realizowane jest to z godzin i po- dnia. W zale no ci od pory roku powinien pada deszcz lub nieg. Gra nieodpowiednio wy wietla a rodzaj opadu oraz b dnie wypisywa a akcje w formularzu. Na li cie logów pojawia a si informacja, e pada deszcz a na ekranie widzieli my nieg, itp Poprawione zosta o równie wy wietlanie listy logów w formularzu Tamagotchi Core. Podczas dodawania logów lista nie przewija a si do ostatniego (najnowszego) wpisu. Skutkowa o to brakiem wygody podczas ledzenia informacji o zwierz tku. Dodano obs ug przewijania do ostatniej linii. Praca wykonana przy tym punkcie sk ada a si w 90% w odnalezieniu miejsca gdzie dany kod jest generowany a nast pnie umieszczeniu odpowiedniej instrukcji dotycz cej komponentu.
Ostatnim punktem jest dodanie mo liwo ci zamkni cia ca ej gry poprzez zamkni cie okna logów. Poprzednio aby zamkn gr nale o zamyka okna po kolei, w tym momencie zamkni cie okna logów zatrzymuje w tek dzia ania gry i zamyka okno aplikacji. 2.2.2 ROZWINI CIA PROGRAMU W ramach rozbudowy aplikacji postanowi em doda mo liwo zabawy z psem, w celu powi kszenia jego wska nika zadowolenia. Poprzednio by o to realizowane poprzez nakarmienie psa s odyczami. Moim zdaniem dodanie klawisza zabawy zwi kszy interakcj u ytkownika z gr i zmusi go do pewnego wysi ku przy wychowaniu swojego Tamagotchi. Zabawa zosta a zrealizowana na zasadzie paska post pu który b dzie rós w zale no ci od ilo ci klikni i mala je eli u ytkownik zaprzestanie klikania. Przej cie paska w ca ci doda zwierz tku dodatkowy punkt zadowolenia. Od strony technicznej zrealizowane zosta o to na podstawie klawisza i ProgressBar a z obs ug czasu, który cofa pasek post pu je eli u ytkownik zaprzestanie klikania. Kod poni ej: private void pobaw_sie_button_click(object sender, EventArgs e) { if (progressbar1.value >= 100) { tamagotchi.statistics.satisfaction.level++; progressbar1.value = 0; } else if (progressbar1.value + 4 > 100) { progressbar1.value = 100; } else { progressbar1.value += 4; } } private void timer1_tick(object sender, EventArgs e) { zegar++; if (zegar >= 10 && progressbar1.value > 0) { progressbar1.value--; zegar = 0; } Invalidate(); }
Drug dodan funkcjonalno ci jest ruch s ca/ksi yca po niebie. Dodaje to lepszego wygl du aplikacji i zwi ksza jej walory estetyczne. Prace wykonane przy tej funkcjonalno ci wymaga y zaimplementowania funkcji matematycznej ustalaj cej trajektoria ruchu s ca lub ksi yca. Dodatkowo zaimplementowa em obliczanie d ugo ci dnia i dostosowywanie do tej d ugo ci szybko ci ruchu po niebie, aby uzyska efekt wschodzenia zachodzenia s ca. Dodatkowo w zale no ci od pory dnia widzimy s ce lub ksi yc. Do wyznaczenia trajektorii lotu u ywa em programu wykresie (narysowanie odpowiedniej paraboli). Efekt widoczny poni ej jest po czeniem okna w nocy i okna w dzie. Ostatni funkcj by o ustawienie s ca/ksi yca w odpowiednim miejscu podczas startu aplikacji je li jest 15 to jest po po udniu wi c s ce nie powinno startowa od zera. Zrealizowane zosta o to przez odpowiednie sprawdzanie d ugo ci dnia w danym miesi cu roku oraz obliczanie czasowych opó nie ruchu s ca/ksi yca w taki sposób aby ca y ruch trwa tyle co pora dnia. Zosta o to zrealizowane z pewnym marginesem b du, poniewa opó nienia czasowe nigdy nie s takie same (kod raz wykonuje si szybciej, raz wolniej). Efekt jednak e jest zadowalaj cy mamy ruchome cia- o niebieskie. Kod wykonuj cy dzieli si na cz obliczaj (osobny w tek uruchamiany podczas startu aplikacji) i instrukcj rysuj wewn trz p tli Draw. Kod cz ci rysuj cej: public void ruch_slonca(){ while (Form1.zamykanie == false) { if (environment_moj.partofday == "dzie " //sprawdzanie pory dnia environment_moj.partofday == "poranek"){ //oraz obliczanie this.daylenght =( //pozosta ego czasu EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 0] - EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 0]) * 60 + (EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 1] - EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 1]);
this.dayleft = ( Time.CurrentTime.Hour * 60 + Time.CurrentTime.Minute) - (EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 0] * 60 + EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 1]); slonce = Content.Load<Texture2D>("slonce"); this.float_x = ((this.dayleft * 800) / this.daylenght; //x slonca this.spij = (((this.daylenght - 2) * 1000) / 2400); //opó nienie if (this.float_x < 800) { this.float_x += 1.0f; } else { this.float_x = 0; } this.float_y = (float)(0.001 * //obliczanie y s ca (float)math.pow(this.float_x - 400, 2)) + 5; Thread.Sleep(this.spij); } else if (environment_moj.partofday == "noc" environment_moj.partofday == "wieczór") { this.daylenght = 1440 - (EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 0] - EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 0]) * 60 + (EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 1] - EnvironmentCore.sun[Time.CurrentTime.Month - 1, 0, 1]); this.dayleft = ( Time.CurrentTime.Hour * 60 + Time.CurrentTime.Minute) - (EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 0] * 60 + EnvironmentCore.sun[Time.CurrentTime.Month - 1, 1, 1]); slonce = Content.Load<Texture2D>("ksiezyc"); this.float_x = ((this.dayleft * 800) / this.daylenght; this.spij = (((this.daylenght - 2) * 1000) / 2400); if (this.float_x < 800) { this.float_x += 1.0f; } else { this.float_x = 0; } this.float_y = (float)(0.001 * (float)math.pow(this.float_x - 400, 2)) + 5 Thread.Sleep(this.spij); }}} Rysowanie ogranicza si do prostej instrukcji zgodnej z standardem XNA: spritebatch.draw(slonce, new Vector2(this.float_x, this.float_y), Color.White);
3. U YTE TECHNOLOGIE Aplikacja AI Dog napisana by a w C# z u yciem technologii XNA Game Studio i.net Framework 4.0. Cytuj c twórców wad tego rozwi zania jest to, e na niektórych komputerach trzeba zainstalowa Microsoft.NET Framework 4.0. Podczas pracy korzysta em wi c z wymienionych wy ej technologii oraz Visual Studio 2010. J zyk C# i VS by y mi ca kiem dobrze znane, aczkolwiek XNA Game Studio by o technologi do now, co wymaga o ode mnie nauczenia si kilku potrzebnych rzeczy. Szczególne problemy sprawi o mi adowanie obrazów do tekstur poza obszarem LoadContent, co jednak uda o si rozwi za. 4. DALSZY ROZWÓJ APLIKACJI Aplikacja mo e by ci gle rozwijana. Skoro ustalili my, e dodanie nowego zwierz tka jest niewykonalne lub bardzo trudne, my e kolejnym krokiem rozwoju mog oby by dodanie menu powitalnego, w którym u ytkownik wybra by jakie zwierze chce wychowywa. Nale oby stworzy odpowiedni grafik kilku zwierz t oraz ich legowisk (dla psa buda, dla kota legowisko, dla ptaka klatka). Zmianie uleg yby wtedy ró nice w parametrach przydatno ci konkretnej akcji (dla psa zabawa na drzewie jest ma o wa na (0.2) ale dla kota mog aby by wa niejsza lub bardzo wa na (0.8). Nie s to oczywi cie za enia atwe do zrealizowania ale mog sta si podwalin pod dalszy rozwój programu 5. WNIOSKI ównym wnioskiem jaki nasun mi si podczas pracy z projektem, by o u wiadomienie sobie jak wa na jest dokumentacja przy projektach. Wa rzecz jest równie przejrzyste projektowanie aplikacji, ywanie krótkich i tre ciwych nazw zmiennych i metod oraz projektowanie aplikacji z wizj pó niejszych zmian. Gdyby do AI Dog do czona by a obszerna dokumentacja kodu i dzia ania, praca nad projektem by aby o wiele szybsza i atwiejsza. Niestety bez dokumentacji, musia em domy la si który kod odpowiada za któr funkcjonalno. Odszukiwanie tych relacji i po cze by o jedn z najbardziej czasoch onnych czynno ci.