Videogames Laboratory

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

Αρχείο για την κατηγορία ‘Προγραμματισμός’

Arkanoid: Σχεδιασμός πίστας

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

Κοιτάζοντας το πότε ανέβασα το τελευταίο άρθρο στο blog διαπιστώνω ότι έχει περάσει πάνω από ένας μήνας! Ακόμα περισσότερο έχουμε να ασχοληθούμε με το Arkanoid. Ήταν δύσκολες οι προηγούμενες εβδομάδες στο Πανεπιστήμιο με τις προθεσμίες για προτάσεις χρηματοδότησης και άρθρα σε περιοδικά να διαδέχονται η μία την άλλη. Και ενώ είχα γράψει το κώδικα για το σχεδιασμό πίστας στο Arkanoid δεν έβρισκα το χρόνο να γράψω το κείμενο. Τώρα όμως χαλάρωσαν λίγο τα πράγματα και επανερχόμαστε στην ενεργό δράση!

Είχαμε αφήσει το Arkanoid σε μια σχετικά πλήρη μορφή με ανίχνευση συγκρούσεων, κίνηση μπάλας και ρακέτας, καταγραφή σκορ και απώλειας ζωής του παίκτη. Επιπλέον είχαμε υλοποιήσει game state management με τις διάφορες οθόνες και καταστάσεις του παιχνιδιού (εισαγωγή, παιχνίδι, παύση, νίκη και αποτυχία παίκτη). Αυτό που λείπει είναι η δυνατότητα να σχεδιάζουμε τη πίστα του παιχνιδιού με περισσότερο φιλικό και εύχρηστο τρόπο, καθώς και η προσθήκη πολλών επιπέδων στο παιχνίδι.
Διαβάστε την συνέχεια του άρθρου »

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

Προγραμματίστε το δικό σας παιχνίδι

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

Ο αναγνώστης του Videogames Laboratory konsnos έγραψε ένα πολύ καλό και πολύ επεξηγηματικό άρθρο στο PC WORLD σχετικά με την ανάπτυξη του Pong, βασισμένος στο κώδικα του παιχνιδιού που αναπτύξαμε στη πρώτη σειρά tutorial. Αν για κάποιο λόγο σας φάνηκαν τα tutorial εκείνα δύσκολα ή δυσνόητα αξίζει να ρίξετε μια ματιά στο άρθρο αυτό καθώς ο συγγραφέας παρουσιάζει το θέμα ακόμα πιο απλά και κατανοητά.

Μπορείτε να βρείτε το σχετικό άρθρο εδώ.

ΥΓ: Υπάρχουν άλλες προτάσεις για το Videogames Laboratory Challenge #2;

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

Videogames Laboratory Challenge #2

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

Η περίοδος αυτή αποδεικνύεται η πιο πολυάσχολη του χρόνου με τις προθεσμίες αιτήσεων για χρηματοδότηση έρευνας στο Πανεπιστήμιο να πλησιάζουν ταχύτατα. Αυτό έχει αντίκτυπο και στο blog μιας ο διαθέσιμος ελεύθερος χρόνος μου έχει συρρικνωθεί. Μέχρι να βρω λοιπόν το χρόνο να ολοκληρώσω τη σειρά tutorial για το Arkanoid, σκέφτηκα να εμπλέξω τους αναγνώστες του blog με ένα Videogames Laboratory Challenge. Στην ουσία είναι το δεύτερο challenge μιας και το πρώτο αφορούσε την εκσφαλμάτωση ενός παιχνιδιού (και για το οποίο έλαβα ελάχιστες απαντήσεις δυστυχώς).

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

            for (int j = 0; j < numOfRows; j++)
            {
                for (int i = 0; i < bricksPerRow; i++)
                {
                    Rectangle rect = new Rectangle(i * (brickWidth + brickSpacing),
                                                   rowStart + j * (brickHeight + brickSpacing),
                                                   brickWidth, brickHeight);
                    bricks[j * bricksPerRow + i] = new Brick(rect, Color.Red, whiteTile);
                    numOfVisibleBricks++;
                }
            }

Σε ένα for-loop δηλαδή τοποθετούμε τα τουβλάκια, ανά τακτά διαστήματα, σε γραμμές και στήλες. Αυτός το τρόπος σχεδιασμού πίστας (level design) είναι πολύ δύσχρηστος και επιβάλλει στο σχεδιαστή της πίστας να συνεργάζεται άμεσα με το προγραμματιστή έτσι ώστε να του υποδεικνύει τι αλλαγές πρέπει να γίνουν στο σχέδιο της πίστας και πού (και να γίνεται πάλι compile ο κώδικας με κάθε αλλαγή). Επιπλέον είναι αρκετά δύσκολο να αλλάξεις το σχέδιο της πίστας σε κάτι άλλο από γραμμές με τουβλάκια. Από την άλλη είναι επιθυμητό ο σχεδιαστής να μην ασχολείται καθόλου με το κώδικα του παιχνιδιού, να σχεδιάζει με κάποιο τρόπο τη πίστα και να μεταφέρει το αποτέλεσμα στο προγραμματιστή για απεικόνιση (data-driven development), όπως γίνεται άλλωστε και στη βιομηχανία ανάπτυξης βιντεοπαιχνιδιών.

Η πρόκληση λοιπόν αφορά το εξής:

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

Αν ο τρόπος που προτείνετε είναι «καλύτερος» από αυτόν που έχω εγώ υπόψη (και σε λογικό επίπεδο δυσκολίας για ένα εισαγωγικό tutorial), θα γίνει υλοποίηση αυτού στο επόμενο tutorial (με τιμές και δάφνες στο άτομο που το πρότεινε). Σε κάθε περίπτωση μπορείτε και κάνετε την υλοποίηση οι ίδιοι και να ανεβάσετε το κώδικα στο Code Repository. Απορίες και διευκρινίσεις στα σχόλια του post.

Περιμένουμε τις συμμετοχές σας!

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

Arkanoid: Game State Management μέρος 2ο

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

Στο προηγούμενο tutorial σχεδιάσαμε το game state management του Arkanoid και το υλοποιήσαμε για την διαδικασία Update του παιχνιδιού. Σήμερα θα το υλοποιήσουμε και για την διαδικασία Draw, συμπληρώνοντας παράλληλα το παιχνίδι με Εισαγωγική οθόνη, λειτουργία Pause και οθόνη επιτυχίας ή αποτυχίας του παίκτη.
Διαβάστε την συνέχεια του άρθρου »

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

Arkanoid: Game State Management

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

Μέχρι στιγμής στο παιχνίδι Arkanoid (μέρος 1, μέρος 2) έχουμε υλοποιήσει την κλάση που εκπροσωπεί τα τουβλάκια (Brick) έχουμε τοποθετήσει τα τουβλάκια στην σωστή θέση, έχουμε υλοποιήσει κίνηση της μπάλας και της ρακέτας, συγκρούσεις μεταξύ των αντικειμένων του παιχνιδιού και αυξάνουμε και το σκορ του παίκτη. Το παιχνίδι είναι λειτουργικό, μπορεί να ελέγξει ο παίκτης τη μπάλα και να καταστρέψει τα τουβλάκια, αλλά δεν έχουμε ορίσει το πότε νικά και πότε χάνει ο παίκτης έτσι ώστε να σταματάμε το παιχνίδι και να του εμφανίζουμε το ανάλογο μήνυμα. Για να το κάνουμε λίγο πιο εύκολο και κομψό αυτό, θα κάνουμε ένα βήμα πίσω και θα υλοποιήσουμε στο παιχνίδι κάτι που ονομάζεται game state management (διαχείριση καταστάσεων παιχνιδιού;).
Διαβάστε την συνέχεια του άρθρου »

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

Arkanoid μέρος 2ο

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

Ξεκινήσαμε με το προηγούμενο άρθρο τη δεύτερη σειρά tutorial πάνω στην ανάπτυξη βιντεοπαιχνιδιών, εστιάζοντας στο παιχνίδι Arkanoid αυτή τη φορά. Το άρθρο βγήκε αναγκαστικά μεγάλο διότι έπρεπε να ορίσουμε ένα νέο αντικείμενο το οποίο θα αναπαριστά το τουβλάκι στο παιχνίδι, καθώς και την συμπεριφορά του (απεικόνιση και έλεγχος συγκρούσεων). Με βάση τη κλάση αυτή δημιουργήσαμε και απεικονίσαμε τις σειρές με τα τουβλάκια στην οθόνη. Επιπλέον ορίσαμε και απεικονίσαμε τη ρακέτα και την μπάλα.

Στο σημερινό άρθρο, για να το κρατήσουμε σε λογικό μέγεθος, θα προσθέσουμε στο παιχνίδι μόνο κίνηση της μπάλας και της ρακέτας, ανίχνευση συγκρούσεων (collision detection) και σκορ παίκτη.
Διαβάστε την συνέχεια του άρθρου »

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

Δημιουργώντας το Arkanoid μέρος 1ο

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

Ήρθε η ώρα να ξεσκονίσουμε τα πληκτρολόγια μας και να αρχίσουμε τη δεύτερη σειρά tutorial ανάπτυξης βιντεοπαιχνιδιού. Αυτή τη φορά θα ασχοληθούμε με το πολύ γνωστό Arkanoid (Taito, 1986). Στο παιχνίδι αυτό ο παίκτης χειρίζεται μια ρακέτα και προσπαθεί να οδηγήσει μια μπάλα έτσι ώστε να καταστρέψει σειρές από «τουβλάκια» στο πάνω μέρος της οθόνης.

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

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

Ποια γλώσσα είναι η καλύτερη για τη ανάπτυξη παιχνιδιών;

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

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

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

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

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

Squash the bugs

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

Η καρδιά του Αυγούστου, με το περισσότερο κόσμο στις παραλίες και το μυαλό όλων στις διακοπές, δεν είναι η κατάλληλη εποχή για θεωρίες και μεγάλα κείμενα. Γι αυτό σκέφτηκα να φτιάξω ένα απλό παιχνιδάκι, απλά για διασκέδαση. Βασιζόμενος στο Pong που αναπτύξαμε σε προηγούμενα tutorial ξεκίνησα να φτιάχνω το Squash. Για όσους δεν το ξέρουν, το Squash είναι ένα παιχνίδι με ρακέτες, σε ένα κλειστό δωμάτιο, στο οποίο και οι δύο παίκτες βρίσκονται στην ίδια πλευρά του γηπέδου.

Ήταν εύκολη η μετατροπή του Pong σε Squash, απλά μετέφερα τη ρακέτα του υπολογιστή στα αριστερά, έδωσα στις ρακέτες διαφορετικό χρώμα ώστε να ξεχωρίζουν και άλλαξα λίγο το τεστ σύγκρουσης της μπάλας με τη ρακέτα του υπολογιστή. Επιπλέον άλλαξα και τη λογική υπολογισμού σκορ.

Κάτι πρέπει να πήγε στραβά όμως κατά τη διαδικασία μετατροπής, γιατί όταν έτρεξα το παιχνίδι είδα αυτό:

Με τις γνώσεις που αποκτήσαμε στα προηγούμενα tutorial πάνω στο debugging, μήπως θα μπορούσατε να βρείτε τι πήγε στραβά; Αναζητάμε λάθη προγραμματιστικά και όχι σχεδιασμού. Το παιχνίδι βασίζεται στο Pong και έχει τις σχεδιαστικές ατέλειες του, δεν είναι όμως αυτό το πρόβλημα. Ο κώδικας του παιχνιδιού είναι διαθέσιμος στο Code Repository, σε zip μορφή προς το παρόν.

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

Καλό debugging!

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

Debugging κώδικα με τη Visual C# 2008 Express Edition (μέρος 2ο)

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

Συνεχίζουμε την περιήγηση μας στις δυνατότητες για εκσφαλμάτωση (debugging) κώδικα που μας παρέχει η Visual C# 2008 Express Edition πάνω στην οποία βασίζεται το XNA Game Studio. Στο προηγούμενο tutorial είχαμε μιλήσει για τα breakpoints ως μηχανισμούς που μας επιτρέπουν να σταματάμε τη ροή του προγράμματος σε οποιοδήποτε σημείο και να βλέπουμε τις τιμές των μεταβλητών του. Σήμερα θα δούμε επιπλέον μηχανισμούς που μας παρέχει η C#/.NET για το σκοπό αυτό όπως το αντικείμενο Debug (με τη μέθοδο Assert, και την έξοδο στο παράθυρο Output) και τα Exceptions.
Διαβάστε την συνέχεια του άρθρου »

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