Δημοσιεύτηκε: 14 Απρ 2012, 15:52
από migf1
Ilias95 έγραψε:Με έψησες πάρα πολύ άσχημα! :)
Ακούγεται δελεαστικότατο...

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

Ευχαριστώ πολύ! :clap:

Αρχηγέ μου, δεν περίμενα πως θα τ αποφάσιζες... respect! :)

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

Θα σου πρότεινα για αρχή η σκηνή να έχει μόνο ζώα και τίποτα άλλο. Στα SceneAnimals βάλε αρχικά μόνο type, id & health (το οποίο το έχεις έτσι κι αλλιώς υλοποιήσει με τ αστεράκια, οπότε απλώς θα το προσαρμόσεις). Βάλε τους επίσης και mood, αλλά μη τα κάνεις ακόμα να επιτίθενται... υλοποίησε μονάχα τα SCARED & NΕUTRAL, γιατί άμα βάλεις και AGGRESSIVE θα πρέπει να βάλεις και health και στον παίκτη, και αρχίζει να μπλέκει το πράγμα... btw, θα χρειαστείς έτσι κι αλλιώς και δομή Player (π.χ. με πεδία name, score και capedanimals (τα ζώα που έχει συλλάβει σε κάθε σκηνή) ).

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

Για παράδειγμα το interface της δομής Scene θα μπορούσε να περιέχει τις συναρτήσεις...

Μορφοποιημένος Κώδικας: Επιλογή όλων
scene_build();
scene_cleanup();

και το interface της δομής SceneAnimal να περιέχει τις συναρτήσεις...

Μορφοποιημένος Κώδικας: Επιλογή όλων
sceneAnimal_add();
sceneAnimal_delete();
...

τις οποίες μπορεί να τις χρησιμοποιούν οι συναρτήσεις του interface της δομής Scene. Οι 2ες λέμε πως βρίσκονται σε χαμηλότερο (νοηματικό) layers από τις πρώτες. Ανάλογα πως και με πόσες συναρτήσεις θα υλοποιήσεις τα interfaces των δομών σου (δεν είναι απαραίτητο να το κάνεις για όλες τις δομές) ίσως αποφασίσεις ότι σε εξυπηρετεί ένα interface με πολλές συναρτήσεις να το βάλεις σε ξεχωριστό αρχείο .c (ενδεχομένως με αντίστοιχο header file).

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

Πάντως δεν χρειάζεται να το παρακάνεις και με την οργάνωση και τον διαχωρισμό σε δομές/συναρτήσεις/αρχεία γιατί από ένα σημείο και μετά αντί να βοηθάει, σε μπερδεύει περισσότερο.

Π.χ. το παράδειγμα που έδωσα παραπάνω με τα interfaces των δομών Scene και SceneAnimal, μπορεί να γίνει σε ένα επίπεδο, μόνο για την Scene (με τον κώδικα των συναρτήσεων build & cleanup να περιέχουν απευθείας τον κώδικα των add και delete)