vineri, 8 iunie 2012

Jumpy Pants (XNA GAME)

Deci eu am creat un joc pentru proiectul meu de diplomă. Jocul se numește "Jumpy Pants". Este creat folosind C# și XNA Framework.

Genul jocului este Arcade. Personajul nostru principal fuge și se ferește de obstacole care îi apare în timp ce fuge. Cu cît mai departe omulețul nostru fuge cu atît el începe să fugă mai repede și să te ferești de obstacole devine din ce în ce mai greu.

Toate acestea se acompaniază împreună cu 4 cîntece, dintre care 2 cântă atunci când e ziua și 2 atunci când e noaptea.
Jocul are pînă când doar un singur mod de joacă activ și anume acela despre care pînă acum v-am zis. Modul de joacă se numește "Run Forever".


Puteți observa pe următorul screenshot:
Screen 1  

În viitor eu voi face și celelalte 2 moduri de joacă, dar pînă atunci jucați-vă doar în modul "Run Forever".

În acest mod de joc vor fi 2 Power Up-uri.
1                       2 

Primul power up vă va încărca viața personajului;
Al doilea power up vă va scădea viteza de fugă a personajului.

Notă: Al doilea power up va fi doar o dată în tot jocul, adică după ce îl veți folosi, mai multe nu vor mai apărea pînă nu se termină jocul.

Personajul nostru va avea de tot 4 șanse, pentru a supravețui în joc cât mai mult. (Screen 2)
Screen 2

În Screen 2 sunt arătate toate cele 4 șanse de supravețuire.

Jocul arată în felul următor:
Day Mode
Night Mode

Iar aici este un video cu demonstrația jocului:


Specificațiile minime pentru rularea jocului:

CPU:  Dual-Core Processor with 2.5 GHz
Video Card:  Jocul va merge începînd de la NVIDIA Seria 7 și mai sus cu rezoluția 1280x720
HDD: 60 Mb după instalare
OS: Windows XP/Vista/7 with .NET Framework 4 and XNA Redistributable 4 Refresh installed

Link la joc: JumpyPants.zip

Dezarhivați acel fișier cu extensia .zip și citiți README.txt pentru a afla instrucțiunile de instalarea jocului.

vineri, 18 mai 2012

Tutorialul 3: Inamici și Coliziuni

    Astăzi voi lămuri cum să adăugați încă un lucru pe ecran și cum să detectăm dacă există între aceste 2 lucruri coliziune. Pentru tutorialul de azi veți avea nevoie de această imagine. Puteți adăuga altă imagine dacă doriți, eu voi lămuri după această imagine. Vom folosi Proiectul precedent pentru acest tutorial.
Inamic

     După ce ați scos acea imagine sau ați ales alta, faceți același lucru ca și în tutorialul precedent. La Content click drept/Add/Existing Item și gata imaginea e aruncată în proiectul nostru.






    Acum adăugăm următoarele rînduri de cod:

1. În clasa Game1.cs scrim din nou:
      Texture2D enemyTexture;
       Vector2 enemyPosition;

2. În metoda LoadContent() scrim:
       enemyTexture = Content.Load<Texture2D>("Enemy1Animation_faza2");
       enemyPosition = new Vector2(200, 200);

După cum ați observat noi adăugăm inamicul nostru la fel cum am adăugat și pe eroul nostru din tutorialul precedent. Acum noi îl vom desena., pentru aceasta facem la fel ca și în tutorialul precedent.
Ne ducem la metoda Draw() și adăugăm următorul cod mai sus decât spriteBatch.Draw(textura, pozitie, Color.White):

       spriteBatch.Draw(enemyTexture, enemyPosition, Color.White);

Acum apăsăm F5 și vedem ce s-a primit.

Observăm că inamicul nostru s-a desenat și că se află în spatele jucătorului nostru. Voi deja vă întrebați de ce așa să primit. Pentru ca să înțelegeți mai bine, făceți următorul lucru:

spriteBatch.Draw(enemyTexture, enemyPosition, Color.White);
Acest cod mutați să fie după  spriteBatch.Draw(textura, pozitie, Color.White); și apăsați F5.


Observăm deja că inamicul nostru se află deasupra eroului nostru. Asta înseamnă că atunci când vă apucați să desenați trebuie să gândiți în felul următor, că ceea ce se apelează mai sus se află în urmă la ceea ce se apelează în jos.

    Ok, noi putem mișca eroul nostru și putem trece prin inamic, dar asta e tot, mai mult nimic nu se întîmplă și ce fel de joc este ăsta, dacă nu se întîmplă nimic dacă trece prin inamic. Haideți să facem să fie puțin mai înteresant. Vom face ca ecranul nostru albastru să-și schimbe culoarea dacă eroul nostru se va atinge de inamic. Pentru aceasta vom face următoarele lucruri:

 - Vom crea o variabilă globală de tip bool:
               bool isCollision;
    După aceea în metoda Initialize() vom scrie ca variabila noastră să fie falsă.
               isCollision = false;
 - Acum noi vom trebui să creăm 2 dreptunghiuri folosind clasa Rectangle, care vor folosi pozițiile eroului și inamicului nostru și vom verifica dacă ele se interesectează. Și dacă ele se vor intersecta noi vom da variabile noastre boolene true și ecranul se va colora în culoarea roșie, iar atunci când dreptunghiurile nu se vor intersecta, ecranul nostru va fi de culoare albastru deschis.
Pentru a face toate astea noi ne vom duce mai întâi la metoda Update() și vom scrie următoarele rânduri de cod:

            Rectangle playerRect = new Rectangle((int)pozitie.X,
                                                                            (int)pozitie.Y,
                                                                            textura.Width,
                                                                            textura.Height);

            Rectangle enemyRect = new Rectangle((int)enemyPosition.X,

                                                                            (int)enemyPosition.Y,
                                                                            enemyTexture.Width, 
                                                                            enemyTexture.Height);

            if (playerRect.Intersects(enemyRect))
            {
                isCollision = true;
            }
            else
            {
                isCollision = false;
            } 
       

Și ne ducem acum la metoda Draw(), găsim:

GraphicsDevice.Clear(Color.CornflowerBlue);

Și modificăm cum asta:

            if (!isCollision)
                GraphicsDevice.Clear(Color.CornflowerBlue);
            else
                GraphicsDevice.Clear(Color.Red);

Acum apăsăm F5 și vedem ce se va întîmpla.

     Observăm că atunci când ajungem să ne atingem de inamic, ecranul nostru se schimbă în culoarea roșie.

Tutorialul a luat sfârșit. Pentru a înțelege mai bine ce-i cu clasa Rectangle și cu   GraphicsDevice.Clear(), vă recomand următoarele link-uri:
 
Clasa Rectangle
GraphicsDevice.Clear()

Link-ul la proiectul modificat cu tutorialul acesta se află în acest link

miercuri, 16 mai 2012

Tutorialul 2: Încărcarea unei imagini și mișcarea lui.

Notă: Resursele pentru acest proiect veți găsi la sfârșitul postului. Veți avea nevoie de aceasta imagine pentru tutorialul acesta.

    Ok, începem tutorialul nr. 2. Deschide proiectul creat din tutorialul 1 și am promis că voi lămuri toate acele 5 metode. Pentru ca să înțelegeți mai bine cum lucrează uitați-vă la următoarea imagine:
     Prima metodă pe care o vedeți în fișierul Game1.cs este Initialize(), aceasta este folosită pentru inițializarea sau instanțierea obiectelor pe care le vom folosi în jocul nostru.
A doua metodă este LoadContent(), această metodă este folosită pentru încărcarea în memorie a tuturor imaginilor, sunetelor și altele.
A treia metodă este Update(), această metodă e cea în care voi veți sta cel mai mult timp pentru a face ca în jocul vostru să se întîmple o acțiune, adică aici se află cea mai mare parte din toată logica jocului.
A patra metodă e Draw(), aici noi îi arătăm ce să desene nouă în jocul nostru și în ce poziție să fie.
A cincea metodă e UnloadContent(), această metodă se activează atunci când noi ieșim din joc, după idee dacă voi ați încărcat totul ce vă trebuie în LoadContent(), atunci voi nu aveți nevoie de acest UnloadContent(), dar dacă să spunem ați pus în Update să încarce o imagine sau un sunet sau altceva, atunci acesta va trebui de descărcat în metoda UnloadContent().

Notă: Metodele Initialize() și LoadContent() se apelează doar la începutul Jocului, adică doar atunci când abia se pornește.

      Observați în imaginea de mai sus că Update() și Draw() se află într-un loop, acel loop nu este făcut degeaba acolo. În engleză el este numit "Game loop". Ce este un Game loop?
Un Game loop este o buclă care se repetă de 60 de ori pe secundă între metoda Draw() și Update(). Adică jocul se deseană de 60 de ori pe secundă și modifică ceva în joc, dacă ați scris ceva în metoda Update(). Acest Game loop nu poate fi închis atîta timp cât voi singur nu-l veți închide sau pînă când PC-ul vostru nu va avea BSOD. :)

     OK, v-am dat puțină teorie, acum trecem la practică. În clasa Game1 declarăm 2 variabile:

              Texture2D textura;
      Vector2 pozitie;

Texture2D este folosit pentru încărcarea imaginilor în dînsul și desenarea acesteia în joc.
Vector2 este folosit pentru poziționarea imaginii pe ecranul jocului.
Înainte ca să încărcăm imaginea în textura noastră, noi va trebui mai întâi s-o includem în proiectul nostru. Pentru aceasta facem în felul următor:

Click drept pe Proiectul care are in paranteze scris (Content) și după aceea Add>Existing Item. După aceea luăm imaginea link la care am pus la începutul postului.

Mai departe ne ducem în metoda LoadContent() și scrim următoarea:

            textura = Content.Load<Texture2D>("testpants");

Test Pants


Ok, ce se întîmplă aici? Aici noi încărcăm imaginea noastră în textura. Pentru aceasta noi am apelat metoda care se află în Content, am scris ce tip de lucru dorim să încărcăm <Texture2D> și denumirea acelui lucru "testpants". Observați că nu am scris extensia imaginii aici, de aceasta nu este nevoie din cauză că XNA automat știe tipul acelui fișier și ne ușurează viața prin aceea că doar trebuie să scrim denumirea fișierului.
     Notă: Faceți click o dată pe imaginea încărcată și observați mai joc Proprietățile acesteia. Atunci când încărcați un lucru din content, trebuie să fiți foarte atent la numele din "Asset Name", deoarece că XNA citește lucrurile din content prin intermediul acelui "Asset Name" și când încărcați, trebuie să scriți denumirea asset-ului.

Ok, acum ne ridicăm puțin mai sus la metoda Initialize() și scrim următoarea:
           
                                  pozitie = new Vector2(0, 0);

Aici noi am instanțiat variabila nostră pozitie și am scris că poziția inițială a X = 0 și Y = 0.
Ok acum noi ne ducem în metoda Draw() și scrim următoarea:

              spriteBatch.Begin();
         spriteBatch.Draw(textura, pozitie, Color.White);
         spriteBatch.End();

Ce facem noi aici și ce-i cu spriteBatch-ul ăsta, vă întrebați voi. spriteBatch este un obiect al clasei SpriteBatch, dacă mai pe scurt de lămurit, atunci spriteBatch este folosit pentru aceea ca să transmitem card-ului nostru grafic informația pe care acela trebuie s-o prelucreze și să afișeze pe ecran, adică să ne afișeze imaginea noastră, care a fost încărcată în textura noastră.
Notă: Dacă doriți o lămurire mai voluminoasă vă recomand să accesați acest link.

    După ce am scris toate acestea apăsăm F5 și vedem ce s-a primit.

 Observăm că s-e afișează imaginea în joc. Jocul nostru oricum încă nu seamănă la un joc din cauză că noi nu facem nici o acțiune aici. Pentru aceasta ne ducem în metoda Update() și scrim:

             if (Keyboard.GetState().IsKeyDown(Keys.Up))
            {
                pozitie.Y -= 4f;
            }
       if (Keyboard.GetState().IsKeyDown(Keys.Down))
            {
                pozitie.Y += 4f;
            }
       if (Keyboard.GetState().IsKeyDown(Keys.Left))
            {
                pozitie.X -= 4f;
            }
       if (Keyboard.GetState().IsKeyDown(Keys.Right))
            {
                pozitie.X += 4f;
            }

pozitie.X = MathHelper.Clamp(pozitie.X,

                                     0, 
GraphicsDevice.Viewport.Width - textura.Width);


pozitie.Y = MathHelper.Clamp(pozitie.Y,
                                     0, 
GraphicsDevice.Viewport.Height - textura.Height);
 

Aici noi am scris cod pentru modificare poziției imaginii noastre, dacă noi apăsăm pe una din tastele Sus, Jos, Stânga, Dreapta de pe tastatură, iar cu ajutorul la MathHelper.Clamp(), noi nu-i dăm voie imaginii noastre să iese înafara ecranului din joc.

OK, acum apăsăm F5 și încercăm să mișcăm imaginea noastră pe ecran.
Ura! Totul lucrează așa cum am scris în metoda Update().
Pentru a înțelege mai bine ce-i cu Keyboard și Keys recomand să accesați aceste link-uri:
LINK Keyboard
LINK Keys

Dacă ceva nu a mers la voi așa cum trebuie sau aveți erori și nu înțelegeți de ce, v-am aruncat AICI link la proiectul care l-am făcut în tutorialul acesta.

În următorul tutorial vom adăuga inamici și vom face Coliziune dintre personajul nostru și inamic.

marți, 15 mai 2012

Tutorialul 1: Crearea unui proiect XNA, depanarea acestuia.

Notă: Se presupune că deja știți limbajul C#... Dacă nu, atunci vă propun acest site pentru a face cunoștință cu acest limbaj.

   Dacă încă nu a-ți scos de aici tool-urile necesare pentru dezvoltarea unui joc, vă recomand să faceți aceasta chiar acum. Ok, trecem mai departe.
   Pentru ca să creați un proiect nou pentru jocul nostru faceți în felul următor: File>New>Project


Aici deja alegeți XNA Game Studio 4.0 și Windows Game. După aceea dați o denumire proiectului vostru și apasăm OK.
   După ce proiectul s-a creat, observăm că s-a deschis automat Game1.cs, iar acolo vedem 5 metode:
  1. Initialize
  2. LoadContent
  3. UnloadContent
  4. Update
  5. Draw 
Cu dînsele noi ne vom lămuri mai târziu, acum apăsați F5, pentru ca să pornim jocul nostru.

Dacă la voi apare același ecran albastru la fel ca și în screenshotul de mai sus, atunci proiectul s-a depanat cu succes. În următorul tutorial voi lămuri cum să încărcați o imagine în proiectul vostru și să-l mișcați pe ecran folosind butoanele de pe tastatură.

XNA Framework. Ce-i asta și cum se mănîncă.

       Sunt sigur că mulți din voi au dorit să încerce să facă un joc sau măcar să încerce să vadă cum e asta să creezi un joc al tău. Microsoft a o soluție pentru aceasta și această soluție e XNA.
Ce este XNA?
       XNA este o extensie pentru framework-ul .NET, care ne permite cu ușurință să creăm jocurile noastre. Acolo sunt încapsulate o mulțime de metode și formule matematice, care ne permit să ne concentrăm mai mult asupra jocului decât asupra codului pe care trebuie să-l scrim.





 Unde se folosește XNA?
      Acest framework e folosit pentru dezvoltarea jocurilor Windows Phone, XBOX360 și Windows, însă cel mai mult XNA este folosit pentru dezvoltarea jocurilor Windows Phone.


Ce limbaj suportă XNA?
      XNA suportă atît C# cât și Visual Basic, însă framework-ul nu suportă C++, măcar că el este OOP, la fel ca și C# și VB. Desigur persoanele care știu foarte bine C++ pot liber să se apuce să programeze jocul lor, numai că ei vor avea mai mult de scris pentru a face un simplu joc, decât acei care scriu jocul folosind XNA. C# este un limbaj pur OOP (Object Oriented Programming), care se află la un nivel mai înalt decât C++ și dacă știți deja C++, C# va fi foarte ușor de înțeles, din motiv că C# se aseamănă foarte mult cu C++.



Dacă el e așa de bun, atunci de ce mulți îmi spun să încep dezvoltearea jocurilor în C++?
      Desigur că e mai bine de început să dezvoltați jocuri în C++, el e mult mai bun din motiv că puteți controla fiecare bit de memorie care jocul vostru va folosi și veți avea mult mai multă putere asupra card-ului grafic din PC-ul vostru decât în XNA. 
Framework-ul XNA este făcut pentru acei ce doresc să dezvolte jocuri pentru Windows Phone sau pentru acei care pur și simplu doresc să înțeleagă bazele creării unui video joc. 

Cât mă costă să încerc acest XNA?
   E FREE!! Puteți chiar acum accesa acest link și să scoate-ți tool-urile necesare pentru dezvoltarea jocurilor în XNA. Pe acel link este și un tutorial făcut de Microsoft. Mai târziu voi face și eu câteva tutoriale aici pentru cei ce nu au înțeles tutorialul din acel link sau pentru cei cui îi lene să asculte de acolo.

marți, 4 ianuarie 2011

Mouse A4Tech XL-760H Blue Spider

Azi voi scrie despre un gaming mouse denumirea căruia o vedeți sus. Azi m-am dus la un salon de calculatoare și l-am cumpărat. După ce l-am despachetat, l-am unit în PC, apropo acesta trebuie unit prin USB-port, am instalat driverele necesare, care erau pe discul din pachet. Primul lucru care l-am observat la dânsul e că este foarte comfortabil, măcar că e de o marime medie, undeva de 8 cm lungime și 5 cm lățime, însă nu știu cât de comfortabil fi pentru persoanele stângace, NU, nu este deloc comfortabil, nu recomand oamenilor stângaci. A4Tech XL-760H Blue spider are design ergonomic, palma și degetele se aranjează foarte ușor pe mouse. Acest mouse are de tot 7 butoane. De tot are 6 moduri DPI și anume  600 - 800 -  1200-1600 - 2000 - 3600 DPI, toate acestea pot fi schimbate la dorință. Dacă să vorbim obiectiv, acest este destul de convinabil pentru oricine, este bun, e făcut calitativ și sper că se va pâstra mult timp. :))
Asta este totul ce pot spune despre acest mouse. Mai jos este un video, în care se vede clar unboxing la acest mouse.
Vizionare plăcută :))

marți, 28 decembrie 2010

Jolicloud. Un nou sistem de operare revoluționar

Salut la toti.
A venit vacanta de iarna, azi afara e asa de frumos, totul e asa de curat si alb, dar eu nu despre timpul afara am venit sa scriu, ci despre "Jolicloud". Este un sistem de operare nou, care lucreaza la baza lui linux, iar daca de vorbit mai concret, la baza lui Ubuntu. Acest sistem de operare initial a fost creat pentru acele persoane care fac tot lucrul in internet, lucreaza, creaza diferite proiecte, se joaca, converseaza prin internet si multe altele, toate acestea impreuna se numeste "Cloud computing". Deja foarte mult timp s-s discutat la aceasta tema si desigur programatorii au descoperit foarte multe facilitati in asa numitul Cloud computing .
Dupa cum stiti Google deja au scos in lume un SO, care lucreaza prin asa numitul Cloud computing , insa el este proiectat doar pentru Netbook. Aici apare Jolicloud. Un sistem de operare, care la fel foloseste Cloud computing, dar plus la aceasta el da posibilitatea celor care se folosesc de Microsoft Windows s-o poata instala la dansii la calculator fara a pierde datele ale Windows-lui si a permite un dualboot intre Jolicloud si Windows. Eu cand am vazut aceasta, deodata am scos si am vrut sa probez, sa simt pe propria piele "Ce este aia Cloud computing?". Primul lucru care m-o mirat este ca nu este nevoie sa inscrii pe vreun CD Jolicloud, deodata pornesti acel fisier de tip .exe si acolo merge pur si simplu un meniu cu intructiuni, am ales unde doresc sa se salveze Jolicloud, mi-am ales partitia de pe HDD pe care nu o foloseam, iar dupa ce am asteptat totul sa se copie, Setup-ul m-a rugat frumos sa fac restart la calculator ca dupa aceea la meniul de boot-are sa aleg Jolicloud si sa continuie instalarea si configurarea SO-lui. Dupa ce Jolicloud a terminat de instalat si configurat, mi s-a deschis un meniu de logare, unde deja m-am logat cu username-ul meu si parola pe care am alcatuit-o, pe urma mi-a cerut sa ma inregistrez la Jolicloud, m-am inregistrat si gata, Jolicloud este gata de lucru. Aici sunt multe aplicatii interesante si o gramada folositoare.
In concluzie pot spune:

Jolicloud este un sistem de operare revolutionar, care foloseste Cloud computing si se recomanda doar utilizatorilor care TRAIESC in internet :) si celor care sunt utilizatori avansati in lucru cu internetul.