THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομές Δεδομένων => Topic started by: pap-x on November 25, 2014, 22:44:17 pm



Title: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: pap-x on November 25, 2014, 22:44:17 pm
Συζήτηση και σχολιασμός

http://alexander.ee.auth.gr:8083/eTHMMY/archive/46/downloadFile/5853/ds-project-2014-15-B.pdf (http://alexander.ee.auth.gr:8083/eTHMMY/archive/46/downloadFile/5853/ds-project-2014-15-B.pdf)

Για τον έλεγχο αν συμπληρώνουμε 5άδα με μία κίνηση υπάρχει κάποιος έξυπνος τρόπος ή μόνο με άπειρα if?


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: pap-x on December 01, 2014, 12:58:01 pm
κανείς;


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Κηπουρίδης on December 01, 2014, 13:41:31 pm
Υπαρχει αλλα ειναι αρκετα περιπλοκος και δεν αξιζει τον κοπο.

Σκεψου οτι ψαχνουμε πενταδα οριζοντια. Προφανως θα συμμετεχει το καινουριο πουλι που βαλαμε ( ας πουμε οτι ειναι στη θεση x0, y0 ), γιατι αλλιως το παιχνιδι θα ειχε τελειωσει νωριτερα.
Αρκει να πας οσο δεξιοτερα μπορεις και μετα οσο αριστεροτερα μπορεις.
Code:
for ( right = x0; right<NUMBER_OF_COLUMNS && Diko_Mou(right,y0); ++right ) {
  //adeio body
}
right--;

Ουσιαστικα η for βρισκει το πρωτο πλακακι προς τα δεξια που δεν ειναι δικος μας, και μετα γυρναμε 1 προς τα πισω για να παρουμε το τελευταιο που ειναι δικο μας.
Παρομοια

Code:
for ( left = x0; left>=0 && Diko_Mou(left,y0); --left ) {
  //adeio body
}
left++;

Τωρα πες οτι βρηκαμε οτι το left ειναι στο x=1 και το right στο x = 6. Αρα εχω εξαδα και νικησα. Γενικα ο ελεγχος ειναι
Code:
if ( right - left + 1 >= 5 ) {
   //Niki ole
}

Παρομοια και για τις αλλες 3 κατευθυνσεις ( 2 διαγωνιες και μια κατακορυφη ).

Η βελτιωση που μπορεις να κανεις για να γλιτωσεις τον πολυ κωδικα ειναι να κανεις δυο πινακες, εναν dx[] ( δηλαδή  direction_x[] ) κι εναν dy[] ( δηλαδή direction_y[] )
οπου
dx[] = {0,1,1,1,0,-1,-1,-1}
dy[] = {1,1,0,-1,-1-,1,0,1}

Αν παρεις μια μια τις εγγραφες ( δηλαδη dx[1] και dy[1], ή dx[2] και dy[2] ) θα δεις οτι οριζουν μια κινηση ( +1 στα x και +1 στα y, δηλαδή διαγώνια πάνω δεξιά, ή +1 στα x και 0 στα y, δηλαδη οριζοντια δεξια ). Ουσιαστικα τα εχω γραψει με τη φορα των δεικτων του ρολογιου.

Τωρα μπορεις να εχεις μια πιο γενικη for :
Code:
for ( horizontal=y0,vertical=x0; horizontal>=0 && horizontal<NUMBER_OF_ROWS && vertical>=0 && vertical<NUMBER_OF_COLUMNS && Diko_mou(vertical,horizontal); horizontal += dy[i], vertical += dx[i] ) {
  //Keno body
}
horizontal -= dy[i];
vertical -= dx[i];

οπου i ειναι ενας αριθμος απ το 0 ως το 7, κι αντιπροσωπευει μια απ τις 8 δυνατες κατευθυνσεις ( που εχουν καταχωρηθει στους πινακες dx - dy ).
Αρα ο,τι εχω γραψει πια πανω πρεπει να κλεισει σε μια for ( i = 0...7 )

Ο τροπος αυτος ειναι βεβαια αρκετα πιο περιπλοκος, οποτε θα μπορουσες να πας με 4 φορες το πρωτο πραμα που ειπαμε.


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: pap-x on December 01, 2014, 20:54:37 pm
Νάσαι καλά φίλε μου! Αρκετά έξυπνο  ;)


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: airguitar on December 03, 2014, 19:47:10 pm
Παιδια καμια βοηθεια για το πως στην  int evaluate() θα ελεγχω αν η νεα θεση ειναι διπλα σε σχηματισμενη 4δα ?
Επισης την συναρτηση boolean createsQuintuple(int x,int y,Board board) πρεπει εγω να την υλοποιησω ή υπαρχει ετοιμη ?

Και κατι πιο γενικο. Η συναρτηση evaluate θα εχει επαναληψη (for) μεσα ή θα καλειται απο την getNextMove οσες φορες χρειαζεται ?


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Napoleon on December 03, 2014, 21:47:04 pm
Το πως το εξηγεί το παιδι από πανω.όχι δεν είναι έτοιμη εσύ(αν θες) την φτιαχνεις. Η evaluate δεν θα έχει for,τρέχει για το κάθε tile ξεχωριστά (που σημαίνει οτι η getnextmove θα έχει for


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: απλυτος on December 09, 2014, 17:02:03 pm
μπορεί να εξηγήσει κάποιος τι γίνεται με το playerid του tile και το id του random player;

το id παίρνει 1 αν είναι ο ασπρος παικτης
και                2                 μαυρος παικτης

πως καταλαβαίνω αν ο δικός μου είναι ο ασπρος η ο μαυρος για να το συγκρινω μετα με το playerid του tile;;


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Napoleon on December 09, 2014, 18:15:39 pm
Για το id του δικού σου παίχτη εχεις την μεταβλητή id και για το id του tile εχεις την συναρτηση getid δηλαδή σύγκρινε με την μεταβλητή και όχι με αριθμό


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: απλυτος on December 09, 2014, 18:35:56 pm
Για το id του δικού σου παίχτη εχεις την μεταβλητή id και για το id του tile εχεις την συναρτηση getid δηλαδή σύγκρινε με την μεταβλητή και όχι με αριθμό

καταρχάς ο δικός μου παίκτης μπορεί να είναι είτε ο μαύρος είτε ο λευκός, που θα αποθηκεύει στην μεταβλητη id του παικτη μου την τιμη 2 ή 1 αντιστοιχα.

εστω οτι εχει η id του παικτη μου την τιμη 2. (που υποθετω οτι σημαινει οτι εχω τα μαυρα πούλια)

θελω να δω αν το tile με συντεταγμενες x0, y0 ειναι δικο μου ή του αντιπαλου ή άδειο. Τι κωδικά ακριβώς πρέπει να γράψω;

υγ. το ρωτάω έτσι για να μη χαθούμε στις περιγραφές της καθε μεταβλητης


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Napoleon on December 09, 2014, 22:27:59 pm
Δικο σου: board.getTile(x0,y0).getColor()==id
Άδειο: board.getTile(x0,y0).getColor==0
Αντιπάλου:μια λύση είναι να ορίσεις την μεταβλητή idantipalou=(id=1?2:1) που σημαίνει αν το id σου ειναι 1 του αντιπάλου θα είναι 2,αλλιώς του αντιπάλου θα είναι 1 και μετά board.getTile(x0,y0).getColor()==idantipalou


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: anaslout on December 10, 2014, 21:17:41 pm
παιδια μια ερωτηση,για το δευτερο κομματι της εργασιας δημιουργω καινουριο project που εισαγω τα partb μονο η δουλευω στο προυπαρχον προτζεκτ οπου εχω το parta και απλα εισαγω και το partb;


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Μεταλλαγμένη Πάπια on December 10, 2014, 23:27:32 pm
παιδια μια ερωτηση,για το δευτερο κομματι της εργασιας δημιουργω καινουριο project που εισαγω τα partb μονο η δουλευω στο προυπαρχον προτζεκτ οπου εχω το parta και απλα εισαγω και το partb;

Σβησε το παρτ Α και κανε ιμπορτ το παρτ Β.


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: anaslout on December 11, 2014, 01:22:18 am
σε ευχαριστω


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: ori0ngel on December 11, 2014, 02:35:49 am
πως παιρνουμε τις τιμες που ειναι στην arraylist και τις βαζουμε στον τελικο πινακα που μας ζηταει;

nextMove[1]=list.get(0);
nextMove[2]=list.get(1);

εχω πχ αυτες τις εντολες και μου βγαζει error οτι δεν μπορουμε να κανουμε convert απο int[] σε int.
Ο πινακας nextMove ειναι δηλωμενος ως εξης:
int[] nextMove=new int[2];


Title: Re: [Δομές Δεδομένων] Εργασία Β 2014/2015
Post by: Napoleon on December 11, 2014, 16:06:42 pm
η arraylist επιστρέφει πίνακα.Δηλαδή αν θες πχ τον πίνακα στη θέση i να επιστρέψεις σαν τελική θέση λες
Code:
int[] flagArray=list.get(i);
nextMove[0]=flagArray[0];
nextMove[1]=flagArray[0];