Page 1 of 1
top5
Posted: Thu Dec 13, 2007 12:28 am
by para
Έχω κλείσει 16 συνεχόμενες ώρες πάνω από το ίδιο πρόγραμμα και τώρα έχω κολλήσει..
Θέλω να φτιάξω ένα τοπ5.
Λεπτομέρειες:
Έχω 5 ανθρώπους και 5 σκορς στο τοπ5.
Τα δέκα αυτά είναι σε δέκα μεταβλητές. top1score,top2score,..,top5score,top1winr,...,top5winr.
Επίσης έχω τις μεταβλητές istopscore και istopwinr οι οποίες περιέχουν το σκορ μετά την τελευταία ενέργεια ενός παίχτη κ είναι αυτό που θέλω να ελέγξω με τα υπόλοιπα του τοπ5 για να το τοποθετήσω στη λίστα αν χρειάζεται. Θέλω όμως αν υπάρχει ήδη στη λίστα το όνομά του να μην τον περάσει δεύτερη φορά, απλά να διαμορφώσει το σκορ του και μετατρέψει κατάλληλα το τοπ5.
Το σκορ του παίχτη μπορεί είτε να αυξάνεται (περίπτωση α παρακατω) είτε να μειώνεται (β).
Παράδειγμα:
Code: Select all
Τοπ5 ->(α) Τοπ5 ->(β) Τοπ5
Τομ 50 Τομ 50 Τομ 50
Τζέρυ 41 Παιζω_τωρα 43 Τζέρυ 41
Παιζω_τωρα 39 Τζέρυ 41 Γιάγκος 30
Γιάγκος 30 Γιάγκος 30 Παιζω_τωρα 28
Δράκος 25 Δράκος 25 Δράκος 25
Με απλές εκχωρήσεις τιμών και ifs θα με βοηθούσε να το κάνω..
Καμια ιδέα;

Posted: Thu Dec 13, 2007 12:34 am
by Zifnab
Εγώ θα το έκανα με πίνακα 5 θέσεων και θα έκανα sort.Η μικρή χαζομάρα με τον πίνακα είναι πως θα συνδέσει κανείς το σκορ με το όνομα σε ένα Tuple<>...Έτσι θα προτιμούσα να δουλέψω σε hashmap.... Και να έχω τα ονόματα (κλειδιά σε vector) και να τα ανακαλώ από το hashmap α λά c++
Άλλη λύση είναι κάθε φορά να φτιάχνεις έναν πίνακα με τις 5 μεταβλητές να την σορτάρεις και μετά μηχανικά να διαβάζεις τον πίνακα και να εκχωρείς στις μεταβλητές τις τιμές που πήρε μετα το σορτάρισμα ο πίνακας
Posted: Thu Dec 13, 2007 12:46 am
by para
Κάνω όμως IRC scripting κι εκεί δεν ξέρω πως να φτιάξω πίνακες..

- αλλά και πάλι το πρόβλημα δε βρίσκεται εκεί.
Έχω φτιάξει το όλο σκηνικό και το μόνο που με δυσκολεύει είναι
να μην μπαίνει δυο φορές το ίδιο όνομα στο τοπ5.
Τι έχω κάνει μέχρι τώρα:
Code: Select all
set %istopscore edw_to_skor_tou_paixth
set %istopwinr edw_to_nick_tou
if ( %istopscore >= %top1score ) { %top5score = %top4score | %top4score = %top3score | %top3score = %top2score | %top2score = %top1score | %top1score = %istopscore
%top5winr = %top4winr | %top4winr = %top3winr | %top3winr = %top2winr | %top2winr = %top1winr | %top1winr = %istopwinr | halt }
if ( %istopscore >= %top2score ) { %top5score = %top4score | %top4score = %top3score | %top3score = %top2score | %top2score = %istopscore
%top5winr = %top4winr | %top4winr = %top3winr | %top3winr = %top2winr | %top2winr = %istopwinr | halt }
if ( %istopscore >= %top3score ) { %top5score = %top4score | %top4score = %top3score | %top3score = %istopscore
%top5winr = %top4winr | %top4winr = %top3winr | %top3winr = %istopwinr | halt }
if ( %istopscore >= %top4score ) { %top5score = %top4score | %top4score = %istopscore
%top5winr = %top4winr | %top4winr = %istopwinr | halt }
if ( %istopscore >= %top5score ) { %top5score = %istopscore
%top5winr = %istopwinr | halt }
Posted: Thu Dec 13, 2007 1:46 am
by marios
Παίζει να πω και βλακεία (και μάλλον θα πω), αλλά γιατί δεν το κάνεις με τον χαζό τρόπο; να ελέγχεις το σκορ και μετά να ελέγχεις το όνομα; δεν έχω ιδέα σε τι γράφεις, αλλά η πιο απλή λύση ειναι να κάνεις τέτοια τσεκαρίσματα... (αν αυτό έχεις κάνει στον προαναφερθέν κώδικα, δεν έβγαλα χριστό απ'οτι έγραψες!)
Posted: Thu Dec 13, 2007 2:00 am
by para
marios γι' αυτό ακριβώς η πρώτη γραμμή του πρώτου post αναφέρεται στο πόσο έχω κάτσει συνεχόμενα πάνω απ' το πρόγραμμα. Επειδή δεν μπορώ να σκεφτώ αυτόν τον χαζό τρόπο. Με αυτόν θέλω να το κάνω αλλά δε λειτουργεί άλλο το εγκεφαλικό μου σύστημα και δεν μπορώ να σκεφτώ κάτι τόσο απλό!
Τελικά κούτσα-κούτσα, λάου-λάου (κι όχι λούα-λούα) κάτι φαίνεται να καταφέρνω.
Posted: Thu Dec 13, 2007 2:10 am
by marios
τι να σου πω, μου ακούγεται αρκετα απλό για να κολλήσεις!
πέρνε διαδοχικά τις τιμές και τσέκαρε και ανάλογα άλλαζε... typing είναι κυρίως...
Code: Select all
if (istopscore> top1score)
{if (top1winr==istopwinr)
top1score=istopscore
else
top5winr=top4winr
top3winr=top2winr
top2winr=top1winr
top1winr=istopwinr
top5score=top4score
top4score=top3score
top3score=top2score
top2score=top1score
top1score=istopscore
}
else if (istopscore>top2score)
.
.
.
και μετά μενουν οταν ειναι ισοβαθμία... Πάντα για java!!!
Posted: Thu Dec 13, 2007 2:38 am
by para
Posted: Thu Dec 13, 2007 2:44 am
by cactus
Μια συμβουλή:
Χρησιμοποίησε code tags για τον κώδικα, γιατί έτσι είναι δυσκολοδιάβαστο... Το code tag κρατά στηλοθέτες και πολλά διαδοχικά κενα, άρα μπορείς να στοιχίσεις τις γραμμές του κώδικα σου, όπως στο IDE που χρησιμοποιείς.
Posted: Thu Dec 13, 2007 3:05 am
by para
Σωστά
cactus! Γι' αυτό με παραξένεψε που δεν τα είχε στοιχισμένα όπως τα είχα στο IDE. Αντί για code πάτησα κατα λάθος παράθεση! Thnx
------
Tελικά το παραπάνω
ΔΕ δουλεύει γιατι:
para wrote:Το σκορ του παίχτη μπορεί είτε να αυξάνεται είτε να μειώνεται.
-_-
------
Kαι τώρα έστω ότι καταφέρνω να το κάνω να τρέχει κι απ' την ανάποδη.., πώς θα καταφέρνω να βάζω τον έκτο παίχτη μέσα στο τοπ5 αν κάποιος απ το τοπ5 αποκτά χαμηλότερη βαθμολογία απ' τον έκτο;
Posted: Thu Dec 13, 2007 8:36 am
by elsupreme
Να μια ιδέα :
1. Πίνακας String με τα ονόματα των παικτών
2. Πίνακας int με τα σκορ των παικτών, αντιστοίχιση με πίνακα παικτών
3. Κάνε bubble-sort (ή ό,τι άλλο sort θες) στον πίνακα με τα σκορ ώστε να ταξινομηθεί με φθίνουσα σειρά, ΩΣΤΟΣΟ : όταν εναλλάσσεις 2 θέσεις στον πίνακα με τα σκορ, εναλλάσσεις τις αντίστοιχες στον πίνακα με τα ονόματα.
4. Μετά από κάθε ενέργεια, ενημερώνεις τα σκορ που αντιστοιχούν στους παίκτες στον πίνακα, κάνεις bubble-sort και εμφανίζεις με for τις πρώτες 5 θέσεις.
Κουτό, αργό αλλά λειτουργικό (εφόσον δεν παίζουν πάνω απο 500 άτομα).
edit:
Καλύτερη ιδέα : κάνε το βήμα 1 και 2.
3. Πίνακας String 5 θέσεων, θα κρατά τα top5 ονόματα
4. Πίνακας int 5 θέσεων, θα κρατά τα top5 σκορ.
5. Μετά από κάθε ενέργεια, θα αναζητάς στο πίνακα σκορ τα 5 μεγαλύτερα σκορ και θα τα περνάς στο top5 και τα αντίστοιχα ονόματα στο αντίστοιχο top5.
Τα μεγαλύτερα 5 σκορ τα βρίσκεις αρχικοποιώντας τον top5 σκορ με 0, συγκρίνοντας κάθε σκορ με το 1ο, 2ο κλπ. top5 σκορ, ενημερώνοντας όσα σκορ είναι μεγαλύτερα και "διώχνοντας" αντίστοιχα τα χαμηλότερα. Όταν ενημερώνεις top5 σκορ, ενημερώνεις και τα top5 ονόματα.
Posted: Thu Dec 13, 2007 8:54 am
by tsilochr
Αν το έκανες σε μια γλώσσα 3ης γενιίας (στην περίπτωση σου Java), θα το είχες λύσει με 3 συναρτήσεις και 2 δομές το πρόβλημα. Δεν ξέρω σε τι το φτιάχνεις, αλλά χωρίς πίνακες θα σου βγει η ψυχή
Φτιάχνεις μια κλάση Score που κρατά το score (int) και το παίχτη (String). Υπερφορτώνεις την compareTo για την τάξη Score και πετάς αντικείμενα τύπου Score σε ένα Arraylist, που διαθέτει έτοιμη συνάρτηση για sorting. Αν θες info για κάθε παίχτη, κρατάς βάζεις σε κάποια δομή τύπου set (μοιάζουν με τα σύνολα από τα μαθηματικά) με κλειδί το όνομα (Score.παίκτης).
Και φυσικά, ο ίδιος κώδικας σου παίζει να οποιοδήποτε αριθμό παιχτών, όχι μόνο 5. Αυτά όμως προϋποθέοτουν γνώση από τα μαθήματα Java2, Δομές Δεδομένων και Αλγόριθμοι
Posted: Thu Dec 13, 2007 9:01 am
by para
Υπόθεση 5 λεπτών είναι σε άλλη γλώσσα. Υποθέτω με ένα map και κάτι απο 'δω κάτι απο 'κει σε C++ έβγαινε. Ή ένα δυναμικό δισδιάστατο πίνακα.
Ένα embed άλλης γλώσσας θα ήταν το καλύτερο για να κολούσα απλά το κομμάτι που μου λείπει σε αυτό που έχω ήδη φτιάξει. Έλα όμως που απ' ότι φαίνεται δεν μπορώ να κάνω embed :/
Θα ξεκινήσω προσπαθώντας να φτιάξω αυτό που είπε ο elsupreme πιο πάνω αποθηκεύοντας τα arrays σε αρχεία μιας κ θέλω να μένουν κ μετά το κλείσιμο του παιχνιδιού. Τα tutorials όμως που βρίσκω δεν εξηγούν καλά τη λειτουργία του κώδικα (θεωρούν πολλά ως δεδομένες γνώσεις) κι έτσι δυσκολεύομαι να καταλάβω αρκετά απ' όσα διαβάζω. I hope οι εκτιμόμενες μεταφράσεις του κώδικα των tutorials να είναι σωστές.
Posted: Thu Dec 13, 2007 10:47 am
by djsolid
Posted: Thu Dec 13, 2007 10:56 am
by Javaman
Θα συμφωνήσω με τον tsilochr.
Αν το έκανες σε μια γλώσσα 3ης γενιίας (στην περίπτωση σου Java), θα το είχες λύσει με 3 συναρτήσεις και 2 δομές το πρόβλημα. Δεν ξέρω σε τι το φτιάχνεις, αλλά χωρίς πίνακες θα σου βγει η ψυχή
Φτιάχνεις μια κλάση Score που κρατά το score (int) και το παίχτη (String). Υπερφορτώνεις την compareTo για την τάξη Score και πετάς αντικείμενα τύπου Score σε ένα Arraylist, που διαθέτει έτοιμη συνάρτηση για sorting. Αν θες info για κάθε παίχτη, κρατάς βάζεις σε κάποια δομή τύπου set (μοιάζουν με τα σύνολα από τα μαθηματικά) με κλειδί το όνομα (Score.παίκτης).
Και φυσικά, ο ίδιος κώδικας σου παίζει να οποιοδήποτε αριθμό παιχτών, όχι μόνο 5. Αυτά όμως προϋποθέοτουν γνώση από τα μαθήματα Java2, Δομές Δεδομένων και Αλγόριθμοι
Και αν σε δυσκολεύει η ArrayList μπορείς να τα βάζεις σε έναν πίνακα και να κάνεις sorting βάση του σκορ και να συγκρίνεις το name του ίδιου του αντικειμένου για το αν υπάρχει