Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Proiecte » Devlogs » Construirea unui joc Tower Defense generic cu XNA




Pagina 1 din 1 [ 1 ]

Mesaj Info autor
    Postat la 17 Jun 2011 18:31:06    Subiect: Construirea unui joc Tower Defense generic cu XNA
Paul_Iancu97 info:

Paul_Iancu97:

Salutari , am decis sa particip si eu la concursul curent de pe acest site , chiar daca n-am nici o sansa , pt. a imi extinde experienta ca programator si sa vad cum este sa realizezi un joc intr-un termen limita ca cei de la companiile mari.Am decis sa fac un devblog in care sa arat progresele mele in acest proiect tuturor de pe site.

Iunie 2011 , 17
Pana acum nu m-au interesat jocurile de tip tower defense , mai mult eram adeptul platformer-elor , action RPG , turn-based RPG , hack n slashurilor si altele.Am inceput documentatia jucanduma cateva jocuri tower defense pe internet si ce am observat este ca toate sunt concentrate in jurul GUI cu foarte multe butoane.Asa ca am scris o clasa numita Button.cs care va fi baza tuturor butoanelor din joc . Clasa arata asa:
Cod sursă:
class Button
    {
        Rectangle rectangle;
        Texture2D currentTex;
        Texture2D image1;
        Texture2D image2;
        Texture2D image3;
        public Vector2 position;
        public bool clicked;

        public Button(Texture2D tex1 , Texture2D tex2 ,Texture2D tex3, Vector2 pos)
        {
            image1 = tex1;
            image2 = tex2;
            image3 = tex3;
            currentTex = image1;
            position = pos;
            rectangle = new Rectangle((int)position.X,(int)position.Y,tex1.Width,tex1.Height);
            clicked = false;
        }

        public void Update()
        {
            MouseState mouse = Mouse.GetState();
            Rectangle mouseRec = new Rectangle((int)mouse.X, (int)mouse.Y, 5, 5);
            if (mouseRec.Intersects(rectangle))
            {
                currentTex = image2;
                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    clicked = true;
                    currentTex = image3;
                }
            }
            else
            {
                currentTex = image1;
            }

        }

        public void Draw(SpriteBatch sp)
        {
            sp.Begin();
            sp.Draw(currentTex,position,Color.White);
            sp.End();
        }

    }


Dupa acea am construit o clasa numita StartMenuScreen.cs care are la baza trei butoane Play , Options si Exit. Butonul Options inca nu face nimic , butonul Exit va incheia executia jocului iar butonul Play va afisa o mica harta pe ecran , generata de clasa TileMap.cs , un inamic , generata de clasa Enemy.cs si un buton Back care te va trimite inapoi la meniu.Inamicul , un punct alb , va naviga prin cararea dintre blocurile harti pana la sfarsit . Acest lucru este posibil datorita proprietati din clasa Enemy.cs numita facing care in functie de valoarea ei (dreapta , stanga , sus , jos ) inamicul se va duce in acea directie . Directia inamicului poate fi schimbata daca inamicul intra in coliziune cu unele din blocurile din listele de blocuri ale clasei TileMap.cs . De exemplu daca inamicul va intra in coliziune cu unul dintre blocurile din lista blocksLeft atunci directia inamicului va fi stanga.Asta este ce am facut eu pt. astazi si va voi tine la curent cu progresele mele in continuare.

Aici este un link pt. a descarca fisierul executabil al primei parti din acest joc:
http://code.google.com/p/tower-defense-wip/downloads/list
(s-ar putea sa aveti nevoie de Visual Studio si de update-urile la timp ale platformei .NET)

Ultima editare efectuată de Paul_Iancu97 pe 17 Jun 2011 20:24:29; 2 editări în total


Status:
Înregistrat pe:
21 Dec 2010 20:08:18
Vârsta: 15 ani
Mesaje: 47
Locatie:
Programator junior

 
    Postat la 20 Jun 2011 13:52:40    Subiect: < fara subiect >
nekosan info:

nekosan:

Are nevoie doar de runtime-ul XNA 3.0, pe care il va instala setup-ul daca nu exista pe calculator.

Legat de clasa de buton, e mai simplu sa iti faci o clasa buttonmanager care administreaza toate butoanele de pe un ecran.

Cel mai simplu e sa iti scrii propriile evenimente, pe care sa le atasezi butoanelor (sau oricarui alt control), asa o sa ai nevoie doar sa atasezi evenimentul onclick sau onmouseover (sau ce vrei tu) oricarui buton.

buton.OnClick += fa ceva;
buton.OnMouseOver += fa altceva;

vezi un exemplu aici:
http://xna-uk.net/blogs/randomchaos/archive/2008/04/29/generic-xna-wiring-your-own-events.aspx

Ti-am rulat si jocul. Arata bine pana acum

Spor la joc

Nu conteaza de unde vi, ci incotro te indrepti.


Status:
Înregistrat pe:
23 Oct 2008 10:05:25
Vârsta: 27 ani
Mesaje: 106
Locatie:
Programator

 
    Postat la 25 Jun 2011 14:37:13    Subiect: < fara subiect >
Paul_Iancu97 info:

Paul_Iancu97:

Iunie 2011 , 25

Am mai facut niste progrese de data trecuta dar mai intai as vrea sa-i multumesc lui nekosan pt. acel tutorial care ma ajutat sa inteleg mai bine principile de programare in C# .
Am mai adaugat la joc interfata grafica pt. pozitionarea tunurilor si logica necesara pt. rotirea lor in functie de pozitia inamicului.
Aici este fisierul executabil :
http://code.google.com/p/tower-defense-wip/downloads/detail?name=Tower%20Defense%20WIP2.rar&can=2&q=#makechanges


Status:
Înregistrat pe:
21 Dec 2010 20:08:18
Vârsta: 15 ani
Mesaje: 47
Locatie:
Programator junior

 
    Postat la 26 Jun 2011 12:48:52    Subiect: < fara subiect >
nekosan info:

nekosan:

Incepe sa arate tot mai bine.

Concentreaza-te pe gameplay si functionalitate si lasa finisarile artistice la urma. Adica, fa-ti turetele, sistemul de upgrade (daca o sa poti face upgrade la turete), coliziunile, un meniu de baza de unde poti cumpara si plasa turete pe harta, o clasa ce iti incarca nivelele, daca o sa faci mai multe nivele, si doar dupa ce iti merge totul concentreaza-te pe cum o sa arate turetele, dusmanii, animatiile si exploziile + sistemul de particule, daca o sa ai. De obicei dezvoltatorii indie pierd o groaza de timp cu finisarile artistice, in loc sa se concentreze pe functionalitate si gameplay. Bineinteles, sunetul tot la final o sa vina.

Vad ca turetele tale urmaresc dusmanul pe toata harta. Cam prin toate jocurile de genul se foloseste un sistem simplu bazat pe coliziunea intre cercuri. Punctul de coliziune al dusmanului e un cerc in jurul lui. Punctul de coliziune al turetei e cercul de actiune al turetei (asta ti-l arata orice joc towerdefense, si de obicei cand faci upgrade ai arme mai puternice si ti se mareste si cercul de actiune). Deci tot ce trebuie sa faci e sa verifici cand cele 2 cercuri sunt in coliziune (dusman si tureta) si atunci DOAR intorci tureta dupa dusman si poti trage in el.

In imaginea de mai jos, cu galben e raza de actiune a turetei. Cu rosu, e cercul de coliziune al dusmanului. Dusmanul poate sa aiba orice forma, dar pentru testarea coliziunilor e mult mai simplu si mai "ieftin" sa faci o simpla verificare daca 2 cercuri se intersecteaza. Ti-am desenat si raza, pentru ca de fapt ca sa verifici coliziunile intre cercuri ai nevoie doar de centrul cercurilor(care e pozitia turetei sau a dusmanului in cazul tau) si raza lor (care ti-o setezi tu manual in functie de cum doresti).



Spor la treaba

Ultima editare efectuată de nekosan pe 26 Jun 2011 12:51:05; 1 editări în total

Nu conteaza de unde vi, ci incotro te indrepti.


Status:
Înregistrat pe:
23 Oct 2008 10:05:25
Vârsta: 27 ani
Mesaje: 106
Locatie:
Programator

 

Pagina 1 din 1 [ 1 ]


Server time: 08:01:51 22.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved