Προς το περιεχόμενο

Τι τύπο δεδομένων θα επιλέγατε για ένα 2D παιχνίδι


Latency

Προτεινόμενες αναρτήσεις

Τι τύπο δεδομένων θα επιλέγατε για να περιγράψετε τον παίχτη,

 

πχ, Health/Mana/STR/DEX/EXP/Level

 

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

 

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

 

-------------------

Και ένα 2ο κομμάτι, τα παραπάνω χαρακτηριστικά θα τα είχατε Public για απ'ευθείας πρόσβαση ή θα είχατε συναρτήσεις για την επέμβαση,

πιστεύω ότι καλύτερα συναρτήσεις που είναι και πιο περιγραφικές...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 64
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Σε τι γλώσσα; Επίσης πρέπει να δώσεις κάποιο παράδειγμα τιμών. Π.χ. μπορεί να σου πει κανείς να βάλεις single-byte numeral type (0-255) για το "health", αλλά άμα εσένα δε σου αρκούν 256 διακριτές τιμές, να είναι εντελώς λάθος τύπος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

δεν έχει σημασία η γλώσσα φίλε μου,

 

Level -> 1to100

HP -> 100(newbie)to 10.000~ max(top player)

MP -> 70(newbie) to 4700~max(top mage) to 3500(top fighter)

EXP-> Lineage 2 style, στην αρχή τα mob θα πετάνε 100-200, στα 70 lvl περίπου θα πετάνε 100.000~, άρα το πάω για INT ,

SP-> 70% of EXP, int also

PATK/MATK/PDEF/MDEF/CPSEED/ATKSPEED/SPEED (max 20~k {patk/matk}, 12-15k def, csped/atkspeed 1500~max, speed 250 max

 

από τι βλέπετε σχεδών όλα θα μπορούσαν να αναπαρασταθούν με short(2byte) -32.000~ to 32.000~ ή unsigned 0...64.000~

 

απλά δεν έχω δει ποτέ μου να το χρησιμοποιούν short σε διάφορα παραδείγματα στο Internet, ακόμα και παιχνίδια που δίνουν Source

 

μήπως γίνεται λόγο συνήθειας-άγνοιας? έχουμε συνηθίσει τους int/float/double

 

και κάτι άλλο, γιατί το HP/MP είναι Double? βλέπω μερικούς που το κάνουν

(βασικά όταν πάει το ΗΠ 0.5 τότε ο παίχτης θεωρείτε Dead, μάλλον για αυτό. αλλά θα μπορούσε να είναι int και να θέσουμε σαν dead 1hp, )

 

νομίζω float-double είναι το σωστό γιατί υποτίθεται ότι υπάρχουν κατάρες που κατεβάζουν ζωή, φτάνεις 1hp σταματάς εκεί (σκοπός της κατάρας δεν είναι να σε ρίξει)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

θα το αλλάξω, ώστε να είμαι μέσα με int, άρα στα μεγάλα level 80~k exp

 

δεν βιάζομαι ..., τι λέτε για αυτά που έχω κάνει μέχρι τώρα

(δεν επέλεξα seters & geters γιατί υπάρχουν ένα σορό προϋποθέσεις για να αλλάξει ένα stats και είναι πιο άνετο-περιγραφικό με συναρτήσεις )

 

http://codepaste.net/2h77mr

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βάζουμε "πάντα" int γιατί δεν έχει κανένα νόημα να κάνεις οικονομία 2 bytes (θα είχε νόημα μόνο το 1980 στον ZX81 με το 1Kb ram). Δεν κερδίζεις απολύτως τίποτα και απλά αφήνεις ανοιχτό το ενδεχόμενο να έχεις πρόβλημα στο μέλλον.

 

απλά δεν έχω δει ποτέ μου να το χρησιμοποιούν short σε διάφορα παραδείγματα στο Internet, ακόμα και παιχνίδια που δίνουν Source

 

ήπως γίνεται λόγο συνήθειας-άγνοιας? έχουμε συνηθίσει τους int/float/double

 

Απλή λογική: ή όλοι αυτοί έχουν μεγαλύτερη άγνοια από σένα (που είσαι τελείως νέος) ή κάτι άλλο συμβαίνει.

 

Για τον κώδικα... δεν πρόκειται να πας πουθενά έτσι, αλλά πιθανότατα χρειάζεται να ανακαλύψεις μόνος σου γιατί. Για να δώσω λίγο food for thought:

 

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

 

Τώρα πες ότι έχει 25% poison resist και συμβαίνει το ίδιο. Πώς θα το υλοποιήσεις;

 

Tο σχόλιο με τις συναρτήσεις vs properties είναι τελείως λάθος, δείχνει ότι έρχεσαι από κάποια γλώσσα του στυλ C και κατά πάσα πιθανότητα αυτό που ήθελες να πεις είναι "το κάνω έτσι γιατί έτσι έχω συνηθίσει". Λάθος προσέγγιση. H C# γι' αυτή τη δουλειά έχει properties και συ πρέπει να τις χρησιμοποιήσεις. Αν δεν το κάνεις απλά θα κουράζεσαι για να λύσεις manually προβλήματα που έχουν ήδη ενδεδειγμένη λύση. Και τέλος, οι properties υλοποιούνται με functions. Το μόνο που αλλάζει είναι η σύνταξη στο source.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

όσον αφορά αυτό

Λάθος προσέγγιση. H C# γι' αυτή τη δουλειά έχει properties και συ πρέπει να τις χρησιμοποιήσεις.

Είσαι λάθος, καμιά προσέγγιση δεν είναι λάθος, απλά όπως είπα δεν έχεις απλά seters/geters χωρίς κάποιον έλεγχο.

 

όσον αφορά αυτό

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

 

Τώρα πες ότι έχει 25% poison resist και συμβαίνει το ίδιο. Πώς θα το υλοποιήσεις;

 

Δεν πάω για κάτι μεγάλο όπως τα MMORPGs που έχουν 100 Stats (resist wind, fire, earth, dark, posion resists...), σκοπός μου δεν είναι να βάλω resists.

 

θα είναι κάτι απλό, όταν σε βαράει το τέρας θα χάνεις κάποια ζωή τελεία και παύλα, δεν θα μπω στην διαδικασία να "Calculate Received DMG"

 

απλά θα βάλω 1-2 Poisons για να υπάρχουν, δεν θα υπάρχει αντίδοτο.

 

ΥΓ: δεν έχω ασχοληθεί με Threads, μήπως γνωρίζεις πως θα γίνεται να παίζεις κανονικά και από πίσω ταυτόχρονα να τρέχει ένας κώδικας που σου κατεβάζει ζωή? (Poison)

 

λέω να το κάνω με BackgroundWorker

 

>
// δεν θυμάμαι την υπογραφή
void DoWork(...., ....)
{
While(ElapsedSeconds < PoisonSeconds)
{
// Decrease HP & Whatever must be
}
}

 

το παραπάνω πρέπει να τρέχει μόνο του αλλιώς θα κρατάει όλο το πρόγραμμα, δεν θα γίνεται Draw/Update ...τπτ

 

Απλή λογική: ή όλοι αυτοί έχουν μεγαλύτερη άγνοια από σένα (που είσαι τελείως νέος) ή κάτι άλλο συμβαίνει.

 

σε έχω δει κατά καιρούς να απαντάς έτσι και στο έχω ξαναπει, μίλα πιο ευγενικά και 2ον, πόσες μεταβλητές θα έχεις φορτωμένες στην μνήμη παράλληλα? 100-1000? ναι, δεν υπάρχει λόγος για short (1000*4 = 4ΜΒ, so what;)

 

@IHateLove

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σου δίνω κάποιες συμβουλές/κατευθύνσεις. Αν επιλέξεις να μου κλείσεις την πόρτα στη μούρη χωρίς να το σκεφτείς καν όπως μόλις έκανες -- κάτι που φυσικά είναι δικαίωμά σου -- τότε απλά θα σταματήσω να το κάνω. Σκέψου τι είναι καλύτερο για σένα και πράξε ανάλογα.

 

Υπό τις συγκεκριμένες συνθήκες το τελευταίο πράγμα που έχω να πω είναι ότι η νοοτροπία που βλέπω στο τελευταίο post σου δε θα σε βοηθήσει να πας μπροστά. Λες "είμαι λάθος γιατί καμία προσέγγιση δεν είναι λάθος", κάτι το οποίο δε σημαίνει και πολλά. Θα μπορούσες καλύτερα να πεις "καμία προσέγγιση δε σε εμποδίζει να έχεις το επιθυμητό αποτέλεσμα" και θα συμφωνήσω. Απλώς με κάποιες θα το κάνεις σαν πελαργός που λέει και ο Γκουσγκούνης ενώ με άλλες θα χτυπιέσαι χωρίς λόγο. Μιλάμε για μια γλώσσα την οποιά εσύ πρωτογνωρίζεις τώρα και γω τη χρησιμοποιώ επαγγελματικά εδώ και χρόνια. Ίσως θα ήταν καλύτερα αντί για στεγνή άρνηση να ρωτούσες "γιατί δηλαδή είναι λάθος; έχεις κάποιο παράδειγμα;". Αυτό είναι που θα είχα κάνει εγώ στη θέση σου, αλλά what do I know.

 

σε έχω δει κατά καιρούς να απαντάς έτσι και στο έχω ξαναπει, μίλα πιο ευγενικά και 2ον, πόσες μεταβλητές θα έχεις φορτωμένες στην μνήμη παράλληλα? 100-1000? ναι, δεν υπάρχει λόγος για short (1000*4 = 4ΜΒ, so what;)

 

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

 

Το δεύτερο μισό δεν το κατάλαβα καθόλου.

 

Σχετικά με BackgroundWorker που λες, ξέχασέ το (τελείως λάθος προσέγγιση :) ). Το παιχνίδι υποτίθεται πως είναι real time ή turn based?

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σου δίνω κάποιες συμβουλές/κατευθύνσεις. Αν επιλέξεις να μου κλείσεις την πόρτα στη μούρη χωρίς να το σκεφτείς καν όπως μόλις έκανες -- κάτι που φυσικά είναι δικαίωμά σου -- τότε απλά θα σταματήσω να το κάνω. Σκέψου τι είναι καλύτερο για σένα και πράξε ανάλογα.

 

δεν σου κλείνω την πόρτα για την ώρα, απλά σου λέω φέρσου πιο ευγενικά

 

μεγάλος είσαι, ξέρεις ότι μια πόρτα μπορεί να κλείσει και σε άτομα που μπορεί να σε βοηθήσουν, πάνω απ'όλα σεβασμός.

 

ΥΓ: βλέπω ότι σε μερικά πράγματα είσαι λίγο "απόλυτος" να το πω? υποστηρίζεις κάτι που έχεις μάθει και τα άλλα είναι λάθος τακτική...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με το μπαρδόν που παρεμβαίνω, αλλά έχω απορία: θεωρείς μικρής ή άνευ σημασίας τα χαρακτηριστικά get/set και τον έλεγχο που σου προσφέρουν?

 

 

...

 

Είσαι λάθος, καμιά προσέγγιση δεν είναι λάθος, απλά όπως είπα δεν έχεις απλά seters/geters χωρίς κάποιον έλεγχο.

 

...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

δεν σου κλείνω την πόρτα για την ώρα, απλά σου λέω φέρσου πιο ευγενικά

 

Με συγχωρείς πολύ, αλλά αυτό είναι κλείσιμο πόρτας:

 

Είσαι λάθος, καμιά προσέγγιση δεν είναι λάθος, απλά όπως είπα δεν έχεις απλά seters/geters χωρίς κάποιον έλεγχο.

 

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

 

Επίσης κλείσιμο πόρτας είναι αυτό:

 

Δεν πάω για κάτι μεγάλο όπως τα MMORPGs που έχουν 100 Stats (resist wind, fire, earth, dark, posion resists...), σκοπός μου δεν είναι να βάλω resists.

 

θα είναι κάτι απλό, όταν σε βαράει το τέρας θα χάνεις κάποια ζωή τελεία και παύλα, δεν θα μπω στην διαδικασία να "Calculate Received DMG"

 

απλά θα βάλω 1-2 Poisons για να υπάρχουν, δεν θα υπάρχει αντίδοτο.

 

Με άλλα λόγια: "δεν έκατσα να το σκεφτώ αυτό που είπες, αποφάσισα ότι δε με ενδιαφέρει".

 

Πιστεύεις ότι στο είπα γιατί με ενδιαφέρει αν το υποθετικό game σου θα έχει poison ή γιατί στα πλαίσια της προσπάθειας να απαντήσει κανείς σ' αυτά τα ερωτήματα θα βγάλει χρήσιμα συμπεράσματα;

 

μεγάλος είσαι, ξέρεις ότι μια πόρτα μπορεί να κλείσει και σε άτομα που μπορεί να σε βοηθήσουν, πάνω απ'όλα σεβασμός.

 

Πραγματικά πιστεύω ότι δεν έδειξα έλλειψη σεβασμού, αν θέλεις κάνε μου μια αντιπρόταση για να το βελτιώσω. Από την πλευρά σου, μήπως το πήρες λίγο προσωπικά; Κάνω κριτική στις προσεγγίσεις σου, οι οποίες είναι βασισμένες στις γνώσεις σου, οι οποίες θα βελτιωθούν. Δεν κατακρίνω εσένα προσωπικά.

 

ΥΓ: βλέπω ότι σε μερικά πράγματα είσαι λίγο "απόλυτος" να το πω? υποστηρίζεις κάτι που έχεις μάθει και τα άλλα είναι λάθος τακτική...

 

Κάνεις λάθος, αν μου φέρεις αντίρρηση ή αν ανατρέξεις σε παλιότερα threads θα δεις ότι πάντα παραθέτω επιχειρήματα. Όταν λέω "το Α είναι καλύτερο από το Β" υπάρχουν πάντα κριτήρια τα οποία μπαίνουν στη ζυγαριά και καταλήγω στο ότι το Α είναι καλύτερο γι' αυτό και γι' αυτό το λόγο.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σχετικά με BackgroundWorker που λες, ξέχασέ το (τελείως λάθος προσέγγιση smile.png ). Το παιχνίδι υποτίθεται πως είναι real time ή turn based?

τι εννοείς?

 

ούτε εγώ ξέρω, δεν έχω κάποια σχέδια, προχωράω και ότι βγει

 

σαν 1ο στόχο έχω να το τελειώσω σαν offline rpg μετά αφού θα είναι έτοιμος ο σκελετός "σχεδόν" ίσως το κάνω online

όσο αφορά το BWorker τι προτείνεις?

 

πάντως τα Threads κρατάνε το πρόγραμμα σε αναμονή, γιατί συμβαίνει? δεν υποτίθεται ότι δημιουργείται ένα Thread και τρέχει χωριστά?

 

το έχω δοκιμάσει και κρατάει το Draw/Update Πίσω

 

Με το μπαρδόν που παρεμβαίνω, αλλά έχω απορία: θεωρείς μικρής ή άνευ σημασίας τα χαρακτηριστικά get/set και τον έλεγχο που σου προσφέρουν?

 

προσωπικά μου είναι πιο εύκολες οι συναρτήσεις γιατί είναι πιο περιγραφικές, σε ένα παιχνίδι υπάρχουν πόλλα πράγματα

όπως

Set Health (ότι βάλεις τόσο θα έχει)

Increase Helth (εδώ αυξάνεται, κάτι που γίνεται όταν βάζεις ένα Potion πχ, HP = HP + PoitionBonusPerSec)

Decrease Helth (το ανάποδο του πάνω)

 

όλα αυτά έχουν επίσης 10 συνθήκες μέσα, αν είναι ζωντανός, αν είναι σε event, αν είναι ολυμπιαδα, αν είναι combat Mode (μπορεί να θες κάποια ποτιον να τα απενεργοποιήσεις όταν είναι combat mode)

 

i be back in 5, θα το κάνω με seters/geters να δείτε τι εννοώ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...