THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομές Δεδομένων => Topic started by: Larry_Flynt on December 23, 2006, 20:23:04 pm



Title: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 23, 2006, 20:23:04 pm
1. Και το Prey και το Predator οδηγούνται από την ίδια κλάση; (creature)
Πως θα γίνει αυτό;
π.χ. Όταν το prey βλέπει το  predator θέλουμε να απομακρύνεται και το αντίστροφο

2. Η οσμή πως λειτουργεί;


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 23, 2006, 21:39:01 pm
1. Ναι, η κλάση Creature έχει και τους δύο ρόλους. Η διαφοροποίηση των ρόλων γίνεται με τη χρήση της μεταβλητής amPrey. Όταν δημιουργηθεί ένα αντικείμενο της κλάσης Creature και σαν τιμή της amPrey μπει η τιμή true, τότε αυτό το αντικείμενο θα παίζει το ρόλο του Prey. Εάν μπει η τιμή false τότε το αντικείμενο θα αντιμετωπίζεται ως Predator.

Από την πλευρά του κώδικα, και στις δύο περιπτώσεις θα καλείται η συνάρτηση calculateNextPosition. Η υλοποίηση που πρέπει να κάνετε, πρέπι να λαμβάνει υπόψιν της το περιεχόμενο της μεταβλητής amPrey, ώστε να "ενεργοποιείται" κάθε φορά η αντίστοιχη λειτουργικότητα (ένα απλό if μπορεί κάλλιστα να έχει αυτό το ρόλο, αν και υπάρχουν και πιο "κομψές" προσεγγίσεις").


2. Η οσμή, πρακτικά, είναι η ακέραια μεταβλητή που αποτελεί το δεύτερο όρισμα εισόδου της calculateNextPosition. Η τιμή που έχει η μεταβλητή αυτή εκφράζει τον αριθμό δωματίων που παρεμβάλονται μεταξύ των δύο παικτών (Prey και Predator). Σε περίπτωση που ο αριθμός των δωματίων υπερβαίνει τα 25 δωμάτια, τότε η μεταβλητή έχει πάντα την τιμή 26.


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 23, 2006, 21:51:49 pm
Οτι πρέπει ήταν η απάντηση σου!
Thanx

Συνεχίζω.

Δηλαδή απο την οσμή δεν καταλαβαίνουμε προς τα ποια κατεύθυνση μυρίζουμε;

Αν είναι έτσι είναι ψιλοάχρηστη αίσθηση.


Και κάτι άλλο. Μπορούμε σαν τρόπο να μην έχουμε την προτεινόμενη υλοποίηση με την κλασσική arrayMemory αλλα κάτι άλλο;


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 23, 2006, 22:16:48 pm
Ναι, από την οσμή δεν καταλαβαίνετε προς ποιά κατεύθυνση είναι ο αντίπαλος, αλλά κρατώντας διαδοχικές (χρονικά) τιμές της οσμής, μπορείτε σχετικά εύκολα να αντιληφθείτε την κατεύθυνση. Για αυτό το λόγο, καθώς και για το γεγονός ότι σας ενημερώνει για την εγγύτητα του αντιπάλου σας, η όσφρηση είναι μάλλον χρήσιμη.

Προφανώς μπορείτε να αξιοποιήσετε την όραση (γιατί εκεί προτείνετε ο arrayMemory) με όποιον τρόπο θέλετε.


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 23, 2006, 22:19:13 pm
Το θέμα είναι οτι μπορεί ο άλλος να είναι απο πάνω σου ακριβώς και να σας χωρίζει ένας τοίχος αλλα για να πάς απο τη μια μεριά στην άλλη να
χρειάζεται να κάνεις ολόκληρο κύκλο του λαβύρινθου...  :-\


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 24, 2006, 00:05:39 am
Η όσφρηση δίνει την απόσταση που συνδέει τους δύο παίκτες, χωρίς όμως να περνάει μέσα από τοίχους. Οπότε αν σας χωρίζει ένας τοίχος, η όσφρηση ΔΕΝ θα επιστρέψει 0 αλλά το πλήθος δωματίων της μοναδικής διαδρομής που σας συνδέει (και σε περίπτωση που η απόσταση αυτή είναι πάνω από 25, τότε θα πάρεις την τιμή 26).

Τα λέω όλα αυτά γιατί δεν κατάλαβα που ακριβώς ήταν η αντίρρηση... :)


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 24, 2006, 00:09:06 am
αααααααααααααα

Δηλαδή δε μυρίζει μέσα απο τοίχους;


Title: Re: Εργασία Γ - Απορίες
Post by: ilithios on December 24, 2006, 18:19:29 pm
Ο pretador χρησιμοποιεί την όσφρηση;


Title: Re: Εργασία Γ - Απορίες
Post by: KorkoLyk on December 24, 2006, 21:32:52 pm
ε ναι!

Και το θύμα όμως.

Παρένθεση: Ποια είναι τα τελικά ονόματα θύτη-θύματος και οι οριστικοί κανόνες του παιχνιδιού? Ξέρει κανείς?


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 25, 2006, 14:49:41 pm
αααααααααααααα

Δηλαδή δε μυρίζει μέσα απο τοίχους;
Εννοείται ότι ΔΕΝ μυρίζει μέσα από τοίχους... Αυτό πλέον δεν είναι μυρωδιά, είναι μπόχα! :)

Ο pretador χρησιμοποιεί την όσφρηση;
Ναι, και το prey και το predator χρησιμοποιούν ΚΑΙ την όραση ΚΑΙ την όσφρηση.


ε ναι!

Και το θύμα όμως.

Παρένθεση: Ποια είναι τα τελικά ονόματα θύτη-θύματος και οι οριστικοί κανόνες του παιχνιδιού? Ξέρει κανείς?

Τελικά ονόματα θύτη και θύματος δεν έχουν βγει (αλλά εγώ τουλάχιστον νομίζω ότι αυτό είναι λεπτομέρειες). Όσο για τους κανόνες, αυτοί που σας ενδιαφέρουν για την Εργασία Γ', αναγράφονται στην εκφώνησή της. Αυτά τα οποία ΔΕΝ έχουν οριστικοποιηθεί ακόμα είναι το πλήθος των εξόδων, τα όρια των σχετικών αποστάσεων των τυχαίων θέσεων των δύο παικτών, και άλλα τέτοια παρόμοια... :)


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on December 25, 2006, 20:23:25 pm
Βασικά . με το που έτρεξα το πρόγραμμα (χωρίς να πειράξω τπτ στον κώδικα) κινούνταν μόνο η πράσινη βούλα και η κόκκινη εξαφανιζόταν. Έκανα ένα αντικείμενο Creature test = new Creature(false); Κατ αρχήν είτε δώσω ως όρισμα true είτε false το ίδιο και το αυτό. Γενικά κινείται πάντα μόνο η πράσινη βούλα και η κόκκινη εξαφανίζεται. Δεν κατάλαβα πως ακριβώς θα γίνεται η ξεχωριστή κίνηση του κυνηγού και του θηράματος!  8)


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 25, 2006, 20:38:44 pm
Αν πατήσεις chase κινούνται και τα 2.


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 25, 2006, 20:45:35 pm
Έχω τρομερή απορία.
Βασικά είμαι εντελώς άσχετος από προγραματισμό, έχω κάνει C στη σχολή καθόλου και σε αυτό το εξάμηνο άρχισα με την Java.

Μέσα στην κλάση creature που κάνω έτσι πως είναι γραμμένο όταν επιλέγει να πάει πάνω κάνει και κάποιες ενέργειες που μου τρώνε καμια 6 σειρές απο κώδικα. Το θέμα είναι οτι σε 3-4 σημεία κάνει τον έλεγχο να πάει πάνω( η αριστερά, δεξια, κάτω) και αναγκάζομαι να ξαναγράφω τζάμπα τα ίδια και τα ίδια. Στην ουσία δεν είναι σοβαρό πρόβλημα, αλλα για λόγους αισθητικής θέλω να είναι πιο συμμαζεμένο και όμορφο.

Μπορώ πχ όταν ελέγχει για να πάει πάνω σε αυτά τα 2-3 σημεία να πετάξω ένα πχ goNorth και κάπου αλλού να γράφω τι θα κάνει το goNorth?

Πως γίνεται αυτό; Να κάνω ξεχωριστές μεθόδους για κάθε κίνηση; Να κάνω κλάσεις;

Και η μέθοδος τι είναι; Η συνάρτηση λέγεται μέθοδος;
Αντικείμενο τι είναι; Είναι μια κλάση ας το πω συγκεκριμενοποιημένη; ΔλΔ που την χρησιμοποιήσαμε για ένα πράγμα;


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 25, 2006, 20:47:10 pm
Πάντως είναι κρίμα να βρεί αδιέξοδο το prey και να εγκλωβιστεί...


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 26, 2006, 03:34:55 am
Την οσμή θα την υλοποιήσουμε μόνοι μας;
Δεν είναι έτοιμη στα LabyrinthUtilities?


Title: Re: Εργασία Γ - Απορίες
Post by: Νessa on December 26, 2006, 22:52:39 pm
@Larry_Flint: Καλά, δεν ήσουν στα εργαστήρια; Μέθοδος χοντρικά είναι αυτό που λες συνάρτηση, και ανήκει σε μια κλάση. Οι κλάσεις είναι μια κατηγορία αντικειμένων. Αλλά είναι λίγο βασικά αυτά που ρωτάς και δε γίνεται να απαντηθούν σύντομα. Καλύτερα πάρε τις διαφάνειες από το ethmmy. Έχεις πολύ διάβασμα να αναπληρώσεις :-\

Η οσμή είναι έτοιμη, δε χρειάζεται να την υλοποιήσεις εσύ.

Εγώ να ρωτήσω κάτι ψιλοάσχετο: Προς το παρόν δεν έχω ασχοληθεί καθόλου με την όσφρηση και με το παιχνίδι κυνηγού-θηράματος, απλά προσπαθώ να τελειοποιήσω την τακτική εύρεσης της εξόδου που είχαμε και στην εργασία Β. Αυτό που με δυσκολεύει είναι ότι το Creature πάει πολύ γρήγορα αυτή τη φορά και δε μπορώ να ελέγξω τη διαδρομή του. Ποια τιμή πρέπει να αλλάξω για να ρυθμίσω την ταχύτητα του παιχνιδιού;


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on December 26, 2006, 23:10:00 pm
Tην timeStep στην κλάση LabyrinthUtilities. Ένα 200άρι αντί για 10 που είναι τώρα πιστεύω είναι καλό :P


Title: Re: Εργασία Γ - Απορίες
Post by: Νessa on December 27, 2006, 02:44:50 am
Ευχαριστώ :)


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 27, 2006, 04:58:04 am
Ναι είμαι πανάσχετος το ξέρω  :D .

Π.χ. η κλάση είναι η creature. Ένα αντικείμενο είναι το prey και άλλο το predator;
Είναι αυτό σωστό;

Που είναι η οσμή;


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on December 27, 2006, 18:41:31 pm
  Βασικά η κλάση που μας ενδιαφέρει, η Creature, έχει τη μέθοδο calculateNextPosition. Αυτή δέχεται σαν ορίσματα 1)το διάνυσμα όρασης visionVector, το οποίο υλοποιείται σε άλλη κλάση και καλείται μέσω της κλάσης MainPlatform. 2) τη δυνατότητα οσμής, smell η οποία και πάλι υλοποιείται αλλού, και της δίνεται τιμή αυτόματα όταν καλείται από την κλάση ΜainPlatform. Άρα εμείς δεν τις υλοποιούμε, απλά τις καλούμε. Έτσι αν απλά βάλεις μέσα στην calculateNextPosition, ένα "if (smell<26) System.out.println("Smell="+smell);", θα σου εκτυπώνει κάθε φορά που το ένα creature οσμίζεται το άλλο, πόσα δωμάτια μεσολαβούν ανάμεσά τους.   Η smell είναι μία απλή int μεταβλητή, που ορίζεται αλλού και εμείς απλά ελέγχουμε την τιμή της.

Όσον αφορά στα αντικείμενα prey και predator, με βάση τις οδηγίες του fpsom , αυτά τα δημιουργούμε εμείς. Υπάρχει η μεταβλητή amPrey στον constructor της κλάσης μας Creature. Η μεταβλητή αυτή είναι boolean. Αν δημιουργήσεις ένα αντικείμενο της κλάσης Creature πχ με όνομα plasma, τότε αν plasma.amPrey==true αναφέρεσαι στο θήραμα, ενώ όταν plasma.amPrey==false αναφέρεσαι στον κυνηγό. Κάπως έτσι νομίζω ότι είναι μιας και δεν τα δοκίμασα ολοκληρωμένα στην πράξη για να σου πω τι γίνεται ακριβώς.  ^sleep^


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on December 27, 2006, 19:33:51 pm
Xμμ μόλις το κοίταξα και έβγαλα το εξής συμπέρασμα. Έχουν ήδη δημιουργηθεί δύο αντικείμενα της κλάσης Creature, στην κλάση mainPlatform. Το ένα είναι το prey , στο οποίο δίνεται ως όρισμα στον constructor η τιμή true στη μεταβλητή amPrey και το άλλο είναι το predator, στο οποίο δίνεται ως όρισμα στον constructor η τιμή false στη μεταβλητή amPrey. Άρα πιστεύω εμείς αρκεί μέσα στη μέθοδο calculateNextPosition που υλοποιούμε να έχουμε όποτε χρειάζεται ως έλεγχο :
"if amPrey==false" -> κυνηγός  . και
"if amPrey==true" -> θήραμα.
Οπότε όταν χρησιμοποιείται το αντικείμενο prey στην MainPlatform, θα εκτελούνται από το θήραμα μόνο όσα είναι στο βρόχο "if amPrey==true" , ενώ μέσω του αντικειμένου predator θα εκτελούνται από τον κυνηγό όσα βρίσκονται στο βρόχο "if amPrey==false". Προφανώς δεν υπάρχει λόγος να δημιουργήσουμε νέο αντικείμενο στην κλάση Creature. Τέσπα ας μιλήσει και ο fpsom πάνω σε όσα είπα και βλέπουμε 8)


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 27, 2006, 20:47:33 pm
Βασικά η κλάση που μας ενδιαφέρει, η Creature, έχει τη μέθοδο calculateNextPosition. Αυτή δέχεται σαν ορίσματα 1)το διάνυσμα όρασης visionVector, το οποίο υλοποιείται σε άλλη κλάση και καλείται μέσω της κλάσης MainPlatform. 2) τη δυνατότητα οσμής, smell η οποία και πάλι υλοποιείται αλλού, και της δίνεται τιμή αυτόματα όταν καλείται από την κλάση ΜainPlatform. Άρα εμείς δεν τις υλοποιούμε, απλά τις καλούμε. Έτσι αν απλά βάλεις μέσα στην calculateNextPosition, ένα "if (smell<26) System.out.println("Smell="+smell);", θα σου εκτυπώνει κάθε φορά που το ένα creature οσμίζεται το άλλο, πόσα δωμάτια μεσολαβούν ανάμεσά τους.   Η smell είναι μία απλή int μεταβλητή, που ορίζεται αλλού και εμείς απλά ελέγχουμε την τιμή της.

Άρα πιστεύω εμείς αρκεί μέσα στη μέθοδο calculateNextPosition που υλοποιούμε να έχουμε όποτε χρειάζεται ως έλεγχο :
"if amPrey==false" -> κυνηγός  . και
"if amPrey==true" -> θήραμα.
Οπότε όταν χρησιμοποιείται το αντικείμενο prey στην MainPlatform, θα εκτελούνται από το θήραμα μόνο όσα είναι στο βρόχο "if amPrey==true" , ενώ μέσω του αντικειμένου predator θα εκτελούνται από τον κυνηγό όσα βρίσκονται στο βρόχο "if amPrey==false". Προφανώς δεν υπάρχει λόγος να δημιουργήσουμε νέο αντικείμενο στην κλάση Creature.

Ακριβώς αυτό...  :) ;D


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 28, 2006, 04:52:08 am
Έχω σε 5 μέρη γραμμένες 6 ίδιες σειρές. Αυτές θέλω να τις βάλω σε μια μέθοδο?? και σε αυτά τα 5 μέρη να βάλω?? καλώ?? τη μέθοδο.
Για να έχει πιο ωραία δομή ο κώδικας. Μπορώ να το κάνω αυτό;


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on December 28, 2006, 12:10:52 pm
Larry_Flint μ αρέσει που κάθε μέρα απαντάς μετά τις 3 τα ξημερώματα. Ειδικά το τελευταίο σου μην, δεν είχε και πολύ ... δομή. Αποδίδει η υλοποίηση του λαβυρίνθου, μετά από ξενύχτι??  :P
Βασικά σαφώς και γίνεται αυτό που λες. Θα κάνεις μία μέθοδο, η οποία θα δέχεται κάποια ορίσματα (ή δε θα δέχεται εξαρτάται από το τι θες να κάνεις), και θα την καλείς αυτές τις 5 φορές που τη χρειάζεσαι, με τα αντίστοιχα ορίσματα.


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 28, 2006, 15:39:37 pm
A, ωραία θα το δοκιμάσω!

Αποδίδει το μεταμεσονύκτιο προγραμμάτισμα του λαβύρινθου, η Task_B έγινε μετά τις 4 το πρωί.


Title: Re: Εργασία Γ - Απορίες
Post by: Da Bo$$ on December 29, 2006, 01:18:46 am
Μία μάλλον διαδικαστική απορία...
Έχουν δικαίωμα συμμετοχής στην Γ' εργασία όσοι δεν κατάφεραν να ολοκληρώσουν/παραδώσουν την Β' ?


Title: Re: Εργασία Γ - Απορίες
Post by: cyb3rb0ss on December 29, 2006, 01:23:41 am
Δικαίωμα να παραδώσετε την Εργασία Γ' έχετε, ανεξάρτητα του αν παραδώσατε την Α' ή/και την Β'...

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

(Για να προλάβω τυχόν ερωτήσεις: προφανώς ΔΕΝ θα σας δοθεί έτοιμος κώδικας ο οποίος θα εκτελεί τα ζητούμενα της Β΄...)


Title: Re: Εργασία Γ - Απορίες
Post by: Da Bo$$ on December 29, 2006, 01:30:00 am
ʼρα... αποκλειστήκαμε...... :( :(  :'( :'( :'( :( :(


Title: Re: Εργασία Γ - Απορίες
Post by: cyb3rb0ss on December 29, 2006, 01:34:15 am
Εάν μπορείς να κάνεις την υλοποίηση της "μνήμης".... δεν αποκλειστηκες  :???:


Title: Re: Εργασία Γ - Απορίες
Post by: Da Bo$$ on December 29, 2006, 01:36:55 am
Αν όμως, αν...


Title: Re: Εργασία Γ - Απορίες
Post by: charis on December 30, 2006, 00:27:34 am
Ο κυνηγός είπαμε ότι δεν βλέπει τις εξόδους. Γνωρίζει όμως ότι αυτές οι έξοδοι είναι σε εξωτερικά δωμάτια;
Μπορούμε να τροποποιήσουμε τον προηγούμενο κώδικα (εργασία Β) για ακόμα καλύτερα αποτελέσματα; (ενόψει πρωταθλήματος)


Title: Re: Εργασία Γ - Απορίες
Post by: corina on December 30, 2006, 16:46:45 pm
Ο κυνηγός είπαμε ότι δεν βλέπει τις εξόδους. Γνωρίζει όμως ότι αυτές οι έξοδοι είναι σε εξωτερικά δωμάτια;
Μπορούμε να τροποποιήσουμε τον προηγούμενο κώδικα (εργασία Β) για ακόμα καλύτερα αποτελέσματα; (ενόψει πρωταθλήματος)


Γιατί ο κυνηγός να μην βλέπει τις εξόδους?? Αφού χρησιμοποιεί και αυτός όπως και το θήραμα κανονικά την όραση!!! Απλά φαντάζομαι δεν τον ενδιαφέρουν οι εξοδοι γιατί κυνηγάει το θήραμα! Και ούτε μπορεί να καθίσει να στήσει "καραούλι" μπροστά από μία έξοδο, γιατί υπάρχουν και άλλες, οπότε το θήραμα μπορεί να βγει από εκεί!! Άρα φαντάζομαι θα κινείται συνεχώς προσπαθώντας να βρει το θήραμα!

Όσο για τον κώδικα της Β', έχει ήδη απαντηθεί παραπάνω αν διάβασες. Προφανώς και μπορείς να βελτιώσεις των κώδικά σου! Άλλωστε στη Γ' εργασία ουσιαστικά υλοποιείς ξανά την ίδια συνάρτηση, οπότε αφού περιλαμβάνεις και τον κυνηγό και την όσφρηση, προφανώς ο κώδικας θα χρειάζεται τροποποίηση!


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 30, 2006, 17:07:30 pm
Γιατί ο κυνηγός να μην βλέπει τις εξόδους?? Αφού χρησιμοποιεί και αυτός όπως και το θήραμα κανονικά την όραση!!! Απλά φαντάζομαι δεν τον ενδιαφέρουν οι εξοδοι γιατί κυνηγάει το θήραμα! Και ούτε μπορεί να καθίσει να στήσει "καραούλι" μπροστά από μία έξοδο, γιατί υπάρχουν και άλλες, οπότε το θήραμα μπορεί να βγει από εκεί!! Άρα φαντάζομαι θα κινείται συνεχώς προσπαθώντας να βρει το θήραμα!

Αυτό είναι λάθος: ο κυνηγός ΔΕΝ ΜΠΟΡΕΙ να δει τις εξόδους. Με άλλα λόγια το visionVector που παίρνει ο κυνηγός δεν έχει την πληροφορία αυτή. Ακόμα πιο συγκεκριμένα, τα αντικείμενα τύπου Room που υπάρχουν μέσα στο visionVector του κυνηγού, θα έχουν πάντα isExit() == false.


Title: Re: Εργασία Γ - Απορίες
Post by: corina on December 30, 2006, 17:13:34 pm
Κατά τα άλλα φαντάζομαι όμως βλέπει κανονικά τα στοιχεία του δωματίου...σωστά??

Και κάτι άλλο: Η παρουσία ενός από τους 2 παίκτες σε ένα δωμάτιο, γίνεται από τον άλλον παίκτη αντιληπτή μόνο από την όσφρηση? Η μπορεί να γίνει και με την όραση?? Δηλαδή μπορούμε να καλέσουμε κάποια συνάρτηση για το room που βλέπουμε με το visionVector που θα μας λέει αν υπάρχει μέσα κυνηγός (ή αντίστοιχα θήραμα) ή όχι?


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 30, 2006, 17:55:13 pm
Βρήκα bug στον λαβύρινθο!


ΧΑΑΑΑΑ

Το prey μου δεν το πιάνει ο κυνηγός ποτε...


ΑΝ το π΄ρευ πάει κατα πάνω στον κυνηγό δεν πατήσουν στο ίδιο τετράγωνο αλλα σε 2 κολλητά και ο καθένας πάει προς τον άλλον, τότε περνάει ο ένας μέσα απο τον άλλον!!!!!!

ΚΑι μάλλον αυτό γίνεται επειδή δεν πατάνε καμία χρονική στιγμή στο ίδιο τετραγωνο ετσι ώστε να φάει ο κηνυγός το θύμα.!!!!

Οπότε αν το θύμα υπολογίσει τα βήματα ετσι ώστε να πατήσει ένα τετράγωνο πριν τον κυνηγό τότε περνά απο μέσα του!!!!!  ;)


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 30, 2006, 18:04:56 pm
Βρήκα bug στον λαβύρινθο!


ΧΑΑΑΑΑ

Το prey μου δεν το πιάνει ο κυνηγός ποτε...


ΑΝ το π΄ρευ πάει κατα πάνω στον κυνηγό δεν πατήσουν στο ίδιο τετράγωνο αλλα σε 2 κολλητά και ο καθένας πάει προς τον άλλον, τότε περνάει ο ένας μέσα απο τον άλλον!!!!!!

ΚΑι μάλλον αυτό γίνεται επειδή δεν πατάνε καμία χρονική στιγμή στο ίδιο τετραγωνο ετσι ώστε να φάει ο κηνυγός το θύμα.!!!!

Οπότε αν το θύμα υπολογίσει τα βήματα ετσι ώστε να πατήσει ένα τετράγωνο πριν τον κυνηγό τότε περνά απο μέσα του!!!!!  ;)
Ναι, ναι, το ξέρω... :-\ Έχω λάθος στις συνθήκες τερματισμού. Θα κάνω τις απαραίτητες διορθώσεις και θα βγάλω σχετική ανακοίνωση. Αλλά ούτως ή άλλως μπορείτε να το αγνοήσετε προς το παρόν: εάν συμβεί κάτι τέτοιο, πολύ απλά θεωρήστε ότι νικητής είναι ο κυνηγός...

Κατά τα άλλα φαντάζομαι όμως βλέπει κανονικά τα στοιχεία του δωματίου...σωστά??

Και κάτι άλλο: Η παρουσία ενός από τους 2 παίκτες σε ένα δωμάτιο, γίνεται από τον άλλον παίκτη αντιληπτή μόνο από την όσφρηση? Η μπορεί να γίνει και με την όραση?? Δηλαδή μπορούμε να καλέσουμε κάποια συνάρτηση για το room που βλέπουμε με το visionVector που θα μας λέει αν υπάρχει μέσα κυνηγός (ή αντίστοιχα θήραμα) ή όχι?
Ναι υπάρχουν σχετικές συναρτήσεις στην κλάση Room (isPredator() και isPrey() ) ακριβώς με την ίδια λογική της isExit().


Title: Re: Εργασία Γ - Απορίες
Post by: Larry_Flynt on December 30, 2006, 19:59:22 pm
Είπα σε μια στιγμή να μην πώ τίποτα και όταν κάνουμε την παρουσίαση να περνάω μέσα απο τον κυνηγό....
Αλλα σίγουρα θα το έβλεπε κάποιος μέχρι τότε.

Και κάτι άλλο... όταν το θύμα κολλάει σε μια αδιέξοδο και το έχει κλείσει απο την άλλη ο κηνυγός και ξέρει οτι θα πεθάνει θέλω να το κάνω να κάθεται ακίνητο σε μια γωνια... πως γίνεται αυτό; Προς το παρόν το κανα να κάνει μπρος πίσω σε 2 τετράγωνα μέχρι το μοιραίο και να κάνει count down τις στιγμές που του απομένουν!  ;D


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on December 30, 2006, 20:23:12 pm
Καταρχήν, στο eTHMMY υπάρχουν οι νέες κλάσεις MainPlatform και LabyrinthUtilities ("Υλικο Μαθήματος" -> "Εργασίες"). Απλά αντικαθιστάτε τις παλιές κλάσεις του project σας με αυτές που θα κατεβάσετε από το eTHMMY. Αυτά που έχουν διορθωθεί είναι τα εξής δύο bugs:

1. Συνθήκες Τερματισμού (πλέον ανταλλαγές θέσεων μεταξύ prey και predator οδηγούν - σωστά - στον τερματισμό του παιχνιδιού). Σε αυτήν την περίπτωση το τελευταίο στιγμιότυπο που θα βλέπετε στην οθόνη σας είναι τα prey και predator σε γειτονικά (και όχι στο ίδιο) δωμάτια.

2. Bug στο visionVector: υπήρχε ένα λάθος στον κώδικα και τα αντικείμενα τύπου room που υπήρχαν στον visionVector επέστρεφαν πάντα isPredator == false  και  isPrey == false.

Ζητώ συγγνώμη (για άλλη μια φορά) για την αναστάτωση.

Και κάτι άλλο... όταν το θύμα κολλάει σε μια αδιέξοδο και το έχει κλείσει απο την άλλη ο κηνυγός και ξέρει οτι θα πεθάνει θέλω να το κάνω να κάθεται ακίνητο σε μια γωνια... πως γίνεται αυτό; Προς το παρόν το κανα να κάνει μπρος πίσω σε 2 τετράγωνα μέχρι το μοιραίο και να κάνει count down τις στιγμές που του απομένουν!  ;D

Δυστυχώς κάτι τέτοιο δεν υπάρχει σαν επιλογή. Εάν ξέρεις ότι ο θάνατός σου είναι βέβαιος, κάνε ακριβώς αυτό που περιγράφεις - βόλτες μέχρι το final countdown... :)


Title: Re: Εργασία Γ - Απορίες
Post by: Krono on January 04, 2007, 13:14:03 pm
     Πρώτα απ' όλα εύχομαι καλή χρονιά σε όλους
     Τώρα στο θέμα μας! Αν είδα σωστά, με τη νέα έκδοση του κώδικα, θήραμα και ο κυνηγός ξεκινούν πάντα από απόσταση 11 τετραγώνων (smell=11). Αυτό διευκολύνει πολύ την υλοποίηση αφού, όταν ο κυνηγός αρχίζει να καταδιώκει το θήραμα δεν έχει καμία εμπειρία από το λαβύρινθο και κινείται μόνο με την οσμή. Το ίδιο βέβαια ισχύει και για το θήραμα. Ήθελα λοιπόν να ρωτήσω αν τα πράγματα θα παραμείνουν έτσι. Γιατί είχα μείνει με την εντύπωση ότι θήραμα και κυνηγός θα τοποθετούνται στις αρχικές τους θέσεις έτσι ώστε να απέχουν 26 τετράγωνα τουλάχιστον και αρχικά να εξερευνούν το χώρο.


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on January 04, 2007, 14:09:46 pm
Καλή Χρονιά σε όλους επίσης!

     Πρώτα απ' όλα εύχομαι καλή χρονιά σε όλους
     Τώρα στο θέμα μας! Αν είδα σωστά, με τη νέα έκδοση του κώδικα, θήραμα και ο κυνηγός ξεκινούν πάντα από απόσταση 11 τετραγώνων (smell=11). Αυτό διευκολύνει πολύ την υλοποίηση αφού, όταν ο κυνηγός αρχίζει να καταδιώκει το θήραμα δεν έχει καμία εμπειρία από το λαβύρινθο και κινείται μόνο με την οσμή. Το ίδιο βέβαια ισχύει και για το θήραμα. Ήθελα λοιπόν να ρωτήσω αν τα πράγματα θα παραμείνουν έτσι. Γιατί είχα μείνει με την εντύπωση ότι θήραμα και κυνηγός θα τοποθετούνται στις αρχικές τους θέσεις έτσι ώστε να απέχουν 26 τετράγωνα τουλάχιστον και αρχικά να εξερευνούν το χώρο.

Ναι, σωστά το κατάλαβες. Προφανώς στο τουρνουά δεν θα είναι τόσο κοντινή η απόσταση (λογικά θα είναι στο διάστημα [30 - 40]). Εάν θέλετε να κάνετε και εσείς από τώρα "real world" προσεγγίσεις, αλλάξτε τις τιμές των παρακάτω μεταβλητών στην κλάση LabyrinthUtilities:

minDistanceFromPrey = 30;
maxDistanceFromPrey = 40;

Η αρχική απόσταση των 11 τετραγώνων έχει μπει ώστε να μπορείτε να χρησιμοποιείτε (και να ελέγχετε) από την πρώτη στιγμή τήν όσφρηση.


Title: Re: Εργασία Γ - Απορίες
Post by: charis on January 05, 2007, 09:42:18 am
Αν συναντηθούν το θήραμα και ο κυνηγός επάνω στην έξοδο ποιος είναι ο νικητής;
Το θήραμα επειδή βγήκε ή ο κυνηγός;
Χάρης


Title: Re: Εργασία Γ - Απορίες
Post by: Krono on January 06, 2007, 02:12:29 am
Από την πλευρά του κώδικα, και στις δύο περιπτώσεις θα καλείται η συνάρτηση calculateNextPosition. Η υλοποίηση που πρέπει να κάνετε, πρέπι να λαμβάνει υπόψιν της το περιεχόμενο της μεταβλητής amPrey, ώστε να "ενεργοποιείται" κάθε φορά η αντίστοιχη λειτουργικότητα (ένα απλό if μπορεί κάλλιστα να έχει αυτό το ρόλο, αν και υπάρχουν και πιο "κομψές" προσεγγίσεις").
    Ποιά μπορεί να είναι η "πιο κομψή προσέγγιση"; Ρωτάω, κι αν μπορείτε απαντάτε. Με επικάλυψη συναρτήσεων δεν γίνεται και δεν έχω υπόψην μου πώς μπορεί να γίνει. Βέβαια, αυτό είναι το μικρότερο από τα προβλήματα, αλλά τέλος πάντων, έτσι από περιέργεια.


Title: Re: Εργασία Γ - Απορίες
Post by: Verminoz on January 06, 2007, 04:38:08 am
Αν συναντηθούν το θήραμα και ο κυνηγός επάνω στην έξοδο ποιος είναι ο νικητής;
Το θήραμα επειδή βγήκε ή ο κυνηγός;
Χάρης


Πολύ σπάνια περίπτωση αλλά νομίζω ότι είναι δυνατό να συμβεί! ::)


Title: Re: Εργασία Γ - Απορίες
Post by: nicktgr15 on January 10, 2007, 23:56:28 pm
Καλησπέρα!!
Εχει οριστικοποιηθεί ο αριθμός των εξοδων που θα υπάρχουν στην τελικη version; Με 1 εξοδο παντως ,που δοκιμαζω εγω το προγραμμα, εχει μαλλον πλεονέκτημα ο κυνηγός. Απο την αλλη, με 5 εξόδους εχει πλεονεκτημα το θυμα. Νομιζω οτι 2-3 έξοδοι για διασταση λαβυρινθου 20χ25 είναι καλος αριθμός, ωστε να γίνεται και λιγο "παιχνιδι" .  :D


Title: Re: Εργασία Γ - Απορίες
Post by: kekropas on January 11, 2007, 21:21:53 pm
Να ρωτήσω εγώ κάτι απλώς για να σιγουρευτώ:
Έχω μια μεταβλητή στην creature κλάσση που αποθηκεύει την τιμή της προηγούμενης κίνησης. Αυτή λογικά κρατά την τελευταία κίνηση και του κηνυγού και του θυράματος ανάλογα μέσω ποιου object θα κληθεί, έτσι δεν είναι? Το ίδιο γίνεται και για τον πίνακα μνήμης που έχουμε φτιάξει?


Title: Re: Εργασία Γ - Απορίες
Post by: nicktgr15 on January 11, 2007, 21:46:49 pm
Να ρωτήσω εγώ κάτι απλώς για να σιγουρευτώ:
Έχω μια μεταβλητή στην creature κλάσση που αποθηκεύει την τιμή της προηγούμενης κίνησης. Αυτή λογικά κρατά την τελευταία κίνηση και του κηνυγού και του θυράματος ανάλογα μέσω ποιου object θα κληθεί, έτσι δεν είναι? Το ίδιο γίνεται και για τον πίνακα μνήμης που έχουμε φτιάξει?

Ναι, αυτο που λες γίνεται.


Title: Re: Εργασία Γ - Απορίες
Post by: kekropas on January 13, 2007, 04:20:26 am
Να ρωτήσω κάτι ακόμα: Μήπως όταν πατάμε generate maze συνεχόμενα χωρίς να κλείσουμε το παράθυρο και τρέχουμε το παιχνίδι πολλές φορές διαδοχικά μήπως το timestep δε μηδενίζεται? Γιατί μετά από 4-5 εκτελέσεις σταματά κάπου ξεκάρφωτα χωρίς λόγο και δεν μπορώ να βρω αν μπλοκάρει κάπου ο κώδικας ή αν είναι το timestep.

edit:  Μια ερώτηση πιο επείγουσα
Αρχή αρχή έχω ένα τμήμα κώδικα που κάνει το πιο απλό, αν δει ο predator το Prey στο visionVector να κινηθεί ανάλογα. Γράφω λοιπόν:
Code:
if(amPrey==false){
        for(int v=1;v<9;v++){
        if(visionVector[v]!=null&&visionVector[v].isPrey()==true)
        y=v;
           }
        if(y>0){
        if(y==1){newDirection=3;
        }
        if(y==2){newDirection=3;
        }
            if(y==3){newDirection=1;
            }
            if(y==4){newDirection=1;
            }
            if(y==5){newDirection=2;
            }
            if(y==6){newDirection=2;
            }
            if(y==7){newDirection=0;
            }
            if(y==8){newDirection=0;
            }
         }
        }

και δεν δουλεύει. Μπορεί κάποιος να βρει το λάθος?
(To ξέρω ότι συμμαζεύεται λίγο , μόλις βρω το λάθος!)


Title: Re: Εργασία Γ - Απορίες
Post by: Νessa on January 13, 2007, 05:43:51 am
Καταρχάς βγάλε τα ==true και ==false από τις συνθήκες, δε χρειάζονται. Θα βάλεις if(!amPrey) στην αρχή. Στο επόμενο if επειδή αν είναι null το visionVector[v] θα πάει να ελέγξει μία μέθοδο που δεν υπάρχει, θα σου βγάλει μήνυμα λάθους. Γι'αυτό πρέπει να χρησιμοποιήσεις εμφωλευμένα if, δηλαδή:

if (visionVector[v]!=null){
if (visionVector[v].isPrey()){
y=v;
}
}


Title: Re: Εργασία Γ - Απορίες
Post by: kekropas on January 13, 2007, 13:46:16 pm
Για αυτό έχω βάλει διπλό &&, αν είναι null το visionVector[v] δεν πάει ποτέ στη δεύτερη συνθήκη. Θα ψάξω λίγο αυτό με το !amPrey που λες

edit: Δεν είχε κανένα αποτέλεσμα πάλι τα ίδια. Ξεκινάω το Prey και το Predator δίπλα δίπλα και δεν το κηνυγάει


Title: Re: Εργασία Γ - Απορίες
Post by: Νessa on January 13, 2007, 14:06:21 pm
αν είναι null το visionVector[v] δεν πάει ποτέ στη δεύτερη συνθήκη.
Δεν ισχύει αυτό. Όταν είναι στο ίδιο if ο υπολογιστής ελέγχει όλες τις συνθήκες που περιέχει, άσχετα αν εσύ ο άνθρωπος καταλαβαίνεις ότι θα βγει false και δεν πας στη δεύτερη.


Title: Re: Εργασία Γ - Απορίες
Post by: corina on January 13, 2007, 19:13:22 pm
αν είναι null το visionVector[v] δεν πάει ποτέ στη δεύτερη συνθήκη.
Δεν ισχύει αυτό. Όταν είναι στο ίδιο if ο υπολογιστής ελέγχει όλες τις συνθήκες που περιέχει, άσχετα αν εσύ ο άνθρωπος καταλαβαίνεις ότι θα βγει false και δεν πας στη δεύτερη.

ακριβώς! Είναι σαν να ελέγχει ταυτόχρονα και τις δύο συνθήκες. Για να εξασφαλίσεις ότι θα ελέγχει πρώτα την πρώτη, πρέπει να το βάλεις σε χωριστές εντολές. Σ' το λέω γιατί είχα κάνει την ίδια βλακεία στη Β΄εργασία...


Title: Re: Εργασία Γ - Απορίες
Post by: kekropas on January 13, 2007, 20:31:49 pm
Μεταφέρω από βιβλίο:

Η διαφορά του & και του && είναι ότι στη δεύτερη περίπτωση, αν με τον υπολογισμό της
πρώτης παράστασης ο συνδυασμός βγαίνει αληθής ή ψευδής τότε αποφεύγεται ο
υπολογισμός της δεύτερης.
Για παράδειγμα, αν έχουμε την παράσταση
(alpha == true) & (beta == 1)
το πρόγραμμα θα υπολογίσει και θα εξετάσει και τίς δύο προτάσεις ακόμη και αν η
πρώτη (alpha == true) είναι ψευδής.
Με τη χρήση του &&, το πρόγραμμα θα επιστρέψει αμέσως ψευδή τιμή (false) αν η πρώτη
είναι ψευδής, και θα προχωρήσει στον υπολογισμό της δεύτερης μόνο αν η πρώτη είναι
αληθής.


Εξάλλου όταν το έχω με απλό & βγάζει exception ενώ με διπλό && και πρώτο τον έλεγχο για null λειτουργεί οκ.
Πάντως συνεχίζω να έχω πρόβλημα ότι δεν κηνυγά το θύραμα όταν είναι δίπλα του και δεν μπορώ να βρω το γιατί


Title: Re: Εργασία Γ - Απορίες
Post by: Krono on January 13, 2007, 22:16:00 pm
      Δεν ξέρω τί λέει στο βιβλίο αλλά αυτό που σου είπαν τα κορίτσια όντως ισχύει. Κι εγώ είχα διαβάσει ότι δεν ελέγχει τη δεύτερη συνθήκη αλλά μου εβγαιναν NullPointerExceptions και σταμάτησα να βάζω τις διπλές συνθήκες.
      Τώρα αν είναι ή όχι αυτό το πρόβλημα δεν μπορώ να ξέρω. Ειδικά αν δε σου βγάζει exceptions, ενδέχεται να υπάρχει πρόβλημα κάπου αλλού.


Title: Re: Εργασία Γ - Απορίες
Post by: ilithios on January 14, 2007, 17:44:41 pm
Ξέρει κανείς αν πρέπει να κινούνται και οι δυο παίκτες σε κάθε step υποχρεωτικά; Ρωτώ απλά από περιέργεια, δε θα αλλάξω τίποτα τώρα πια, θεώρησα από την αρχή ως δεδομένο ότι σε κάθε step κινούνται και οι δυο παίκτες.


Title: Re: Εργασία Γ - Απορίες
Post by: Krono on January 14, 2007, 20:04:41 pm
Ναι, κινούνται υποχρεωτικά, δεν μπορεί ο ένας να μείνει ακίνητος.


Title: Re: Εργασία Γ - Απορίες
Post by: ilithios on January 15, 2007, 17:32:22 pm
Κύριε Ψωμόπουλε πείτε μας αν μπορείτε πότε θα ξεκινήσει η παράδοση της εργασίας στο ethmmy για να μην δοκιμάζουμε άδικα. Σας ευχαριστώ


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on January 16, 2007, 10:39:04 am
Κύριε Ψωμόπουλε πείτε μας αν μπορείτε πότε θα ξεκινήσει η παράδοση της εργασίας στο ethmmy για να μην δοκιμάζουμε άδικα. Σας ευχαριστώ

Η υποβολή εργασιών έχει ανοίξει...


Title: Re: Εργασία Γ - Απορίες
Post by: vasmil on January 16, 2007, 15:20:06 pm
Αν ο κυνηγός και το θύμα βρεθούν σε διπλανά δωμάτια αλλά δεν αλλάξουν θέσεις και απλώς κυνηγιούνται το ένα πίσω απτο άλλο, το παιχνίδι δεν θα πρεπε να τερματίζει σωστά? Νομίζω ότι τωρα τερματίζει αν ο κυνηγός βρεθεί απλά στη θέση που είχε το θύμα την προηγούμενη φορά. Στη mainplatform ο κώδικας:
if (((preyCurrentPos[0] == predatorPreviousPos[0]) && (preyCurrentPos[1] == predatorPreviousPos[1])) || ((predatorCurrentPos[0] == preyPreviousPos[0]) && (predatorCurrentPos[1] == preyPreviousPos[1]))) {
                     break;
                  }
αντί για OR δεν θα πρεπε να έχει AND???


Title: Re: Εργασία Γ - Απορίες
Post by: KorkoLyk on January 16, 2007, 15:31:03 pm
Καταρχήν, στο eTHMMY υπάρχουν οι νέες κλάσεις MainPlatform και LabyrinthUtilities ("Υλικο Μαθήματος" -> "Εργασίες"). Απλά αντικαθιστάτε τις παλιές κλάσεις του project σας με αυτές που θα κατεβάσετε από το eTHMMY. Αυτά που έχουν διορθωθεί είναι τα εξής δύο bugs:

1. Συνθήκες Τερματισμού (πλέον ανταλλαγές θέσεων μεταξύ prey και predator οδηγούν - σωστά - στον τερματισμό του παιχνιδιού). Σε αυτήν την περίπτωση το τελευταίο στιγμιότυπο που θα βλέπετε στην οθόνη σας είναι τα prey και predator σε γειτονικά (και όχι στο ίδιο) δωμάτια.


Καλημέρα! Σε εμας, με κατεβασμένες τις καινούριες κλάσεις (τις διορθωμένες) το bug αυτό ακόμα υπάρχει...βασικά όταν διασταυρώνονται κυνηγός και θήραμα περνά το ένα μέσα από το άλλο και συνεχίζουν να περπατάνε...το έχει συναντήσει κανένας αυτό? Προσπαθούμε να αλλάξουμε την υλοποίηση για να το ξεπεράσουμε βέβαια...αν αλλάξει κάτι, θα ξαναστείλω... :)

Edit: το μήνυμα το έγραψα πριν δω αυτό το τελευταίο...μπορεί να φταίει αυτό που λες vasmil!


Title: Re: Εργασία Γ - Απορίες
Post by: fpsom on January 16, 2007, 16:10:36 pm
@vasmil: μάλλον έχεις δίκιο και αντί για AND θέλει OR, αν και δεν νομίζω ότι σας δημιουργεί μεγάλο πρόβλημα σε αυτήν τουλάχιστον τη φάση. Ευχαριστώ πάντως για την παρατήρηση (και τη λύση) :)

@KorkoLyk: Εάν το πρόβλημα ανταλλαγής θέσεων παραμένει, τότε μάλλον υπήρξε κάποιο πρόβλημα με το ovewrite των νέων (updated) κλάσεων. Επίσης, μην ξεχάσετε να κάνετε reload και rebuild το project μετά το update.


Title: Re: Εργασία Γ - Απορίες
Post by: AnnieHall on January 16, 2007, 17:22:18 pm
Οι παραδόσεις (ηλεκτρονική - γραπτή) θα γίνουν κανονικά την Παρασκευή ή θα αλλάξει κάτι λόγω καταλήψεων?


Title: Re: Εργασία Γ - Απορίες
Post by: cyb3rb0ss on January 16, 2007, 20:06:34 pm
Η γραπτή λογικά όχι εφόσον έχουμε κατάληψη.
Έτσι και αλλιως όμως θα επισυνάψεις το αρχείο .doc σου στο zip... για την ηλεκτρονική παράδοση.


Title: Re: Εργασία Γ - Απορίες
Post by: KorkoLyk on January 16, 2007, 21:36:57 pm
Ο κ. Μήτκας έβγαλε ανακοίνωση (στη λίστα) ότι οι εργασίες πρέπει να παραδοθού ηλεκτρονικά κανονικά, εντός της προθεσμίας, ενώ η γραπτή αναφορά θα παραδοθεί μετά το τέλος της κατάληψης.