Videogames Laboratory

O συναρπαστικός κόσμος της ανάπτυξης βιντεοπαιχνιδιών

Hello Pong: φτιάχνοντας ένα παιχνίδι σε 10 λεπτά, μέρος 1ο

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιουλίου 3, 2009

Συνειδητοποίησα το εξής: σκοπός του blog αυτού είναι να δείξει μερικά πράγματα σχετικά με την ανάπτυξη βιντεοπαιχνιδιών (και μερικές αρχές τριδιάστατων γραφικών) και όχι να διδάξει προγραμματισμό ή κάποια γλώσσα προγραμματισμού. Για το λόγο αυτό, θα αναστρέψω την μέχρι τώρα προσέγγιση μου, εστιάζοντας στη δημιουργία παιχνιδιών αντί της εκμάθησης C#. Θεωρώ ότι οι αναγνώστες του blog έχουν κάποια γνώση σχετικά με το προγραμματισμό γενικότερα, αρκετή για να ξεκινήσουμε την ανάπτυξη βιντεοπαιχνιδιών. Ό,τι εξειδικευμένη γνώση χρειάζεται πάνω στην C# θα την εξηγώ στην πορεία.

Οπότε σήμερα θα πάρουμε μια βαθιά ανάσα και θα κάνουμε μια βουτιά στα βαθιά φτιάχνοντας ένα πλήρες παιχνίδι σε XNA Game Studio. Στο κλασσικό προγραμματισμό, συνηθίζεται το πρώτο πρόγραμμα που αναπτύσσει κάποιος σε μια γλώσσα προγραμματισμού να τυπώνει την φράση “Hello World!” στην οθόνη. Στο κόσμο της ανάπτυξης βιντεοπαιχνιδιών (ιδιαίτερα με το XNA Game Studio), το αντίστοιχο πρώτο παιχνίδι είναι το Pong (που είναι και το παιχνίδι που ξεκίνησε την βιομηχανία βιντεοπαιχνιδιών).

Καταρχάς πρέπει, αν δεν το έχουμε κάνει ήδη, να εγκαταστήσουμε το XNA Game Studio. Από την σελίδα Creator’s Club κατεβάζουμε και εγκαθιστούμε πρώτα το Visual C# Express 2008. Οι οδηγίες προτείνουν να τρέξουμε και στην συνέχεια να κλείσουμε μια φορά το περιβάλλον της Visual C# πριν συνεχίσουμε την εγκατάσταση. Στην συνέχεια κατεβάζουμε και εγκαθιστούμε και το XNA Game Studio 3.1. Αν έχουμε ήδη τη προηγούμενη έκδοση του XNA Game Studio (3.0) θα πρέπει να την απεγκαταστήσουμε πριν την εγκατάσταση της νέας έκδοση. Τέλος τρέχουμε τη Visual C# και το είμαστε έτοιμοι να αρχίσουμε την ανάπτυξη.

Στο περιβάλλον την Visual C# επιλέγουμε από το μενού File/New Project.

Στο παράθυρο που ανοίγει επιλέγουμε ως τύπο project το XNA Game Studio 3.1, και το πρότυπο (template) Windows Game (3.1). Δίπλα σε αυτό μπορείτε να δείτε και πρότυπα για παιχνίδια ειδικά για Xbox360 και Zune. Αναφέρω απλά ότι ένα παιχνίδι που στοχεύει τα Windows δεν μπορεί να τρέξει σε Xbox360 (και το αντίστροφο) ακόμα και αν ο κώδικας είναι ο ίδιος. Αυτός είναι ο λόγος που υπάρχουν τα ειδικά templates για κάθε πλατφόρμα. Τέλος δίνουμε το όνομα Pong στο project και πατάμε το OK.

Η Visual C# έχει δημιουργήσει τώρα ένα σκελετό προγράμματος παιχνιδιού. Ο κύριος κώδικας του «παιχνιδιού» βρίσκεται στο αρχείο Game1.cs. Το παιχνίδι είναι έτοιμο να τρέξει και θα το κάνει αν πατήσουμε το F5, εμφανίζοντας μια μπλε οθόνη:

Για κάποιο λόγο το πρότυπο παιχνιδιού σε Windows θεωρεί ότι έχουμε συνδεδεμένο κάποιο χειριστήριο (controller) στον υπολογιστή και δεν υποστηρίζει έξοδο της εφαρμογής με κάποιο πλήκτρο (από το πληκτρολόγιο, πχ το Escape). Θα το διορθώσουμε αργότερα αυτό, προς το παρόν κλείστε το παράθυρο με το [x] πάνω-δεξιά.

Επιστρέφοντας στο Game1.cs και κοιτώντας το κώδικα που αυτό περιέχει κάνουμε αρχικά την παρατήρηση ότι όλος ο κώδικας του παιχνιδιού περιλαμβάνεται σε μια class με το όνομα Game1. To παιχνίδι που τρέχουμε είναι συνεπώς ένα αντικείμενο (object) τύπου Game1. Από το class Game1 μας ενδιαφέρουν αρχικά 3 μέθοδοι, οι LoadContent(), Update() και Draw().

Η LoadContent εκτελείται μια φορά κατά την έναρξη του παιχνιδιού. Χρησιμοποιούμε την μέθοδο αυτή για να φορτώσουμε από το δίσκο όλο το περιεχόμενο του παιχνιδιού όπως εικόνες (υφές), τριδιάστατα μοντέλα, ήχους. Βλέπουμε ότι εξ’ ορισμού η LoadContent δημιουργεί ένα αντικείμενο τύπου SpriteBatch. Αυτό θα το χρησιμοποιήσουμε αργότερα για να απεικονίσουμε εικόνες στην οθόνη.


protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);
    // TODO: use this.Content to load your game content here
}

Η δεύτερη σημαντική μέθοδος είναι η Update. Η μέθοδος αυτή καλείται 60 φορές το δευτερόλεπτο (εξ’ ορισμού) και κάνει όλες τις απαραίτητες ενημερώσεις στην λογική του παιχνιδιού, στην θέση και την κατάσταση των χαρακτήρων του, επεξεργάζεται την είσοδο από το πληκτρολόγιο ή το controller κλπ.


protected override void Update(GameTime gameTime)
{
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
      this.Exit();
    // TODO: Add your update logic here
    base.Update(gameTime);
}

Όταν θέλουμε να τραβήξουμε μια φωτογραφία στο πραγματικό κόσμο, μετακινούμε τα έπιπλα, τοποθετούμε τα άτομα στη σκηνή, τους λέμε να φτιάξουν τα μαλλιά τους, να χαμογελάσουν και να κάτσουν ακίνητα. Κατ’ αναλογία, στην μέθοδο Update τοποθετούμε κώδικα που στήνει το σκηνικό και όλα τα αντικείμενα της σκηνής και τα ετοιμάζει για φωτογράφηση. Αυτό είναι κάτι που κάνει η επόμενη μέθοδος, η Draw.

Στην Draw συμπεριλαμβάνουμε όλο το κώδικα που απεικονίζει τον κόσμο του παιχνιδιού στην οθόνη. Η Draw καλείται επίσης, αμέσως μετά την Update, 60 φορές το δευτερόλεπτο εξ’ορισμού (αυτό μπορούμε να το αλλάξουμε).


protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    // TODO: Add your drawing code here
    base.Draw(gameTime);
}

Μέχρι στιγμής η Draw δεν κάνει τίποτα άλλο από το να καθαρίζει το παράθυρο και θα θέτει το χρώμα του φόντου σε μπλε (Color.CornflowerBlue). Μπορείτε να αλλάξετε το χρώμα αυτό σε όποιο επιθυμείτε φυσικά (Color.Black, Color.Red κλπ).

Η αλληλουχία ενημέρωσης της κατάσταση του κόσμου του παιχνιδιού (Update) και της απεικόνισης του (Draw) ονομάζεται game loop (βρόχος παιχνιδιού), και υπάρχει σε όλα τα παιχνίδια, από το πιο απλό (Pong) μέχρι το πιο σύνθετο (Grand Theft Auto IV). Το game loop ιδανικά εκτελείται 60 φορές το δευτερόλεπτο για ρυθμό απεικόνισης (framerate) 60 Hz. Αν το παιχνίδι έχει πολλά και σύνθετα αντικείμενα με πολύπλοκη φυσική εξομοίωση και τεχνητή νοημοσύνη, ο ρυθμός απεικόνισης μπορεί να είναι (αρκετά) χαμηλότερος.

Πριν κλείσω την περιγραφή του σκελετού παιχνιδιού που δημιουργεί το XNA Game Studio πρέπει να κάνω μια αναφορά στα αντικείμενα GamePad και GraphicsDevice που βλέπουμε στο κώδικα. To XNA γενικώς χρησιμοποιεί αντικείμενα για να εκπροσωπήσει, και να δώσει πρόσβαση σε λειτουργίες τους, διάφορους πόρους της παιχνιδομηχανής. Το GamePad είναι ένα αντικείμενο που αντιπροσωπεύει το χειριστήριο που τυχόν έχουμε συνδέσει στη παιχνιδομηχανή (χρησιμοποιώ τον όρο με την γενική έννοια, συμπεριλαμβανομένου και τον υπολογιστή). Στο συγκεκριμένο παράδειγμα το χρησιμοποιούμε για να ρωτήσουμε την τρέχουσα κατάσταση του και να μάθουμε αν ο χρήστης έχει πατήσει κάποιο συγκεκριμένο κουμπί (το Back για την ακρίβεια). Για το πληκτρολόγιο το αντίστοιχο αντικείμενο είναι το Keyboard. Αντίστοιχα, το GraphicsDevice είναι ένα αντικείμενο που εκπροσωπεί το παράθυρο μέσα στο οποίο απεικονίζουμε το παιχνίδι. Η μέθοδος του Clear που καλούμε στο Draw καθαρίζει το παράθυρο και θέτει ως φόντο ένα συγκεκριμένο χρώμα.

Με γνώση του σκελετού του παιχνιδιού και των βασικών μεθόδων του, μπορούμε να προχωρήσουμε στην δημιουργία του παιχνιδιού Pong, κάτι που θα κάνουμε στο επόμενο άρθρο. Ως συνήθως σχόλια και απορίες είναι καλοδεχούμενα.

Δημοσιεύθηκε στο C#, XNA Game Studio, Ανάπτυξη βιντεοπαιχνιδιών, Προγραμματισμός | 5 σχόλια »

Σχόλια και χρήσιμα links

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιουλίου 2, 2009

Αν και αρκετά άτομα διάβασαν τα άρθρα για την εισαγωγή στην C#/XNA, παρόλα αυτά δεν έλαβα κανένα σχολιασμό πάνω σε αυτά. Πράγμα που σημαίνει ότι ο τρόπος γραφής και το επίπεδο των άρθρων ήταν είτε α) πολύ απλοϊκά και έκαναν του αναγνώστες να βαρεθούν β) πολύ δύσκολα οπότε έκαναν τους αναγνώστες να μπερδευτούν γ) ικανοποιητικά οπότε τους ωφέλησαν σε κάτι.

Τα άρθρα αυτά απαιτούν επένδυση χρόνου εκ μέρους μου για να τα γράψω και εκ μέρους των αναγνωστών για να διαβάσουν. Θα ήθελα λοιπόν να ξέρω ότι ο χρόνος και των δυο δεν πάει χαμένος και ότι κάτι αποκομίζουν οι αναγνώστες από αυτά. Για το λόγο αυτό ζητώ την άποψη σας για το ύφος, το περιεχόμενο και το επίπεδο δυσκολίας των άρθρων, έτσι ώστε να μπορέσω να τα προσαρμόσω ανάλογα. Καλωσορίζω οποιαδήποτε εποικοδομητική κριτική (θετική ή αρνητική)!

Επίσης μπορείτε να προτείνετε θέματα και μελλοντικά άρθρα. Τι θα θέλατε να δείτε στο blog αυτό;

Και για να πούμε και κάτι σχετικό με την ανάπτυξη βιντεοπαιχνιδιών, είμαι της άποψης ότι ο δημιουργός βιντεοπαιχνιδιών δεν πρέπει μόνο να εστιάζει μόνο στο προγραμματισμό τους, αλλά να έχει μια πολύ καλή γνώση της βιομηχανίας ανάπτυξης και των τεχνολογιών που αναπτύσσουν και χρησιμοποιούν οι εταιρίες. Πρέπει δηλαδή να αναζητά άρθρα με postportems παιχνιδιών για να δει τι προβλήματα και εμπόδια συναντούν οι εταιρίες, να διαβάζει τεχνικές παρουσιάσεις παιχνιδιών. Όπως για παράδειγμα τη πολύ καλή παρουσίαση του Red Faction: Guerrilla (μέρος 1, μέρος 2) ή Mass Effect 2. Ή τη σειρά άρθρων της Guardian για την φυσική στα παιχνίδια. Γνωστοί δημιουργοί παρέχουν πολλές φορές εκ των έσω γνώση για παιχνίδια.

Πολύ καλό περιοδικό που δίνει μια εκ των έσω οπτική της βιομηχανίας είναι το Game Developer. Μπορείτε να γραφτείτε συνδρομητές και να το λαμβάνετε σε pdf μορφή με ελάχιστα δολάρια. Το Edge είναι ένα περιοδικό που θα πρέπει να διαβάζει ο δημιουργός βιντεοπαιχνιδιών, έστω την ιστοσελίδα του. Το Gamasutra επίσης, ιδιαίτερα τα features και τα expert blogs του.

Ο δημιουργός βιντεοπαιχνιδιών δεν ζει σε γυάλα, πρέπει να είναι ενημερωμένος για τις εξελίξεις και για το τι συμβαίνει της βιομηχανία, ιδίως αν έχει ποτέ βλέψεις να ασχοληθεί επαγγελματικά με αυτή. Tώρα με το Internet, αυτό είναι ευκολότερο από ποτέ!

Δημοσιεύθηκε στο Ανάπτυξη βιντεοπαιχνιδιών, Βιομηχανία βιντεοπαιχνιδιών, Γενικά | 4 σχόλια »

Εισαγωγή στη C#/.NET μέρος 3ο

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιουνίου 29, 2009

Είχαμε ξεκινήσει σε προηγούμενα άρθρα μια εισαγωγή στην C# και στο .NET ως υπόβαθρο για την μετέπειτα χρήση του XNA Game Studio. Αρκετούς μήνες μετά συνεχίζουμε την περιήγηση μας στο κόσμο της C#.

Στο προηγούμενο άρθρο ως γνωριμία με την C# και το περιβάλλον του Visual C# Express 2008, είχαμε δημιουργήσει ένα απλό πρόγραμμα που εμφάνιζε μια πρόταση σε ένα παράθυρο. Σήμερα συνεχίζουμε με το πώς αναπαριστά και διαχειρίζεται η C# δεδομένα. Σκοπός αυτού του άρθρου δεν είναι η πλήρης και εξονυχιστική παρουσίαση της γλώσσας, μιας και κάτι τέτοιο θα μπορούσε να γίνει μόνο στα πλαίσια ενός βιβλίου.

Σε γενικές γραμμές η C#, όσον αφορά τις μεταβλητές και τους τύπους δεδομένων της, δεν διαφέρει δραματικά από γλώσσες όπως η Java και η C++. Κάποιος με εμπειρία σε άλλες (σχετικά σύγχρονες) γλώσσες θα βρεθεί σε ένα οικείο περιβάλλον κατά την ανάπτυξη ενός προγράμματος σε C#. Ξεκινάμε με μια γρήγορη ανασκόπηση των τύπων δεδομένων που υποστηρίζει η C#.

Μεταβλητές

Η C# υποστηρίζει τους παραδοσιακούς τύπους δεδομένων όπως int για ακέραιους αριθμούς, float για αριθμούς κινητής υποδιαστολής, string για κείμενο, char για χαρακτήρες. Επιπλέον υποστηρίζει του τύπους class και struct οι οποίοι επιτρέπουν στο χρήστη να ορίσει δικά του αντικείμενα.

Ο παρακάτω πίνακας περιλαμβάνει τους πιο κοινούς τύπους δεδομένων που χρησιμοποιούμε κατά το προγραμματισμό με C#

Τύπος Δεδομένα Παράδειγμα χρήσης
bool true ή false bool isRaining = false;
byte Ακέραιος αριθμός από 0 μέχρι 255 byte counter=4;
short Ακέραιος αριθμός από –32,768 μέχρι 32,767 short myNumber = -3442;
int Ακέραιος αριθμός 32 bit int largeNumber = 1234223;
double Αριθμός κινητής υποδιαστολής μεγάλης ακρίβειας double stockValue = 2342.23332;
float Αριθμός κινητής υποδιαστολής float exchangeRate = 233.23f;
char Χαρακτήρας ASCII 8 bit char myChar = ‘a’;
string Κείμενο string username = “Kostas”;

Μερικές παρατηρήσεις πάνω στους τύπους δεδομένων: Οι τύποι short και int έχουν παρόμοια χρήση, μόνο που ο int έχει μεγαλύτερο εύρος, δηλαδή μπορεί να αποθηκεύσει μεγαλύτερο εύρος (περισσότερους) αριθμούς από ότι ο short. Αυτό συμβαίνει γιατί μια μεταβλητής τύπου short χρησιμοποιεί 16 bit στην μνήμη ενώ μια int 32 bit. Το ίδιο ισχύει για τους τύπους float (32bit) και double (64bit). Ο χαρακτήρας f στο τέλος του αριθμού στο παράδειγμα για το τύπο float σηματοδοτεί ότι ο αριθμός αυτός είναι πράγματι τύπου float (και συνεπώς απαιτεί λιγότερο χώρο για να αποθηκευτεί). Τέλος ένας χαρακτήρας (char) ορίζεται με μονά εισαγωγικά και ένα κείμενο (string) με διπλά.

Class και αντικείμενα

Πέρα από αυτούς τους βασικούς τύπους δεδομένων, η C# υποστηρίζει και το τύπο class. H class μας επιτρέπει να ορίσουμε δικά μας αντικείμενα. Εν συντομία για όσους δεν γνωρίζουν τι είναι, ένα αντικείμενο σε μια αντικειμενοστραφή γλώσσα προγραμματισμού (όπως η C#, C++, Java κλπ), είναι μια οντότητα που χαρακτηρίζεται από δεδομένα και συμπεριφορά. Τα αντικείμενα αυτά έχουν άμεση αντιστοίχιση με αντικείμενα του πραγματικού κόσμου. Για παράδειγμα ένα αυτοκίνητο σε ένα παιχνίδι αγώνων ράλι χαρακτηρίζεται από το χρώμα του, το πόσες πόρτες έχει, την ταχύτητα του, την κατεύθυνση του, αν έχει ταχύτητες ή είναι αυτόματο, το ποσοστό ζημίας από τρακαρίσματα που έχει υποστεί. Αυτά είναι τα δεδομένα που περιγράφουν το αντικείμενο του αυτοκινήτου. Επιπλέον μπορούμε να ορίσουμε και κάποιες «λειτουργίες» που επιδρούν και διαχειρίζονται τα δεδομένα αυτά. Μια λειτουργία θα μπορούσε να είναι η «αλλαγή ταχύτητας». Μια άλλη «πάτημα γκαζιού». Οι λειτουργίες αυτές αλλάζουν τις τιμές των δεδομένων του αντικειμένου.

Στην C# το αντικείμενο του αυτοκινήτου μεταφέρεται ως


class Car
{
    private float speed;
    private int gear;

    public Car()
    {
        speed = 0;
        gear = 0;
    }

    public void IncreaseSpeed(float amount)
    {
        speed = speed + amount;
    }

    public void DecreaseSpeed(float amount)
    {
        speed = speed - amount;
    }

    public void ChangeGear(int newGear)
    {
        gear = newGear;
    }
}

Με το τρόπο αυτό ορίζουμε ένα νέο τύπο δεδομένων, το αντικείμενο Car το οποίο περιγράφει με απλοϊκό τρόπο μια οντότητα αυτοκινήτου και διάφορες λειτουργίες πάνω σε αυτό (με επίσης απλοϊκό τρόπο). To αντικείμενο περιλαμβάνει 2 μεταβλητές speed και gear περιέχουν την τρέχουσα ταχύτητα και ταχύτητα (δεν είναι φοβερά τα νέο-ελληνικά όσον αφορά τους τεχνολογικούς όρους;) του αυτοκινήτου, συναρτήσεις (μεθόδους) για αύξηση και μείωση της ταχύτητας και μια ειδική μέθοδο (Car()) τη οποίας την ύπαρξη θα εξηγήσω σε λίγο.

Για να ορίσουμε ένα αυτοκίνητο με βάση το πρότυπο αυτό το δηλώνουμε ως εξής:


Car audiQuattro;

Η παραπάνω δήλωση δημιουργεί μια μεταβλητή τύπου Car, αλλά δεν δεσμεύει μνήμη για το αντικείμενο αυτό καθ’αυτό. Αυτό πρέπει να γίνει ως εξής:


audiQuattro = new Car();

Ο τελεστής new δεσμεύει όση ακριβώς μνήμη χρειάζεται για να αποθηκευτεί ένα αντικείμενο τύπου Car. Το audiQuattro είναι τώρα ένα νέο αντικείμενο τύπου Car. Για να αλλάξω τις ιδιότητες (μεταβλητές) του νέου αυτοκινήτου καλώ απλά τις μεθόδους του:


audiQuattro.ChangeGear(1);
audiQuattro.IncreaseSpeed(20);

Παρατηρούμε ότι οι μεταβλητές δηλώνονται ως private και οι μέθοδοι ως public. Σε ένα αντικείμενο, οτιδήποτε δηλώνεται ως private δεν είναι ορατό και προσπελάσιμο εκτός του αντικειμένου. Αντίθετα, οτιδήποτε δηλώνουμε ως public είναι. Για παράδειγμα η παρακάτω χρήση δεν είναι επιτρεπτή:


audiQuattro.speed = 15.0f;

Αυτό συμβαίνει γιατί η speed έχει δηλωθεί ως private. Ο μεταγλωττιστής της C# δεν θα επιτρέψει την ολοκλήρωση της δημιουργίας του εκτελέσιμου κώδικα και θα επισημάνει το λάθος.

Ο χαρακτηρισμός private/public δεν ανήκει αποκλειστικά σε μεταβλητές/μέθοδους αλλά σε οτιδήποτε περιέχει ένα αντικείμενο. Θα μπορούσε για παράδειγμα η μεταβλητή speed να είναι public.

Τέλος θέλω να αναφερθώ στη μέθοδο Car(). Η μέθοδος αυτή, που έχει πάντα το ίδιο όνομα με το class που τη περιέχει ονομάζεται constructor και καλείται πάντα όταν δεσμεύουμε μνήμη για ένα αντικείμενο του αντίστοιχου τύπου με τη χρήση του τελεστή new. Σκοπός της είναι η αρχικοποίηση του αντικειμένου δίνοντας για παράδειγμα κάποια αρχική τιμή στις μεταβλητές του. Στο συγκεκριμένο παράδειγμα τη χρησιμοποιούμε για να θέσουμε αρχικές τιμές 0 στις μεταβλητές speed και gear (κάτι που δεν είναι απολύτως απαραίτητο, καθώς γίνεται αυτόματα όπως θα δούμε σε άλλο άρθρο).

Εκτός της class, η C# υποστηρίζει τη δημιουργία νέων τύπων δεδομένων με τη χρήση της struct. Η struct είναι παρόμοια σε χρήση με τη class, διαφέρει όμως σε μερικά σημεία τα οποία θα αναλύσουμε σε επόμενο άρθρο.

Ανακεφαλαιώνοντας, η C# υποστηρίζει βασικούς τύπους δεδομένων (primitive types), όπως ο int, short, char κλπ, και πιο σύνθετους όπως η class (reference types). Μια βασική διαφορά τους είναι ότι ένα βασικό τύπο μπορώ να τον ορίσω απευθείας:


int value = 22;

ενώ ένα πιο σύνθετο τύπου (class) πρέπει να χρησιμοποιήσω το τελεστή new για να δεσμεύσω μνήμη για αυτό:


Car fiat = new Car();

Αυτή η διαφορά έχει μεγάλη επίπτωση στη χρήση τους και σε τι είδους μνήμη αποθηκεύονται, κάτι που έχει με την σειρά του επίπτωση στην ανάπτυξη βιντεοπαιχνιδιών με το XNA Game Studio.

Η σύντομη αυτή αναφορά στους τύπους δεδομένων της C# μόλις που άγγιξε την επιφάνεια. Στο επόμενο άρθρο θα συνεχίσουμε με τους τύπους δεδομένων και τα διάφορα είδη μνήμης που χρησιμοποιεί το .NET.

Αν κάποιος αναγνώστης δεν κατανόησε κάτι που συζητήσαμε στο άρθρο αυτό και επιθυμεί επιπλέον εξήγηση ας το αναφέρει στα σχόλια.

Δημοσιεύθηκε στο .NET, C#, Προγραμματισμός | Leave a Comment »

Dream Build Play 2009

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Μαΐου 14, 2009

Η άκρα του τάφου σιωπή συνεχίζεται εδώ γύρω… Διάφορες υποχρεώσεις και πολλή δουλειά στο πανεπιστήμιο μειώνουν δραματικά το διαθέσιμο χρόνο. Όμως το blog θα επανέρθει δυναμικά σύντομα.

Μέχρι τότε μπορείτε να απασχοληθείτε με το διαγωνισμό Dream Build Play 2009 της Microsoft. Πρόκειται για διαγωνισμό ανάπτυξης βιντεοπαιχνιδιού στην πλατφόρμα XNA Game Studio με χρηματικό έπαθλο. Είναι διεθνής διαγωνισμός και ανοικτός και σε Έλληνες. Πέρυσι έλαβε 350 συμμετοχές από 100 χώρες.

Περισσότερο από όλα μετράει η καινοτομία και η ψυχαγωγική αξία του παιχνιδιού και όχι απαραίτητα τα εντυπωσιακά και τριδιάστατα γραφικά. Απόδειξη αποτελεί το γεγονός ότι πέρυσι το πρώτο βραβείο δόθηκε σε ένα 2διάστατο παιχνίδι, το CarnyVale: Showtime.

Μια καλή ιδέα μπορεί να έχει ο οποιοσδήποτε, οπότε αξίζει να συμμετάσχετε!

Δημοσιεύθηκε στο .NET, C#, XNA Game Studio, Ανάπτυξη βιντεοπαιχνιδιών | Leave a Comment »

Εισαγωγή στην OpenGL: μέρος 6o (πραγματικά τελευταίο)

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιανουαρίου 28, 2009

Τελικά είχαμε λίγο χρόνο πριν τις εξετάσεις και κατάφερα να στριμώξω ακόμα ένα εργαστήριο για το μάθημα Γραφικά με Υπολογιστές, σχετικά με τα συστήματα σωματιδίων αυτή τη φορά. Μιας και τέλειωσε το εξάμηνο αυτό είναι όντως το τελευταίο μέρος της εισαγωγής στην OpenGL.



Διαβάστε την συνέχεια του άρθρου »

Δημοσιεύθηκε στο OpenGL, Προγραμματισμός | Leave a Comment »

Γιατί οι παίκτες αντιγράφουν βιντεοπαιχνίδια;

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιανουαρίου 25, 2009

Στο Thinking gamer’s blog, ξεκίνησε μια προσπάθεια καταγραφής των λόγων για τους οποίους αντιγράφει κανείς παιχνίδια στη χώρα μας, σαν αναφορά για τα άτομα και τις εταιρίες που αναπτύσσουν, εκδίδουν και διανέμουν παιχνίδια εδώ.

Όποιος επιθυμεί μπορεί να καταθέσει την άποψη του (ανώνυμα) στο συγκεκριμένο άρθρο. Θα είναι μια χρήσιμη καταγραφή της Ελληνικής πραγματικότητας όσον αφορά το θέμα αυτό.

http://thinkinggamer.wordpress.com/2009/01/20/piracy-question/

Δημοσιεύθηκε στο Βιομηχανία βιντεοπαιχνιδιών | Leave a Comment »

Ο κύκλος ζωής ενός βιντεοπαιχνιδιού

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιανουαρίου 14, 2009

Η ανάπτυξη ενός βιντεοπαιχνιδιού είναι μια πολύπλοκη, δαπανηρή και μακροχρόνια διαδικασία που μπορεί να διαρκέσει από 6 μήνες μέχρι και πάνω από δυο χρόνια. Περνάει από πολλές φάσεις, από την σύλληψη μέχρι την έκδοση του τελικού προϊόντος, με κάθε φάση να έχει τις δικές τις απαιτήσεις και ιδιαιτερότητες.

Σε ένα νέο μου άρθρο στο gameover.gr αναλύω όλα τα στάδια του κύκλου ζωής ενός βιντεοπαιχνιδιού από την σύλληψη μέχρι και μετά την έκδοση.

Ο κύκλος ζωής ενός βιντεοπαιχνιδιού

Δημοσιεύθηκε στο Ανάπτυξη βιντεοπαιχνιδιών, Στο Τύπο | Leave a Comment »

Εισαγωγή στην C#/.NET μέρος 2ο

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιανουαρίου 9, 2009

Το άρθρο αυτό είναι μια εισαγωγή στην C# για άτομα που δεν την έχουν χρησιμοποιήσει ξανά.

Η C# (προφέρεται σι σαρπ) είναι η γλώσσα επιλογής για ανάπτυξη .ΝΕΤ εφαρμογών. Εν αντιθέσει με την Visual Basic που προσαρμόστηκε για να υποστηρίζει το .ΝΕΤ, η C# έχει σχεδιαστεί εξαρχής με γνώμονα την πλατφόρμα αυτή και συνεπώς μπορεί να την αξιοποιήσει καλύτερα.

Διαβάστε την συνέχεια του άρθρου »

Δημοσιεύθηκε στο .NET, C#, Προγραμματισμός | Leave a Comment »

Εισαγωγή στην C#/.NET

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Ιανουαρίου 8, 2009

Πριν ασχοληθούμε με την ανάπτυξη παιχνιδιών με το XNA Game Studio, είναι χρήσιμο πιστεύω να κάνουμε με μικρή εισαγωγή σε C#/.NET που αποτελούν βασικά στοιχεία στην πλατφόρμα αυτή.

Τι είναι η C#

Η C# είναι μια σχετικά νέα αντικειμενοστραφής γλώσσα προγραμματισμού η οποία δημιουργήθηκε από την Microsoft. Δανείζεται πολλά στοιχεία, και έχει παρόμοια σύνταξη, με την C++ και την Java, κάνοντας την εκμάθηση της σχετικά εύκολη. Είναι γλώσσα ειδικά σχεδιασμένη για να υποστηρίζει το .NET framework της ίδιας εταιρείας. Βασικό χαρακτηριστικό της είναι ότι δεν παράγει απευθείας κώδικα μηχανής όπως η C++, άλλα ένα ενδιάμεσο κώδικα που στοχεύει το .NET.

Διαβάστε την συνέχεια του άρθρου »

Δημοσιεύθηκε στο .NET, C#, XNA Game Studio, Προγραμματισμός | Leave a Comment »

Ανάπτυξη βιντεοπαιχνιδιών με το XNA Game Studio

Δημοσιεύθηκε από Κώστας Αναγνώστου στο Δεκεμβρίου 29, 2008

Μετά από μερικούς πειραματισμούς με το template του blog βρήκα ένα που να μου δίνει λίγο χώρο να αναπτύξω το κείμενο. Ήρθε η ώρα λοιπόν να αρχίσουμε σιγά σιγά το κολύμπι στα βαθιά νερά της ανάπτυξης βιντεοπαιχνιδιών.

Η ανάπτυξη ενός βιντεοπαιχνιδιού μπορεί να είναι πολύ απλή ή πολύ δύσκολη υπόθεση ανάλογα με το είδος του παιχνιδιού αλλά και τα εργαλεία που έχεις στην διάθεση σου. Εμείς θα ξεκινήσουμε από τα ρηχά φορώντας καλού κακού ως σωσίβιο το XNA Game Studio.

Διαβάστε την συνέχεια του άρθρου »

Δημοσιεύθηκε στο C#, XNA Game Studio, Προγραμματισμός | 2 σχόλια »