Windows modern application na primeru jednostavne igre

Nakon dugo godina vladavine windows forms aplikacija sa pojavom Windows 8 i 8.1 sa novim korisničim interfejsom pod kodnim imenom metro design, zvanični naziv je Modern UI. U razgovoru sa Branimirom došli smo na ideju da napravimo jednu windows 8.1 aplikaciju i kroz jednostavan primer istražimo i upoznamo tehnologiju. Ideja je bila da napravimo jednostavnu igru koja bi radila na windows 8 operativnom sistemu. U pitanju je pojednostavljena verzija klasika Space Invaders. Cilj nam je bio upoznavanje sa novom tehnologijom i njenim mogućnostima, tako da nam nemojte zameriti što igra nije bolja.

Instalacija Visual Studio Express 2013

Primer je napravljen korišćenjem Visual Studio Express 2013 koji je besplatan i sasvim dovoljan za razvoj ovakve igre i demonstraciju nove tehnologije kroz njen razvoj. Napomenućemo da je sa Express 2013 verzijom moguće raditi kompletan razvoj u komercijalne svrhe, npr. može se napraviti aplikacija i postaviti za prodaju na Windows Store-u. Setup možete preuzeti ovde, sam proces instalacije je jednostavan.

Installation VS 2013 Express - Start

VS 2013 Express – Start installation

Installation VS 2013 Express - Finish

VS 2013 Express – Finish installation

 

 

 

 

 

 

 

 

 

 

Nakon uspešno završenih instalacija bilo je potrebno odabrati “pravac” u razvoju modernih aplikacaija za windows 8 (8.1): Javascript, HTML, CSS ili C#, XAML. Pod pretpostavkom da XAML nudi bolje performanse grafike odlučili smo se za C# i XAML.

U međuvremenu nas je Microsoft obradovao odlukom da Visual Studio Professional postane besplatan pod novim imenom Visual Studio Community.

Space Invaders

Sada bi bilo u redu da se posvetimo malo više samoj igri.

Igru čine jedan vanzemaljac (invader) koji se kreće odozgo na dole i brod (space ship) koji se kreće levo desno i ima mogućnost pucanja. Cilj je da ubijemo vanzemaljca, tj. pogodimo ga metkom pre nego što stigne do broda.

Igru je moguće igrati na dva načina:
1. korišćem tastature (tasteri za navigaciju – gore, dole, levo, desno)
2. dodirom (gestures), naravno ukoliko je podržano na uređaju

Test

Splash screen

Početni ekran igre

Početni ekran igre

Struktura klasa (The game engine)

Entiteti koji čine igru  su brod, metak, vanzemaljac, pravougaonik po kome se kreću brod i vanzemaljac. Osnovna klasa je klasa Game.cs koja upravlja igrom, kreira učesnike igre, vodi računa o tome da li je igra startovana/završena. U njoj se nalazi metoda Loop(), game loop je uobičajan patern u programiranju igara i može se naći u većini igara, više o ovom paternu možete pročitati ovde. Za dinamičnost igre potreban nam je timer, koji smo implementirali u klasi Timer.cs. Startovanjem igre pokreće se timer koji zove Loop() metodu u određenom vremenskom intervalu. Svaki od učesnika igre je odgovoran za svoje stanje. Stanje kontrolišu i menjaju njihove Update() metode, koje se pozivaju u game loop-u. U našem slučaju učesnike igre definišu tri klase Invader.cs, Bullet.cs, Ship.cs koje nasleđuju apstraktnu klasu Sprite.cs. U Loop() metodi proveravamo i da li je igra završena, metoda CheckStatus().  Kada metak pogodi vanzemaljca ili vanzemaljac stigne do broda pre nego metak do njega, zaustavlja se timer, označava se kraj igre i prikazuje se odgovarajuća poruka.

        public void Loop()
        {
            _ship.Update();
            _invader.Update();
            _bullet.Update();

            GameStatus gameStatus = CheckStatus();

            if (gameStatus == GameStatus.EnemyCrashedIntoSprite)
            {
                timer.Stop();
                Window.Current.CoreWindow.KeyDown -= KeyboardHandler;
                Message = "Game over!";
                gameOver();
            }

            if (gameStatus == GameStatus.BulletCrashedTheEnemy)
            {
                timer.Stop();
                Window.Current.CoreWindow.KeyDown -= KeyboardHandler;
                Message = "Your are the winner! :)";
                gameOver();
            }
        }

Gestures

Jedan od intresantnijih i izazovnih delova u igri bio je implementacija gestures (mogućnost igranja na touchescreen ekranu, dodirom). Ovo je bila novina za mene i nije bilo tako jednostavno implementirati jer je logika nešto drugačija od onoga na šta sam navikao.


        rectangle.ManipulationMode = ManipulationModes.All;
        rectangle.ManipulationDelta += rectangle_ManipulationDelta;
        rectangle.Tapped += rectangle_Tapped;

        void rectangle_Tapped(object sender, TappedRoutedEventArgs e)
        {
            SetDirectionX = 0;
            Fire();
        }

        public void rectangle_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            StopSprite = false;
            SetDirectionX = Math.Sign(e.Delta.Translation.X) * 2 * Utility.ATOM_SIZE;
        }

Kompletan source code možete naći našem github repo u folderu InvadersWin8.

Sledeći korak bio bi mogućnost igranja naše igre na mobilnom uređaju (windows phone 8, 8.1) kao i razvoj nešto kompleksnije igre za windows 8, 10.

 

Pages:

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>