Videogames Laboratory

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

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.

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

9 σχόλια προς “Videogames Laboratory Challenge #2”

  1. Δεν μπορεί, κανένας δεν έχει να προτείνει κάποια λύση? Θέλει απλή σκέψη, από που θα μπορούσαμε να διαβάζουμε τις θέσεις των τουβλακίων αν δεν θέλαμε να τις προσδιορίζουμε με κώδικα?

    Δεν ζητάμε πολύπλοκες λύσεις! Κάτι απλό που να δουλεύει…

  2. Γιώργος είπε

    θα μπορούσαμε να ορίζουμε τις θέσεις των τουβλακίων σε ένα txt και να τις διαβάζουμε από εκεί.
    Και να βάζαμε αντιστοιχούσαμε ας πούμε κάποιο σύμβολο με κάποιο χρώμα για το τουβλάκι.
    Κάπως σαν το παρακάτω

    ##%%%%%%%##%%%%%%%##
    #####$$## ##$$#####
    # #$$$$####$$$$# #
    #####$$## ##$$#####
    ##% %%%%##%%%% %##

  3. Darklynx είπε

    Η αλήθεια είναι ότι και σκέψη έχω και στην υλοποίηση της έχω προχωρήσει αρκετά,αλλά δεν είχα χρόνο να την υλοποιήσω 100%.
    Βασικά κάθισα και έφτιαξα ένα GUI πρόγραμμα που παίζει το ρόλο του level editor.Είναι πολύ απλό στη χρήση και σώζει τα levels σε XML αρχεία με μορφή:

    Το να φορτωθεί έπειτα το XML αυτό από το παιχνίδι είναι απλή υπόθεση -οι διαστάσεις της συστοιχίας των τούβλων παίρνεται απευθείας,ενώ θα πρέπει να φτιαχτεί μια λίστα με Bricks στην Initialize΄κάπως έτσι:

    List Wall=new List();
    //θα ακολουθούσε loop που διαβάζει το XML π.χ με τη χρήση του Linq to XML που είναι και πολύαπλό
    //έστω row και column οι τιμές που παίρνουμε με κάθε τούβλο,οπότε έχουμε
    Rectangle rect=new Rectangle(column * (brickWidth + brickSpacing),
    row * (brickHeight + brickSpacing),
    brickWidth, brickHeight);

    Brick brick = new Brick(rect, Color.Red, whiteTile);
    Wall.Add(brick);

    Μόλις με το καλό τελειώσω τον designer και τον κώδικα που διαβάζει το XML θα το ανεβάσω,ας όψονται οι πολλές υποχρεώσεις της περιόδου αυτής…

  4. Darklynx είπε

    Φτου,τα tags μου έφαγαν τον κώδικα.Το αρχείο xml είναι λοιπόν:

    <Wall Rows=16 Columns=16>
    <Block Row=1 Column=1>
    <Block Row=3 Column=7>
    </Wall>

  5. Μάλιστα, τώρα κάτι γίνεται…

    @Γιώργος: απλή και σωστή η λύση σου, και η ιδανική για το επίπεδο των tutorial αυτών!
    @Darklynx: προχώρησες παραπάνω, σε επαγγελματική λύση! Αναμένουμε να δούμε τον editor σου.

    Πάντως μην ξεφεύγετε σε υλοποιήσεις αμέσως. Εγώ ήλπιζα να ανοίξει συζήτηση με ιδέες πρώτα!

  6. Σπύρος (spahar) είπε

    Πιο εύκολη και συγχρόνως εύχρηστη λύση από αυτή που πρότεινε ο Γιώργος δε μπορώ να σκεφτώ.

    Και εγώ πάντως αμέσως σκέφτηκα την ιδέα του editor, κάτι που θα ήταν και πολύ ωραία προσθήκη για το game.

  7. Darklynx είπε

    Επειδή δεν θέλω να διπλοποστάρω,μια τρίτη λύση παρουσιάζεται εδώ:
    http://videogameslab.wordpress.com/2009/11/05/pong-konsnos/#comment-207

  8. Darklynx είπε

    Ο editor στην πρώτη του δοκιμαστική μορφή βρίσκεται στο:
    http://videogameslab.freeforums.org/arkanoid-level-designer-t29.html

  9. Πολύ καλή δουλειά. Αναμένουμε την πλήρη έκδοση, με το module που διαβάζει τα xml αρχεία στο Code Repository.

Υποβολή απάντησης

XHTML: Μπορείτε να χρησιμοποιήσετε αυτές τις ετικέτες: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>