k33theod Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 Γεια σε όλους Κάνω ένα σκάκι για 2 άτομα σε javascript και κολλάω λίγο με τις κινήσεις Για το black Pawn έγραψα το παρακάτω αλλά δεν είμαι σίγουρος function control_black_pawn(x1,y1,x2,y2){//x1y1 είναι η αρχική θέση x2y2 η τελική if (x2-x1!=1 || x2-x1!=2 || Math.abs(y2-y1)>1)//αν το δχ δεν είναι 1 ή 2 ή το δψ είναι μεγαλύτερο του +-1 return false; if (!chessboard[x2][y2].hasChildNodes() && y1!=y2)//αν δεν υπάρχει στο στόχο άλλο πιονι και αλλάξει το y return false; if (x1!=1 && x2-x1>1)//αν δεν ειναι στην αρχή και κανει περισσότερα απο 1 βήματα return false; return true; } καμιά ιδέα αν είναι σωστός ο αλγόριθμος που έχω στα σχόλια;
kaliakman Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 Σωστός φαίνεται ο αλγοριθμος απλά συνήθως τον καθετο άξονα τον έχουμε ως y'y και όχι τον οριζοντιο αλλά αυτό είναι δικό σου θέμα ως convention.
defacer Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 (επεξεργασμένο) Συνήθως σε τέτοιες περιπτώσεις κάνεις return true στις συνθήκες και false στο τέλος. Έτσι που το έχεις είναι δυσνόητο μόνο και μόνο επειδή εκφράζει τις ανάποδες συνθήκες από αυτό που έχει κανείς στο μυαλό του "πώς κινείται ένα πιόνι". Έτσι που είναι γραμμένο πραγματικά δεν έχω ιδέα αν είναι σωστό, το οποίο σημαίνει ότι είναι γραμμένο "λάθος". Επίσης δεν επιτρέπει en passant κόψιμο, ούτε αν καταλαβαίνω καλά και προαγωγή. Ακόμα, δε βλέπω να ελέγχει αν προχωρήσει 2 ότι το ενδιάμεσο τετράγωνο πρέπει να είναι κενό. Γενικά φαίνεται ότι έχει θέματα αλλά όχι ποια ακριβώς είναι τα θέματα. Και βέβαια χρειάζεσαι ξανά τα ίδια πράγματα λίγο διαφορετικά για white pawn. Αν τα βάλεις όλα μαζί, θα έλεγα ότι είναι μια reasonable αρχή αλλά έχει πολύ δρόμο για εξέλιξη. Επεξ/σία 23 Ιουνίου 2018 από defacer
k33theod Δημοσ. 23 Ιουνίου 2018 Μέλος Δημοσ. 23 Ιουνίου 2018 (επεξεργασμένο) 1 ώρα πριν, kaliakman είπε Σωστός φαίνεται ο αλγοριθμος απλά συνήθως τον καθετο άξονα τον έχουμε ως y'y και όχι τον οριζοντιο αλλά αυτό είναι δικό σου θέμα ως convention. Επειδή έχω βάλει τα τετράγωνα σαν πινακα 8χ8 με βολεύει γιατί αντιστοιχεί στο chessboard[x] [y] 1 ώρα πριν, defacer είπε Συνήθως σε τέτοιες περιπτώσεις κάνεις return true στις συνθήκες και false στο τέλος. Έτσι που το έχεις είναι δυσνόητο μόνο και μόνο επειδή εκφράζει τις ανάποδες συνθήκες από αυτό που έχει κανείς στο μυαλό του "πώς κινείται ένα πιόνι". Έτσι που είναι γραμμένο πραγματικά δεν έχω ιδέα αν είναι σωστό, το οποίο σημαίνει ότι είναι γραμμένο "λάθος". Επίσης δεν επιτρέπει en passant κόψιμο, ούτε αν καταλαβαίνω καλά και προαγωγή. Ακόμα, δε βλέπω να ελέγχει αν προχωρήσει 2 ότι το ενδιάμεσο τετράγωνο πρέπει να είναι κενό. Γενικά φαίνεται ότι έχει θέματα αλλά όχι ποια ακριβώς είναι τα θέματα. Και βέβαια χρειάζεσαι ξανά τα ίδια πράγματα λίγο διαφορετικά για white pawn. Αν τα βάλεις όλα μαζί, θα έλεγα ότι είναι μια reasonable αρχή αλλά έχει πολύ δρόμο για εξέλιξη. Το en passant και την προαγωγή (promotion) δεν τα έβαλα ακόμα. Για το en passant θα το σκεφτώ πολύ 🙄. Τα ενδιάμεσα πουλια τα έλεγχω ξεχωριστά γιατί αφορούν και σε πύργο και σε αξιωματικό και σε βασίλισσα. Το εάν στον προορισμό υπάρχει πιόνι ίδιου χρώματος το καλύπτω ξεχωριστά γιατί αφορά σε όλα τα πουλιά. Αυτό που ξέχασα τελείως είναι η ιδιαιτερότητα του pawn ότι δεν μπορεί να πάει στον στόχο σε ευθεία όταν έχει αντίπαλο πιόνι ☹️ Μέχρι τώρα έχω κάνει έλεγχο μόνο στο άλογο και στον αξιωματικό και το πιόνι τώρα που νομίζω είναι το δυσκολότερο κομμάτι σε όλη τη σκακιέρα σαν αλγόριθμος. Το άλογο είναι μια γραμμή νομίζω ??????? function control_knight_move(x1,y1,x2,y2){ if (Math.abs(x2-x1)==2 && Math.abs(y2-y1)==1 || Math.abs(x2-x1)==1 && Math.abs(y2-y1)==2) return true; return false; } Επεξ/σία 23 Ιουνίου 2018 από k33theod
tsofras Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 Φαντάζομαι θες να ανακαλύψεις και τον αλγόριθμο μόνος σου σωστα?
k33theod Δημοσ. 23 Ιουνίου 2018 Μέλος Δημοσ. 23 Ιουνίου 2018 2 λεπτά πριν, tsofras είπε Φαντάζομαι θες να ανακαλύψεις και τον αλγόριθμο μόνος σου σωστα? Οχι, αν τους έχεις δει κάπου έτοιμους πες μου απλά θέλω να τους καταλαβαίνω
tsofras Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 Ρίξε μια ματιά εδώ αν και έχει διαφορετική λογική από αυτό που πάς να κάνεις https://medium.freecodecamp.org/simple-chess-ai-step-by-step-1d55a9266977 1
k33theod Δημοσ. 23 Ιουνίου 2018 Μέλος Δημοσ. 23 Ιουνίου 2018 5 λεπτά πριν, tsofras είπε Ρίξε μια ματιά εδώ αν και έχει διαφορετική λογική από αυτό που πάς να κάνεις https://medium.freecodecamp.org/simple-chess-ai-step-by-step-1d55a9266977 Αυτό είναι AI να παίζει δηλαδή μόνο του το πρόγραμμα, εγώ είμαι 100 χρόνια πίσω Ένας από τους λόγους είναι ότι το 1ο if του κώδικά μου ισχύει πάντα 😂 Τελικά κατέληξα εδώ function control_black_pawn(x1,y1,x2,y2){ if (x2-x1==1 && Math.abs(y2-y1)==1 && chessboard[x2][y2].hasChildNodes()) return true; if (x2-x1==2 && x1!=1) return false; if (x2-x1==2 && y2==y1 && !chessboard[x2][y2].hasChildNodes() && !chessboard[x1+1][y2].hasChildNodes()) return true; if (x2-x1==1 && y2==y1 && !chessboard[x2][y2].hasChildNodes()) return true; return false; }
tsofras Δημοσ. 23 Ιουνίου 2018 Δημοσ. 23 Ιουνίου 2018 Για να δεις τους αλγόριθμους το έβαλα όχι για να το φτιάξεις σε ΑΙ , η λογική για την κίνηση στα πιόνια μένει ίδια
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα